<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shivam Dhaka</title>
    <description>The latest articles on DEV Community by Shivam Dhaka (@shivam-dhaka).</description>
    <link>https://dev.to/shivam-dhaka</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1098774%2Fbf78588a-f718-4901-b8cd-2f08bb11613b.png</url>
      <title>DEV Community: Shivam Dhaka</title>
      <link>https://dev.to/shivam-dhaka</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shivam-dhaka"/>
    <language>en</language>
    <item>
      <title>Absolutely FREE hosting server for your Backend (For Life)</title>
      <dc:creator>Shivam Dhaka</dc:creator>
      <pubDate>Sun, 25 Aug 2024 13:16:43 +0000</pubDate>
      <link>https://dev.to/shivam-dhaka/absolutely-free-hosting-server-for-your-backend-for-life-172</link>
      <guid>https://dev.to/shivam-dhaka/absolutely-free-hosting-server-for-your-backend-for-life-172</guid>
      <description>&lt;p&gt;You are probably in search of a free server to host your backend, I was too. But don't worry, I got you covered. Your endless browsing ends here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Criteria for Choosing a Server
&lt;/h2&gt;

&lt;p&gt;I was building a Chess app in Node.js with Socket.io.&lt;/p&gt;

&lt;p&gt;So my criteria for choosing a server was simple, but not easy:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;It should be absolutely free for life.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No credit card required.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Web-sockets support.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;But every free hosting service, had their own little caveats. Most of them were free for a limited time like AWS free tier (and required credit card), or they were serverless which weren't fitting my use case as they are short-lived and don't usually support web sockets. There are some exceptions to this, but they require some changes in the code to be configured for Serverless.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Then I found this son of a gun free hoisting service called &lt;a href="https://www.serv00.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Serv00&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It completely supported my use case and I even deployed two of my apps on it. One of them uses MVC architecture and other one is the Chess app with web sockets.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://natours.shivamdhaka1200.serv00.net/" rel="noopener noreferrer"&gt;https://natours.shivamdhaka1200.serv00.net/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://chess-shivamdhaka.vercel.app/" rel="noopener noreferrer"&gt;https://chess-shivamdhaka.vercel.app/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;p&gt;You get so much features, and it supports almost all the popular technologies for absolutely free, some of them are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Support for Modern Technologies: PHP (5.6 to 8.3), Node.js, Python, Ruby, Java, Go, C/C++, Rust, Perl, Django, Pyramid, RoR, Redmine, Trac, Catalyst, TCL/TK, Lua, Erlang, D, R&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;3 GB Storage with Unlimited Monthly Transfer&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Host 100 Websites with 15 System Processes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;10 MySQL, 3 PostgreSQL, and 3 MongoDB Databases&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SSH Access with SSH Tunneling and Remote Database Access&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Free SSL Certificates and HTTP/2 Support&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;E-mail via IMAP and POP3 with SSL/TLS and via WWW (webmail)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Daily Backups and 7-Day Backup Retention&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No Ads with a Free Subdomain (&lt;a href="http://login.serv00.net" rel="noopener noreferrer"&gt;login.serv00.net&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Git/SVN/HG Repositories and Custom Error Pages&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Crontab Tasks and Ability to Run Your Own Software&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All &lt;strong&gt;for free!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Ease of use
&lt;/h2&gt;

&lt;p&gt;If I talk about ease of use, it is not so simple like deployment on Vercel or Cloudflare. You have to manually enter into the server using SSH to configure your app (or you can use their DEVIL web client and FTP for file transfer).&lt;/p&gt;

&lt;p&gt;But I take this as a learning opportunity. If you have never tried SSH, trust me, it's worthwhile to give it a shot.&lt;/p&gt;

&lt;p&gt;This is the first part of the blog, I'm planning to write a second part explaining how to set up your own app on Serv00.com and how did it. If you want to read that, do leave a comment mentioning that. It will help and encourage me. :)&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations of Free Hosting Servers
&lt;/h2&gt;

&lt;p&gt;Being free comes with its own limitations. The biggest ones are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Resource restrictions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This was my biggest concern, as this server comes only with &lt;strong&gt;520mb&lt;/strong&gt; of RAM. You need to optimize your apps if you want to deploy multiple of them. I have two Node.js apps currently running on it. And it is already utilizing 70% of the RAM.&lt;/p&gt;

