How to actually teach yourself to code

June 25, 2025
So you want to learn to code?
Well done on deciding that you want to start your journey as a developer! There are so many languages to choose between, various libraries and frameworks, and a plethora of applications you could build, but where do you actually start, and how do you really teach yourself? This blogpost will summarise everything that I would tell my past self when I took the plunge to start my journey, like where I went wrong, how to keep focus, and most importantly of all what to do if I get stuck.
We'll start off with identifying the key aspects of the journey, and what really helps to start cementing everything in your mind. Just before that though, let's talk about the most detrimental thing to any newcomer in the space: imposter syndrome.
In short, imposter syndrome is the feeling where you suffer from feelings of intellectual and/or professional fraudulence. This mainly happened to myself when I struggled to understand various things at different points in the journey, making me feel like I hadn't actually learned anything, and was more wasting my own time. This WAS NOT the case though. I just let the negative feelings prevail for a couple days, before snapping myself out of it. IT IS COMPLETELY NORMAL to feel like this every now and then, just know that with time, patience, and consistency, this will eventually pass. My go-to cure for imposter syndrome is simple. Walking/Exercise. Trust me when I say that going for a brisk walk has helped me troubleshoot more issues than helplessly browsing stack overflow. It is really mad how differently you can break things down when allowing your mind and body to recharge. Just keep this in mind, and let's get to the fun part: Where to start!
Where, and how do I start?
When I first began, I was under the impression that I could just learn every programming language required for any project. Obviously I was underestimating exactly how difficult of a task this was. If I could talk to my younger (much more naive self), I would break everything down based on a few really important factors. The main one of course being "what am I actually trying to build?".
I wish I had approached it like this the first time, but instead I started learning Java to build android applications, before changing to C# for building games with unity, then over to front-end web dev (HTML, CSS and Javascript), and finally Python for automation. This was the biggest mistake I made on my journey, as instead of becoming more and more used to the languages I was working with, and therefore more comfortable, and knowledgeable, I was basically resetting my progress and just stagnating at the same level of experience. So what if I could print to the console in four different languages, what had I actually achieved?
Let's break it down like this. Instead of picking a language, and then building something, decide on what you want to create, and then pick the best language and frameworks for achieving it. For example:
- Want to build games? What engine would you like to use? Unity = C# / Unreal = C++ / Godot = Python.
- Want to build websites? Then HTML, CSS, and Javascript will be your first languages.
- Want to build something AI and Machine learning based? Python will be your best bet for this.
- Want to build android specific applications? Then Java, or Kotlin are crucial.
Now people will argue that most programming languages have their own machine learning libraries/frameworks, and that Java can be used for making games. While this is all true, you are better off learning the most commonly used languages for what you want to achieve, especially as a beginner, as there will be a vast amount of online tutorials and books. If you are trying to build something in a language not commonly used for it, then be prepared to have to troubleshoot everything yourself, when you don't fully understand everything. This alone is usually enough to put people off of learning.
I have an idea on what I want to build, now what?
Now that you have decided on a project, and settled on the languages you're going to learn to help realize your goal, what do you do next? My best advice is to watch some basic tutorials on youtube, or read blogposts like this one (but one that covers basics of coding). Also, make sure you try to set some time aside each day to work through the tutorials, as showing up consistently is key for honing your skills as a developer. You won't get very far committing two hours or so a week, so make sure you're giving yourself adequate time! I would suggest at least an hour each day to ensure that what you're learning is sinking in.
One thing I will say is that when learning as a beginner, seeing things actually changing, and providing you with visual feedback is very important. This is why I feel that most people that opt for learning how to build websites for their first project seem to progress a little faster, as pretty much every change you make in the code shows up in the browser instantly. This differs from things like writing a console application in python. You could end up typing hundreds of lines of code without getting any visual feedback at all. Leveraging dopamine is key!
Another point I will make when talking about tutorials is regarding "tutorial hell". This is where a lot of new developers find themselves at some point or another. They work through tutorial after tutorial, building something alongside the instructor, only to find that they don't know where to start a project without any help. Just remember, try not to copy the tutorials completely, instead make the project you're building your own. This will force you to think for yourself a bit more, as you'll have to make your own decisions on things while only following the tutorials for reference.
My last point on this topic is simple. YOU DO NOT NEED TO KNOW EVERYTHING TO START BUILDING THINGS. Don't feel that you have to digest a full book explaining all of the intricacies of the language you are using. Most things can be built with fundamental concepts like variables, decision making, methods and classes. So just try learning the fundamentals before going through tutorials, don't feel that you need to be an expert on the language before building something, or you'll never start the project!
I'm stuck, what do?
When people find out I'm a developer, they think that I spend my whole day slapping the keys on my keyboard, touch typing my fingers to the bone, but they couldn't be less accurate. I spend about 15/20% of my time writing new code each day. The rest of my time is made up by debugging, reviewing other's code, and refactoring. Knowing how to troubleshoot your issue is probably the best skill a developer can have. As much as you would like to just ask someone on a subreddit, or discord, only do this if you feel that you have completely exhausted every other option!
AI is also a really good tool for this (when it comes to simple troubleshooting). If all else fails, you can just copy in your error message, and the AI will point you in the right direction. Even though AI is available, I also suggest only using it if you can't work the issue out yourself. This is only really because relying on AI when you're stuck will hinder your overall learning, and not knowing how to determine an error that the console is telling you will definitely impact potential jobs. When using AI, or even stack overflow or google, don't just copy and paste recommended code. Take the code apart, figure out how it's working and how it solves the issue you were having. Reading someone else's code and actually understanding it will be a massive help throughout your journey!
I finished my first project, now what?
Congratulations on finishing your project! Now you can review. What went well? What did you find difficult? If you were to do the project again, how would you do it differently? Reviewing what you've done is how people master something. What project will you build next? Try sticking with the same language(s) for your first couple of projects. This will let things sink in a bit more, and give you a much better understanding of things, as once you do start understanding one programming language, you'll quickly realise that they are all the same, just with different syntax!