<?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>Forem: Karan Prajapati</title>
    <description>The latest articles on Forem by Karan Prajapati (@karan_prajapati_2004).</description>
    <link>https://forem.com/karan_prajapati_2004</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%2F3215315%2Fe6bf3246-6181-4202-8cd9-31ce6c8efa12.jpeg</url>
      <title>Forem: Karan Prajapati</title>
      <link>https://forem.com/karan_prajapati_2004</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/karan_prajapati_2004"/>
    <language>en</language>
    <item>
      <title>Lost In Tech? Here's How To Find Path (Without Burning Out)</title>
      <dc:creator>Karan Prajapati</dc:creator>
      <pubDate>Thu, 29 May 2025 05:40:49 +0000</pubDate>
      <link>https://forem.com/karan_prajapati_2004/lost-in-tech-heres-how-to-find-path-without-burning-out-201m</link>
      <guid>https://forem.com/karan_prajapati_2004/lost-in-tech-heres-how-to-find-path-without-burning-out-201m</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;If you've ever opened Twitter (x) or Reddit and felt like you're already behind in tech, you're not alone. Everyone's learning Rust, building AI, mastering React, learning Go, and you're just trying to print "Hello World" without breaking your terminal. Even if you've past the "Hello World" phase, the confusion doesn't always go away, and that's okay.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Over the last few years tech has evolved and is evolving at a very rapid rate, everyday we see new technologies coming, new solutions being introduced for existing solutions, so a constant change is felt in the field of tech.&lt;/p&gt;

&lt;p&gt;Now in order to stay relevant in this field, it is important to keep track of the change in the field and also adapting to the change, which is something good developers do everyday i.e they keep learning new things that are being used in the current times and they keep themselves updated with the change.&lt;/p&gt;

&lt;p&gt;But what about someone starting out in the field of tech? It can feel like &lt;em&gt;like stepping onto an F-1 track mid-race and expecting to keep up with the cars&lt;/em&gt;. That's the same state of a beginner in this field we want to learn those hot and trendy technologies thinking we will be matching the speed of the overall field. But that is far from the reality.&lt;/p&gt;

&lt;p&gt;Even for working professionals and experienced developers, it is often a daunting task to pick something to learn from the tech, thinking whether it is the right investment of their time or not? And that's a valid question.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Myth of the "One True Path"
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;One True Path or Road map&lt;/strong&gt; is probably one of the biggest mistakes that beginners and even experienced developers make, is to follow what just works for &lt;strong&gt;that one guy&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you will ever try to simply look for some path or road map to become something in the field of tech, maybe a web developer, back-end developer or front-end developer etc. You will see a jargon of guides and road-map by various people from tech coming from different backgrounds and sharing their ideas.&lt;/p&gt;

&lt;p&gt;So let's say that a person working in Amazon for the last 5 years, shares a road map for becoming an back-end engineer saying something like,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Java -&amp;gt; Spring Boot -&amp;gt; Database -&amp;gt; System Design&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most people would tend to trust this roadmap simply because it's coming from someone experienced or someone who made it. And that's where the mistake begins.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;That is the exact mistake that most of us make, while choosing the right path&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here, it's not that what the person is saying is wrong, it is a completely valid road-map to become a back-end engineer, but the crucial part to understand is the &lt;strong&gt;context of the road-map&lt;/strong&gt;. For every path or learning journey an &lt;strong&gt;context&lt;/strong&gt; is associated with it which simply means,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Where is it relevant and for who is it relevant?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now for a back-end engineer wanting to work in a company might need to work in Java or maybe Python or Node.js, which depends upon the companies technology stack, so &lt;strong&gt;based on the context that the company works in Java and Spring boot, this road-map is relevant&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The point is that there is no one right solution or path that solves all the problem, in the field of tech there is no right one solution to any problem, the right solution or path is the one that suites the &lt;strong&gt;context of the problem&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Hot Might Not Be Right (For You)
&lt;/h2&gt;

&lt;p&gt;Everyday new technology comes in, instantly becoming a &lt;em&gt;hot and trendy&lt;/em&gt; technology and also sometimes when a big tech company migrates its existing application's code base to some different programming language or framework, then that language and framework becomes the new normal when creating such applications.&lt;/p&gt;