&lt;p&gt;If you want to save some RAM, I will suggest that you only deploy your backend on it, you can deploy your frontend on some free CDN like Vercel or Cloudflare. They are free till a very large number of requests.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;No admin access&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As it is a shared server, you do not get admin access. But in my opinion it is not that much of a hassle because you get an option to “run your own application” and admin usually installs the needed software (which is allowed) for your application.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Potential downtimes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I haven't faced major downtimes, just 1 hour of downtime in last 2 months.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Overall community support
&lt;/h3&gt;

&lt;p&gt;Community support is great. There is a forum where you can ask your questions. Admin typically replies to people queries in a day or two, and they are helpful. I myself tried the forum multiple times and every time admin solved my query, so that's a plus point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;So if you're looking for a free server, for your personal project or for learning development, Serv00.com is the best one for your needs.&lt;/p&gt;

&lt;p&gt;If you liked the blog and find it helpful, do leave a like. It will give me encouragement to write such more blogs. And if you want a guide on how to use Serv00.com and set up your own application. Do let me know in comments. 🍀✌️&lt;/p&gt;

&lt;p&gt;Connect with me on LinkedIn: &lt;a href="https://www.linkedin.com/in/shivam-dhaka12/" rel="noopener noreferrer"&gt;&lt;strong&gt;shivamdhaka&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>backenddevelopment</category>
      <category>devops</category>
      <category>backend</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I wrote my own Reconciler (React)</title>
      <dc:creator>Shivam Dhaka</dc:creator>
      <pubDate>Sat, 24 Aug 2024 13:50:26 +0000</pubDate>
      <link>https://dev.to/shivam-dhaka/i-wrote-my-own-reconciler-react-59kj</link>
      <guid>https://dev.to/shivam-dhaka/i-wrote-my-own-reconciler-react-59kj</guid>
      <description>&lt;p&gt;First things first, what exactly is a Reconciler? Let me walk you through it. You might have heard of React, Vue, and Angular. They incorporate reconciliation algorithms as a core part of their functionality. But before diving into what it does exactly, let's understand why we need it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do we need Reconcilers?
&lt;/h2&gt;

&lt;p&gt;In the pre-React days, the primary ways to build dynamic websites were Vanilla JS or some low-level frameworks. Suppose our site loads data from a database.&lt;/p&gt;

&lt;p&gt;So, every time there's a change in data, a fetch request goes to the database to bring the updated data. To display this data in our DOM, we have to clear the DOM completely first and re-render it according to the new data.&lt;/p&gt;

&lt;p&gt;The problem here is that, for every small change in data (or State, as called in React), the entire DOM needs to be re-rendered. And this is not optimal. To address this problem, Reconcilers came into the picture.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are Reconcilers?
&lt;/h2&gt;

&lt;p&gt;Reconcilers like React basically calculate the difference between the current State (data) and any new, updated State. By calculating the diff (as you might have seen in git), they can update DOM elements individually, thus preventing the need to re-render the entire DOM.&lt;/p&gt;

&lt;p&gt;Suppose we are writing a small to-do list application, and the to-dos are coming from a backend. How would the code look like?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Fetch a list of to-dos from the database.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a DOM element for every to-do in the list.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Append the DOM child elements to a parent DIV and render it.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So, whenever there is a new to-do, we have to make a new fetch call, bringing back the updated list. Then we re-render the whole DOM. However, if we are using a Reconciler like the one used in React, it would store the list of to-dos in something called State.&lt;/p&gt;

&lt;p&gt;Whenever there is a change in state, like a new fetch request in this case, it would calculate the diff between the old state and the new state. Then it'll know that there is only a new to-do and just add that to the existing DOM without re-rendering it completely. It uses various techniques like the Virtual DOM, but the main gist is this.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I wrote my own Reconciler?
&lt;/h2&gt;

&lt;p&gt;I wrote a simple Reconciler, and you can do the same.&lt;/p&gt;

