How to start programming from scratch
Every now and then a friend of mine asks me how I’ve started as a developer because they want to try to see if it will work for them as well, as complete beginners. Writing this article so I have a link to point my friends to a resource instead of repeating myself over and over again.
The best way to start nowadays is quite different compared to what it was when I first started, so I am not going to answer how I’ve started specifically, but more like if I have to start now, what would I do?
Prerequisites
What it takes is decent logical thinking and a huge determination to learn. Of course there are other minor factors but these two play the biggest part. If you fail to have them, most probably you’d waste your time. Yes, there are exceptions but I’m talking in general. And tbh I doubt the exceptions are living a great life having a programming career without having these two skills.
Don't spend time choosing a language
Speaking of wasted time, I can’t count the people who lost way too much time taking decisions that simply don't matter at this stage. Number one subject in that list is what programming language to start with. It’s not that important for a few reasons: the fundamentals are almost the same in most modern languages; you will most likely learn at least several languages; you will change your mind at some point in the future, etc. If you haven’t picked yet, let me pick it for you so you can move on. If you want to be a web developer, pick Javascript because it’s the only thing that runs in a browser, for the past few years people also use it as a backend which means you can become full-stack without having to learn a 2nd language, the demand is extremely high so finding a job is super easy, nowadays you can build mobile apps, native apps, basically anything leveraging different technologies which all support javascript, the internet is full of resources, tools, tutorials, etc, and is supported by pretty much every trendy tool (incl. tools by Amazon, Google, etc).
If you have a friend who is a developer and is willing to help you, pick the language they’ve mastered most, and leverage that fact. That developer is by far your most valuable weapon at this point. Of course you don’t want to abuse their time, just write down things you struggle with, and ask them for help once a week or two. Before that make sure to try solving everything you are going to ask about at least three times, and try to explain what you have tried with the simplest possible words. That would help both them and you.
Don't bother with tooling
Tooling is another thing you shouldn’t care about. Yes, developers talk and care about this but that’s because it’s our day job we are talking about, we will optimize as much as we can to save every second here and there because we know that will pay in the long run. But that’s not true for you in case you are starting now simply because you don’t know if you will stick with programming. And I’m telling you for most people dealing with this turned out to be a complete waste of time. Just download Visual Studio Code, stick to the defaults and move on.
Focus on the fundamentals
Enough of what NOT to do. Here's what you want to do instead: be focused on writing code, getting used to the syntax, understanding what various keywords do, and how to solve code problems. It’s already too much, you must leave everything else aside for now. Do NOT move on before you really know what’s going on. You lie to yourself mainly, and even if you make it to some intern/junior position without fully understanding the fundamentals (you’d be surprised how many people I am talking about here) you will struggle big time on your day job, and you will lose 10x, 50x, 1000x more time to catch-up because you will be buried of all kinds of things to worry about at that point. Just don’t do it. Take it step by step, solve at least 10 small tasks after each step, sometimes more, and only move on once you really feel comfortable that you can crack all those tasks if you run into them tomorrow.
Take a course
If you are curious what I mean by “steps”, imagine a chapter of the course you are taking. That could be either a video course, or a collection of articles/tutorials. Currently, there is an extremely wide range of courses you could pick, and although I understand that many of them are bad/incompetent you have to pick one and stick to it untill you feel comfortable. It’s very important to not lose much time deciding which course to pick. Let me make this easy for you (again, if you picked the web dev route). If you don’t mind reading, Mozilla is a trustworthy resource.
For visual learners, I suggest you try a paid course that covers a wide range of topics, diving deeply into each one of them. I recommend everything from Wes Bos, including his JS for beginners course. Note that I am not speaking from experience here about the course itself, I just know that this person cares about his work hence recommending him.
For frontend development you will need HTML and CSS first. That's how browsers visualise things on the screen once you hit a website. At first, just spend 1-2h to understand the concept of html tags and css selectors and move on. You will get back to this shit once you decide that programming, and especially frontend programming is something you have interest in. W3 Schools is a great and free place to quickly go through their HTML and CSS crash courses. Of course, if it's fun for you from the get-go, feel free to dive deep here and build an entire webpage.
Have a project
At first when you start learning programming fundamentals you do tasks specifically to the chapter you are learning. At this point it’s hard to imagine how you will use that in a real world application. However, you should strive to connect the dots asap. It won’t happen on day 1, and is most likely to not happen on day 15 as well. You should know that but at the same time you should feel like the dots are coming together as you move on. And one day it will click, just stick to the process.
Probably the easiest way to connect the dots asap is to have a project you want to build. That way it would be easy to imagine how you can build different parts of the project every time you complete a chapter. If you don’t have anything in mind, just replicate the website/app you are using most often. For most people that would be a social media (eg. instagram, twitter, tiktok, facebook, etc).
Stay away from 3rd party code
You don’t want to use packages you have no idea how they work. That’s true for libraries, frameworks, etc. You can start making exceptions to that rule once you are comfortable with all the fundamentals. But before that, leave that aside. Build everything from scratch by yourself. Once you feel the pain point of rebuilding the same thing, only then use a more robust solution (ie a package, library, framework, etc). Note that I am not talking build-in features/functions in the language itself. In fact, that you are encouraged to use as much as possible.
Learn to Google well
That will open access to questions that were asked and answered by thousands of people, and you will reach the answer instantly. Remember, if you are not finding what you are searching for then most probably you are searching the wrong thing or the search itself could be improved. That’s a skill that you will master as the time goes but it will save you a lot of time in the beginning if you can do it well. Here are some tips from a random article I’ve just found on the internet lol
To be updated...
I consider this article a draft at this stage, and I’ll do my best to update it frequently based on feedback I receive from my friends. If you are a random visitor and something here doesn’t make sense please reach out to me and I’ll try to address it asap. Bonus points, you will receive the answer before I update the article. You can find my email address on the about page.