&lt;p&gt;The technologies and frameworks or even any general solutions that get created are there to solve an existing problem or are created for a very specific use case or even provide an improvement over what the existing solutions give, so,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;If it is the better solution then shouldn't we learn it?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Not necessarily&lt;/strong&gt;, as we talked earlier that &lt;strong&gt;context&lt;/strong&gt; is super important to consider when looking at any solution or technology, in the same way here also it is important to understand that what problem does the solution or technology solves and is it relevant to us in any way?&lt;/p&gt;

&lt;p&gt;For example, currently &lt;strong&gt;AI&lt;/strong&gt; is the trendy and hot technology in the field, now if you are aiming for becoming a web developer or a back-end developer, where does the skills in &lt;strong&gt;AI&lt;/strong&gt; fit in,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;It can be relevant for this context if,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want to create a application which needs to use AI, like user personalization or recommendation systems.&lt;/li&gt;
&lt;li&gt;You want to automate things inside the application using AI.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;It cannot be relevant for this context if,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want to just create applications which don't involve AI involvement like CRUD apps, CRM softwares etc.&lt;/li&gt;
&lt;li&gt;You want to just work on the front-end part, where you don't really need any AI.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;So again it falls down to considering the use case or the context of the problem or things you are trying to achieve and based on that you should decide whether you should learn it or not.&lt;/p&gt;




&lt;h2&gt;
  
  
  Choosing the Right Path (With Purpose)
&lt;/h2&gt;

&lt;p&gt;Okay we understand that now, but how to actually choose? So here are some practical questions that you should ask yourself first,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;em&gt;What do you enjoy: front-end, back-end, systems, AI etc?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Do you want to build things fast or learn deeply?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Do you want a job soon or explore broadly?&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This questions will help you filter out choices giving you a broader perspective to what do you really want to do? And often times that is really the main thing we don't really know and mindlessly chase either the currently trending or what everyone is doing, without really considering the motive behind the choice.&lt;/p&gt;

&lt;p&gt;As I have kept on emphasizing the word &lt;strong&gt;context&lt;/strong&gt; throughout this blog and the reason is simply because that is the most crucial aspect of choosing the right path and this questions will give you an clear context of what's going on and what needs to be done.&lt;/p&gt;

&lt;p&gt;Let's take an example of how can one use this questions to choose their direction,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Let's say you are a beginner student just starting out in the field of tech and aspire to become a full stack web developer."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So a beginner might answer these questions as following,&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Case One:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;em&gt;I aspire to be an full stack web developer then surely I enjoy that&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;I want to learn deeply as I am student and have time&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;No currently I am not in a hurry for a job so I would like to explore broadly&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Case Two:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;em&gt;I aspire to be an full stack web developer then surely I enjoy that&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;I want to build things fast.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Yes I am in a hurry because my internship or graduation is near.&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Possible Paths for Case One:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Java -&amp;gt; Spring Boot -&amp;gt; Database -&amp;gt; HTML &amp;amp; CSS -&amp;gt; React&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Java -&amp;gt; Spring Boot -&amp;gt; Git -&amp;gt; Database -&amp;gt; HTML &amp;amp; CSS -&amp;gt; React -&amp;gt; Docker&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Java -&amp;gt; Spring Boot -&amp;gt; Git -&amp;gt; Database -&amp;gt; HTML &amp;amp; CSS -&amp;gt; React -&amp;gt; Docker -&amp;gt; Kubernetes&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Java -&amp;gt; Spring Boot -&amp;gt; Git -&amp;gt; Database -&amp;gt; HTML &amp;amp; CSS -&amp;gt; React -&amp;gt; Typescript -&amp;gt; Docker -&amp;gt; Kubernetes -&amp;gt; AWS (or any cloud services platform)&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The same path can be used if you want to use python or JavaScript, the idea is the same it just depends on your use case, maybe you want to work in python then you can go with Django instead of Spring boot with Python. So the point is consider your &lt;strong&gt;context&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The basic framework for this context is:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;(Any programming language with backend support) -&amp;gt; (Backend framework) -&amp;gt; Git (a necessity) -&amp;gt; (Any Database) -&amp;gt; HTML &amp;amp; CSS (fundamental for web development) -&amp;gt; (Any Front-end library or framework) -&amp;gt; (More skills can be added like devops skills and working with widely used cloud services)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Possible Paths for Case Two&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Python -&amp;gt; Django -&amp;gt; Database -&amp;gt; HTML &amp;amp; CSS -&amp;gt; React&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Node.js -&amp;gt; Database -&amp;gt; HTML &amp;amp; CSS -&amp;gt; React&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here based on the &lt;strong&gt;context&lt;/strong&gt; we are in a hurry so we want to be ready as soon as possible, so we are focusing on the most crucial technologies needed to create websites, now this is a valid choice because it suits the &lt;strong&gt;context&lt;/strong&gt; of the case.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The basic framework for this context is:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;(Any familiar programming language) -&amp;gt; (Backend framework) -&amp;gt; (Database for crud operation) -&amp;gt; HTML &amp;amp; CSS (fundamentals) -&amp;gt; (Any front-end library or framework)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Create Your Tech Roadmap (Step-by-Step)
&lt;/h2&gt;