&lt;p&gt;To calculate the difference between the old and new state, we need to store these two states globally. Say OldState and todoState.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftjrgd4fgmrob7owc5jku.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftjrgd4fgmrob7owc5jku.png" alt="Current and old state arrays" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Whenever there is a change in our todos, we just add it to todoState and call a function, updateState(). It will take care of calculating the diff between the old and new State.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2mm60c2gt609nx4hz12.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2mm60c2gt609nx4hz12.png" alt="Updating current state and calculating diff" width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How will it do that? By calculating three arrays:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;What is added?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is removed?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is updated?&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9jx89mixtei2tx2uk2ac.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9jx89mixtei2tx2uk2ac.png" alt="Declare added, deleted and updated array" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fssc5mgk2x9rqiqheq83n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fssc5mgk2x9rqiqheq83n.png" alt="Diffing function code" width="800" height="1020"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then we just need to call addToDom(), removeFromDom(), and updateInDom() for every element in the above array. These will respectively add, remove, and update DOM elements individually.&lt;/p&gt;

&lt;p&gt;And at last, just update the oldState to newState.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F61uf1zrg7wgcyt6ywrxq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F61uf1zrg7wgcyt6ywrxq.png" alt="Updating DOM" width="800" height="622"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, React is a collection of mainly two libraries, React and React DOM. React is responsible for calculating the diff (updateState() function in this case), and React DOM updates the DOM (addToDom(), removeFromDom(), and updateInDom() in this case).&lt;/p&gt;

&lt;p&gt;Voilà, now you know how React and Reconcilers work!🍀✌️&lt;br&gt;
If you liked my explanation, just leave like to boost my motivation. 😉&lt;/p&gt;

&lt;p&gt;Connect with me on LinkedIn: &lt;a href="https://www.linkedin.com/in/shivam-dhaka12/" rel="noopener noreferrer"&gt;ShivamDhaka&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How to actually start learning DSA?</title>
      <dc:creator>Shivam Dhaka</dc:creator>
      <pubDate>Sun, 02 Jul 2023 10:55:54 +0000</pubDate>
      <link>https://dev.to/shivam-dhaka/how-to-actually-start-learning-dsa-4h6c</link>
      <guid>https://dev.to/shivam-dhaka/how-to-actually-start-learning-dsa-4h6c</guid>
      <description>&lt;p&gt;This was the question I used to find myself asking my seniors the most. I wasn't sure whether to buy a course or learn from free resources.&lt;/p&gt;

&lt;p&gt;After going through various resources, I found a strategy that worked for me. And it's all free! 🆓💡&lt;/p&gt;

&lt;p&gt;And if you are wondering, are there any prerequisites, check out this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://shivamdhaka.hashnode.dev/when-to-start-learning-dsa" rel="noopener noreferrer"&gt;When to start learning DSA?&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now that you are prepared with the prerequisites, let's see how to actually start learning DSA. 📖📝&lt;/p&gt;




&lt;h2&gt;
  
  
  Theory 📚
&lt;/h2&gt;

&lt;p&gt;Before deep diving into problem-solving, it is necessary to know the basics. Find out the answers to these questions before starting to solve problems.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What are Data Structures? 🗂️&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What are Algorithms? ⚙️&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Need for time and space-efficient algorithms in the industry. ⏱️📈&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Time and Space Complexity. ⏰🧩&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Big (O) notation. 📈🆒&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Syllabus 📑
&lt;/h2&gt;

&lt;p&gt;Knowing these topics will get you covered.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Arrays&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;HashMaps&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sliding window and two-pointer&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stack, Queue, and Monotonic Stack&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Searching&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;String searching and Pattern Matching algorithms&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Heaps&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Intervals and Scheduling algorithms&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bit Manipulation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recursion&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Backtracking&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Greedy&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dynamic Programming&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linked List, Cache algorithms&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tree&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Trie&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Graph, Union Find, and Disjoint Set&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Platforms 🌐
&lt;/h2&gt;

