A hitchhiker's guide to learning software development
Greetings fellow traveler, rest here if you will, I shall tell you how to become a software engineer, maybe not overnight, maybe not ever, but at least you’ll know how.
Starting out: Step nought
Starting out has always been, and will always be, the hardest part of anything, and to be honest, it’s for good reason. If you do it wrong, you will end up wasting months and maybe years of your life on something you just now realized that you don’t want to be.
Scope out, dream, think, and ponder the engineer that you want to be; create images of your future self. Would you be happy sitting behind a desk all day solving problems that are maybe-not-so impressive? That is where you are. Real-world problems are often less impressive and mind-blowing than one would dream about. You will not be some guy in a black hoodie sitting behind a desk in a room filled with retro computers and such. You will be someone who spends 80% of their workday responding to Jira tickets and briefing in meetings with people who have no idea what you’re talking about. Make peace with that, or try to at least.
Learning to code: brace for failure
Well the first obvious step is to choose your tool set, this includes the programming language, operating system and IDE/Text editor.
Problem A: You suck
As someone who’s just starting out, your opinion and choice of tooling is a guess—no matter how educated—it is still a guess, and you fucking suck, so your guess and your choice are almost completely irrelevant. But that’s not a problem per se; mistakes are the only guaranteed way of learning something new.
Problem B: Way too many options
According to some shitty AI-generated website I found while googling, there are about 700 unique programming languages. That might sound like a lot—and it is—but less than 30 of them are relevant, and for you, none are actually relevant. A programming language is just a set of tools (training wheels, if you will) for you to get started, and your first programming language is not hugely relevant because, from what I have seen, you’re very unlikely to actually finish learning it.
You’re very likely to find your true passion/interests while learning a completely irrelevant programming language, abandon said programming language, and start working towards what you actually want to do. So just get started, will ya?
Problem C: Learning resources and paid teaching
There’s a secret method to instantly making every learning resource equal to another, and it is to take every word with a grain of salt. Do not accept the teachings of a book/course/tutor as objective reality. This is not a math class; most of the material is just suggestions at best. Think for yourself and accept content as you see fit.
One very good case of this principle is the book “Clean Code” by Robert C. Martin. This book contains some excellent suggestions for junior developers, but that’s about it. It is not to be taken as a holy code bible, and to be honest, no book should be.
Problem D: Everything is confusing and this guy keeps talking about monads, wtf is a monad?
Software engineering is “overwhelming” at its best, and “WTF is happening” at its worst. Intuition is a dragon you will eventually have to tame, and taming it is not easy. It takes years for the average person to be able to read and understand code like natural language. For some, this might never happen. So just take it slow; you will eventually understand. Being lost is a constant state of mind that you will experience, even getting lost in the code YOU wrote. It is natural; do not let it stop you.
Branching out, choosing fields, learning tools
Besides some major tools that everyone needs to understand (i.e., debuggers, Git, compilers, make, …), the rest of your arsenal is yours to choose and customize. You can choose to be a Java developer who specializes in Spring, or you could choose to be a Python developer who uses Django, or anything in between. Mix and match and choose the tooling that you enjoy the most.
There are many routes to choose from here, and the sheer number of these variations ensures that everyone can find passion in something IT-adjacent. Do not be afraid to start over; almost all knowledge is useful in one way or another. Brace yourself for failure and try to put your interests over finance. You will never succeed without passion for your field, and no, passion for the salary doesn’t count.
So Long, and thanks for all the Fish
Simply said, dream, start already, do not be afraid of making choices. Avoid “Clean Code” and follow your passion(s). Do not fall for the marketing propaganda of AI and LLMs, think for yourself and personalize your experience. Avoid roadmaps and anyone forcing paths on you.