&lt;p&gt;Here are some general guidelines and tips that has helped me personally constantly improve and thrive in the ever evolving field of tech and above of all maintain my sanity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're a beginner,&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Focus on the fundamentals, they will pay you way more than learning a trendy technology in the long run.&lt;/li&gt;
&lt;li&gt;Focus on one thing at a time, don't jump on multiple things at the same time, it will burn you out.&lt;/li&gt;
&lt;li&gt;Start slow and embrace the initial frustration, it will soon make more sense, just give it some time.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Practice is everything, the rule of thumb to stick to is,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Build, Break, Reflect, Iterate&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If you're a experienced player,&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identify gaps, not trends. At your level, don't just chase trends. Instead do a tech audit, look for job roles above you.&lt;/li&gt;
&lt;li&gt;Revisit the Fundamentals (Yes, Again), with experience, revisiting core concepts (OS, networks, architecture, design patterns) will hit differently.&lt;/li&gt;
&lt;li&gt;Build systems, not just features. You should change your perspective from thinking about a single feature to an whole system.&lt;/li&gt;
&lt;li&gt;Experiment, but with constraints. Trying something new? Don't commit months, your time is valuable. Choose wisely where to invest it.&lt;/li&gt;
&lt;li&gt;The rule of thumb to stick to,&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;It's not "Where do I start?" but rather "What's worth my time now?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Final Takeaway
&lt;/h2&gt;

&lt;p&gt;If you've made it this far, thank you really. The tech world can feel loud, confusing and fast-paced, but the fact that you're reading, reflecting and trying to make sense of your path already puts you ahead.&lt;/p&gt;

&lt;p&gt;Remember: There's no rush, no perfect path, and definitely no single right answer. You don't have to chase every trend or follow someone else's road-map blindly. What matters most is understand &lt;strong&gt;your context&lt;/strong&gt;, your goals, and moving forward with intention.&lt;/p&gt;

&lt;p&gt;Keep learning, keep building, and most importantly &lt;strong&gt;enjoy the journey&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If this helped you or gave you something to think about, feel free to share it with someone who's feeling just lost. Let's help each other figure it out.&lt;/p&gt;

&lt;p&gt;If you have any questions feel free to ask, I would also love to hear suggestions. Thank you for reading.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>"5 Things I Wish I Knew Before I Started Learning C++"</title>
      <dc:creator>Karan Prajapati</dc:creator>
      <pubDate>Wed, 28 May 2025 05:38:45 +0000</pubDate>
      <link>https://forem.com/karan_prajapati_2004/5-things-i-wish-i-knew-before-i-started-learning-c-3kdi</link>
      <guid>https://forem.com/karan_prajapati_2004/5-things-i-wish-i-knew-before-i-started-learning-c-3kdi</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Learning C++ was one of the most challenging and rewarding parts of my journey as a student. But like many others, I jumped into it without a few key things. That led to countless hours lost to confusing compilation errors (segmentation faults became my old enemy!!) and frustrating debugging sessions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;**Here are the five lessons I wish I had learned earlier.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Understanding Pointers Takes Time (And That's okay)
&lt;/h2&gt;