&lt;p&gt;The most essential thing in learning DSA is solving problems. And you'll need a platform on which you can solve problems. Let's go through some popular coding platforms. 🌟🚀&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;HackerRank&lt;/strong&gt;: This is the platform on which I first started coding. It contains beginner-friendly and descriptive type coding problems. Also, you can hone your programming language skills here.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GeeksForGeeks&lt;/strong&gt;: GFG is another favorite for a lot of coders out there. It has improved a lot lately and can be a one-stop solution for you as it has various articles on almost every topic there is in DSA.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;LeetCode&lt;/strong&gt;: This is the most popular platform for practicing DSA problems. It has a large community that will help you a lot. And most of the questions here are asked directly in interviews. I'll recommend LeetCode without a second thought. 🌟🔥&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Strategy 🎯
&lt;/h2&gt;

&lt;p&gt;Now comes the most important part, what is the strategy you should follow for optimal learning. Let me break it down for you.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pick a topic:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;First, pick a topic (like array/stack and preferably in the order which I mentioned above). Then try to learn about that topic (theory) as much as possible from various sources. They can be books, MIT courses, YouTube videos, practically anything you like.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once you feel comfortable with the topic on a theoretical level, explore some popular YouTube playlists around that topic and pick one. Watch it completely and make some notes (if you feel like it). After going through it, you'll know the standard questions around that topic that are generally asked in interviews.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Solving Problems:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Now that you have an understanding of the basics around that topic, it is time to start solving problems. But the question arises, which questions to solve as there are more than 2200 hundred questions on LeetCode. Here, DSA sheets save the day. You can search for different DSA sheets and choose one you like.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;My recommendation will be &lt;a href="https://takeuforward.org/strivers-a2z-dsa-course/strivers-a2z-dsa-course-sheet-2/" rel="noopener noreferrer"&gt;Strivers' AtoZ DSA Sheet&lt;/a&gt;. This sheet nicely categorizes problems based on topics as well as difficulty levels. Here you can track your progress too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tips:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Keep track of questions you are solving and make notes of those questions. These notes need not be large, just 2 to 3 lines for a question that can summarize the logic used in the question will be sufficient.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don't spend more than 30 minutes on a question if you don't have any idea how to solve it. After the first 30 minutes, see some hints and give another 20 to 30 minutes. Even if you are unable to come up with an approach, watch some YouTube videos of that question until the person describes the approach.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After that, try to code the approach yourself. After submitting the solution, review other solutions that performed better than yours and try to understand their approach.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don't forget to revisit the questions you have solved previously, as you can start forgetting the questions you have solved before some time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the end, everything comes down to &lt;em&gt;CONSISTENCY!&lt;/em&gt; Always remember, Consistency is the key. 💪✨&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Be Consistent and Happy Coding! 🍀
&lt;/h4&gt;




&lt;p&gt;My other popular articles:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://shivamdhaka.hashnode.dev/when-to-start-learning-dsa" rel="noopener noreferrer"&gt;When to start learning DSA?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://shivamdhaka.hashnode.dev/best-programming-language-for-dsa" rel="noopener noreferrer"&gt;Which langugae to choose for DSA?&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Connect with me on LinkedIn for more content: [&lt;em&gt;Shivam-Dhaka12&lt;/em&gt;](&lt;a href="https://www.linkedin.com/in/shivam-dhaka12/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/shivam-dhaka12/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>dsa</category>
      <category>coding</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Best programming language for DSA?</title>
      <dc:creator>Shivam Dhaka</dc:creator>
      <pubDate>Sat, 17 Jun 2023 11:13:31 +0000</pubDate>
      <link>https://dev.to/shivam-dhaka/best-programming-language-for-dsa-162p</link>
      <guid>https://dev.to/shivam-dhaka/best-programming-language-for-dsa-162p</guid>
      <description>&lt;p&gt;Most of us who are starting to learn Data Structure and Algorithms stumble upon this question frequently. Or you are maybe wondering, "Should I switch to another language?". So, let's clear the fog on this topic and find out what is the right choice.&lt;/p&gt;

&lt;p&gt;Let's explore what options are available to us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;C++&lt;/li&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note:&lt;/p&gt;

&lt;p&gt;I wouldn't recommend JavaScript for those who are new to the language or just starting to learn DSA. As there is a lack of resources in comparison to other languages. And there can be a steep learning curve in understanding basic underlying programming concepts using JS.&lt;/p&gt;

&lt;p&gt;However, if you have interest in Web Development and know JavaScript beforehand, then I will highly recommend it to you. It is the most practical language to learn in terms of your career if you are a web developer.&lt;/p&gt;




&lt;h2&gt;
  
  
  The language which is best for you is.....
&lt;/h2&gt;

&lt;p&gt;If I were to suggest only one language to someone for DSA, I would say, &lt;em&gt;"Choose the language which you are most comfortable with."&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Let me explain the reason behind this, because the underlying and basic concepts of programming remains the same for every programming language. Only syntax and support of libraries changes.&lt;/p&gt;

&lt;p&gt;Every one of them have pros and cons &lt;em&gt;(which I'll discuss in detail below)&lt;/em&gt;. But, these differences only account for nearly 10% of your understanding of the programming paradigms and underlying DSA concepts.&lt;/p&gt;

&lt;p&gt;The main factor which will affect your understanding is your level of comfort with the language. If you are enjoying yourself solving the problems in some particular language, then that language is the best suitable for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing the right language if you are an absolute beginner.
&lt;/h2&gt;

&lt;p&gt;The right language if you are starting from scratch depends on a lot of factors and what you want to do.&lt;/p&gt;

&lt;p&gt;Let's go through each language in detail to know if it is made for you or not.&lt;/p&gt;

&lt;h2&gt;
  
  
  C++
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjfjsipt2yt0t15pxste6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjfjsipt2yt0t15pxste6.png" alt="C++" width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pros:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;C++ is the most memory optimized language in all three.&lt;/li&gt;
&lt;li&gt;It is known for its high level performance and low level control.&lt;/li&gt;
&lt;li&gt;Wide support for libraries, including Standard Template Library(STL).&lt;/li&gt;
&lt;li&gt;Best suited for Competitive Programming.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It has a steep learning curve, as the syntax is not beginner-friendly and can seem complex to someone who is just starting out.&lt;/li&gt;
&lt;li&gt;Less industry adoption now days as compared to other two languages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Industry adoption: Game Development, System Softwares, Networking and Telecommunication, Computer Vision and Graphics, High Performance Computing.&lt;/p&gt;

&lt;p&gt;If you want to do Competitive Programming or have interest in any above-mentioned field, then you can give C++ a try.&lt;/p&gt;

&lt;h2&gt;
  
  
  Java
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1wtusdyrev4vlda65fag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1wtusdyrev4vlda65fag.png" alt="Java" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pros:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Java has a clean and well-structured syntax with almost zero space for ambiguity (confusion).&lt;/li&gt;
&lt;li&gt;It is widely known for its Object-Oriented Programming Features.&lt;/li&gt;
&lt;li&gt;Its Collection framework provides pre-built easy to use data structures.&lt;/li&gt;
&lt;li&gt;Relatively high performance compared to python. Automatic memory management (garbage collection).&lt;/li&gt;
&lt;li&gt;It is platform independent, i.e, "write once, run anywhere".&lt;/li&gt;
&lt;li&gt;Extensive industry adoption.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Java code can be more verbose, meaning its code takes more time to write and requires more lines as compared to the other two. Which can be a limiting factor while giving technical interviews.&lt;/li&gt;
&lt;li&gt;Like C++, It has a steep learning curve, as the syntax is not beginner-friendly and can seem complex to someone who is just starting out.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Industry adoption: Enterprise Software Development, App Development, Web Development, Server Side Development, Internet Of Things (IOT).&lt;/p&gt;

&lt;p&gt;Most of today's legacy software are written on Java. If you want a structured high performance language with high industry adoption, Java is the one for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnv3l175am1hp7tjwtik3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnv3l175am1hp7tjwtik3.png" alt="Python" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pros:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python is the most beginner-friendly language in all three.&lt;/li&gt;
&lt;li&gt;Its code is less verbose with English like syntax which is easy to understand.&lt;/li&gt;
&lt;li&gt;Extensive libraries with Third party packages.&lt;/li&gt;
&lt;li&gt;Most popular language in the Software Industry.&lt;/li&gt;
&lt;li&gt;Growing Industry adoption.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slow and relatively low performance compared to the other two.&lt;/li&gt;
&lt;li&gt;The high abstraction of python makes it hard for learners to understand the underlying DSA concepts.&lt;/li&gt;
&lt;li&gt;Somewhat lack of DSA related resources in python as compared to the other two.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Industry adoption: Enterprise Software Development, App Development, Web Development, Server Side Development, Internet Of Things (IOT).&lt;/p&gt;

&lt;p&gt;Python is the most popular language in the industry, and its popularity is growing day by day. With the introduction of AI and data science, it is the most sought language in these industries.&lt;/p&gt;

&lt;p&gt;There you go, now you have the idea of these languages. What they do and for whom they are suited best.&lt;/p&gt;

&lt;p&gt;Happy Coding 🍀&lt;/p&gt;

&lt;p&gt;Opinion:&lt;/p&gt;

&lt;p&gt;If you still don't know which is suitable for you, just choose JAVA. It's the middle way in my opinion, with relatively good performance and high industry adoption.&lt;/p&gt;

&lt;p&gt;If you have any queries or want to see more of my content, feel free to connect with me. Click &lt;a href="https://www.linkedin.com/in/shivam-dhaka12/" rel="noopener noreferrer"&gt;here &lt;/a&gt;to connect with me on LinkedIn.&lt;/p&gt;

&lt;p&gt;Upcoming: How to actually start learning DSA?&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>java</category>
      <category>python</category>
      <category>dsa</category>
    </item>
    <item>
      <title>When to start learning DSA ? 🚀</title>
      <dc:creator>Shivam Dhaka</dc:creator>
      <pubDate>Thu, 15 Jun 2023 05:31:32 +0000</pubDate>
      <link>https://dev.to/shivam-dhaka/when-to-start-learning-dsa--446p</link>
      <guid>https://dev.to/shivam-dhaka/when-to-start-learning-dsa--446p</guid>
      <description>&lt;p&gt;The most common question I get from students is,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;How much should I learn a programming language before starting DSA ?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;I can’t start DSA because I am still learning a programming language.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Starting the preparation of DSA (Data Structures and Algorithms) seems like a daunting task. But what if I tell you, the only thing or let’s say it “the prerequisite” which you need to learn is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The basics of any programming language.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you know the basics of any programming language, you are all set to learn DSA.&lt;/p&gt;




&lt;h2&gt;
  
  
  Does DSA not require advanced programming skills?
&lt;/h2&gt;

&lt;p&gt;This is the natural question that comes into mind naturally, and to answer your question, YES, it requires advanced programming skills.&lt;/p&gt;

&lt;p&gt;However, the best way to learn both of these things, to learn them together.&lt;br&gt;
You’ll learn the programming language better if you are programming and writing code with your own two hands. And solving the DSA problem is the way to do that.&lt;/p&gt;




&lt;h2&gt;
  
  
  How can I solve a DSA problem, if I don't have the necessary language skills?
&lt;/h2&gt;

&lt;p&gt;If you encounter a problem and don’t know how to solve using your existing language skills, don’t worry, just search for the way on the internet, watch a tutorial or ask ChatGPT. That way you will build your language skills along with your problem-solving skills which is required in DSA.&lt;/p&gt;

&lt;p&gt;Now, the question that comes to mind is,&lt;/p&gt;

&lt;p&gt;What is the basic level of any programming language that I mentioned ? What topics does it include ?&lt;/p&gt;

&lt;p&gt;These are the basics topics to learn for any programming language:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Variables&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Loops&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Conditionals&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Functions&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Data types&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Arrays&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can easily learn these topics in 2–4 weeks, even if you are starting from scratch. And if you have already learned these topics, then what are we waiting for ?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy Coding !&lt;/em&gt;🍀&lt;/p&gt;

&lt;p&gt;Upcoming: How to actually start preparing for DSA ?&lt;br&gt;
If you have any queries, don't hesitate to ask me. Click &lt;a href="https://www.linkedin.com/in/shivam-dhaka12/" rel="noopener noreferrer"&gt;here &lt;/a&gt;to connect with me on LinkedIn.&lt;/p&gt;

</description>
      <category>dsa</category>
      <category>programming</category>
      <category>coding</category>
      <category>cloud</category>
    </item>
  </channel>
</rss>