&lt;p&gt;When you're first learning pointers, you're told this classic line:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"A pointer is a variable that stores memory address of another variable".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sure, sounds simple until the &lt;code&gt;*&lt;/code&gt; and &lt;code&gt;&amp;amp;&lt;/code&gt; comes into play and makes you rethink you choices.&lt;br&gt;
Try to reference a memory address that doesn't exists.&lt;/p&gt;

&lt;p&gt;Here's the deal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;amp;&lt;/code&gt; is the &lt;em&gt;address-of&lt;/em&gt; operator, it gives the memory address of a variable.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;*&lt;/code&gt; is the &lt;em&gt;dereference&lt;/em&gt; operator, it lets you access the value stored at a memory address.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now the tricky part is knowing &lt;em&gt;when to reference&lt;/em&gt; and &lt;em&gt;when to dereference&lt;/em&gt;. Most pointer-related errors happens because you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Try to dereference a pointer that points nowhere (&lt;code&gt;nullptr&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Try to reference a memory address that doesn't exists.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Warehouse Analogy That Helped Me
&lt;/h3&gt;

&lt;p&gt;Think of your computer's memory as a big warehouse.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Variables, objects and data are &lt;em&gt;items&lt;/em&gt; on shelves, each with a unique address.&lt;/li&gt;
&lt;li&gt;A pointer is like a &lt;em&gt;warehouse worker&lt;/em&gt; who doesn't carry the item, they just know where it is.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you use &lt;code&gt;&amp;amp;&lt;/code&gt;, you're asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Hey, what shelf is this item on?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And when you use &lt;code&gt;*&lt;/code&gt;, you're asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What's sitting on this shelf?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now imagine asking your warehouse worker to grab something from the shelf that's either empty or doesn't exist anymore. That's exactly what happens when you dereference an invalid pointer, you get &lt;em&gt;undefined behavior&lt;/em&gt;, or more commonly, a &lt;em&gt;segmentation fault&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. The Standard Library Is Your Best Friend
&lt;/h2&gt;

&lt;p&gt;One of the biggest mistakes I made was not understanding and learning the tools that the C++ Standard Library provided. Now we understand &lt;code&gt;std::vector&lt;/code&gt;, &lt;code&gt;std::map&lt;/code&gt; and maybe even &lt;code&gt;std::set&lt;/code&gt;, but there is much more the STL provides, some of them are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;std::multimap&lt;/code&gt;, &lt;code&gt;std::multiset&lt;/code&gt;, &lt;code&gt;std::unordered_map&lt;/code&gt;, &lt;code&gt;std::unordered_set&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;std::pair&lt;/code&gt;, &lt;code&gt;std::tuple&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;&amp;lt;algorithm&amp;gt;&lt;/code&gt; header which contains various useful functions like, &lt;code&gt;std::sort&lt;/code&gt;, &lt;code&gt;std::transform&lt;/code&gt;, &lt;code&gt;std::remove&lt;/code&gt; etc...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The main reasons to use STL is because the methods it provides are,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Highly optimized.&lt;/li&gt;
&lt;li&gt;Very Flexible.&lt;/li&gt;
&lt;li&gt;Provides a much cleaner interface.&lt;/li&gt;
&lt;li&gt;Saves a lot of time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Investing time in understanding the different features of the STL, truly will save you a lot of time and energy while working with different problems.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Compilation Errors Are a Learning Tool
&lt;/h2&gt;

&lt;p&gt;C++ error messages are known to be notoriously complicated and daunting to read through, especially template errors. But there are actually a lot of things you can learn from those error messages and actually use them to debug the error. It all matters to looking at the right place.&lt;/p&gt;

&lt;p&gt;You might be wondering, how can errors even be useful? And that is a valid point, how can something that didn't go or run as expected be good or useful. But the thing is that when our program runs into an error there are couple of benefits to it especially when talking about C++,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They help spot the bug (obviously)&lt;/li&gt;
&lt;li&gt;For template errors, they actually allow us to detect the template related errors which are not detected by our code editors given the generic nature of templates.&lt;/li&gt;
&lt;li&gt;For segmentation faults, they allow to spot potential leaks which we are luckily able to spot, because segmentation faults are not some fixed patterns, they can happen anywhere if memory is not managed properly somewhere.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In-order to use errors messages, go all the way to the top (at the beginning) of the error message there you will see a clear stack of different files from where error is being evoked and that is really helpful to spot from which file and line did the error actually emerge.&lt;/p&gt;

&lt;p&gt;And also some instructions are given for the reasons for why the error is happening which can be really helpful while debugging. If you will also try to read closely you will find some methods where being called internally and they failed, for example when using &lt;code&gt;std::unique_ptr&lt;/code&gt; if we try to copy such a &lt;code&gt;std::unique_ptr&lt;/code&gt;, then we would get some logs like &lt;em&gt;calling an explicitly deleted constructor, which means we are calling a copy constructor which is not allowed in &lt;code&gt;std::unique_ptr&lt;/code&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So the point is, if your fundamentals are clear about the features you use in C++, the errors will start to make some sense. But still C++ errors are not the most intuitive things to look at, so its okay to feel confused when looking at them.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Don't Ignore Memory Management
&lt;/h2&gt;

&lt;p&gt;Coming from languages like Python or JavaScript, one doesn't have to worry much about memory much. But in C++, you &lt;strong&gt;have to&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;One of the great features of C++ and what makes it so powerful is the immense level control it gives to user over the memory, using which very memory efficient application can created (and are created!), but with that being said we all know that famous line,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;With Great Power Comes Great Responsibility&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you don't manage you memory properly, not only will you waste resources but will introduce memory leaks and tracing and fixing memory leaks is no trivial task.&lt;/p&gt;

&lt;p&gt;Here are few ways and good practices to manage memory properly in C++,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand &lt;strong&gt;RAII&lt;/strong&gt; (super important!)&lt;/li&gt;
&lt;li&gt;Understand &lt;strong&gt;stack vs heap memory&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Avoid raw pointers wherever possible and use &lt;em&gt;smart pointers&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Use STL containers and methods.&lt;/li&gt;
&lt;li&gt;If you using raw pointers make sure to delete that memory when it goes out of scope using the &lt;code&gt;delete&lt;/code&gt; keyword.&lt;/li&gt;
&lt;li&gt;Don't mix &lt;code&gt;new/delete&lt;/code&gt; with &lt;code&gt;malloc/free&lt;/code&gt;, they work very differently.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. You Don't Need to Master Everything At Once.
&lt;/h2&gt;

&lt;p&gt;Trying to learn every feature, template, lambdas, multi-threading, all at once will burn you out. Focus on &lt;strong&gt;writing small programs&lt;/strong&gt;. Use what is required by those programs and slowly build the muscle memory first.&lt;/p&gt;

&lt;p&gt;When I was learning C++, I was also tempted to write that advanced level of code, where you use lambdas, templates etc, all the cool stuff that you see in existing C++ code bases for applications. As a result I tried to force myself to use this advanced features in relatively simpler application where a simple solution would be optimal, resulting in over-complicating the relatively simple program.&lt;/p&gt;

&lt;p&gt;So here's the thumb rule that I stick to,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The deeper and complex stuff will make more sense when you &lt;strong&gt;need&lt;/strong&gt; it".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For example, I had this temptation to write such template based function which can be generic and can pass in callbacks (lambdas) and take n number of parameters of different types. And at the beginning I didn't find a place where such an implementation was really required but, when I was working on a multi-threaded application ones, I had to implement my own &lt;em&gt;thread-pool&lt;/em&gt;, so there I had to create a function which would take in a callback and that callback can have n number of parameters of different type, and that callback had to be registered to the thread pool.&lt;/p&gt;

&lt;p&gt;So the point is that every single features exists for a specific use case and you will know when you need it and you will be required to use it, so rush on using the advanced features where its not needed, in complex projects you will have plenty of opportunities to use them.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;C++ is hard, but that's also why it's beautiful. It forces you to understand what's happening under the hood. And once things start to click, its incredibly empowering.&lt;/p&gt;

&lt;p&gt;If you're just starting out: take it slow, embrace the STL and don't fear error messages, they're teachers in disguise. You're not alone, we've all been confused too.&lt;/p&gt;

&lt;p&gt;Now if you read till this point, rest assured because you are well on your way to becoming an C++ addict (like me!!).&lt;br&gt;
Let me know if you're also learning C++, I'd love to hear what you're struggling with or what helped you!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>learning</category>
      <category>cpp</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
