The Internet is full of promises of learning Java in three weeks, Python in 10 days, and HTML in an afternoon. I think those promises are reasonable, only if you already know a lot about programming. When you already have a solid foundation in place and a few years of experience, adding another programming language on top of that is not terribly hard. The tricky bit is getting to that point.
Programming is a craft, an art, and a set of tools, all at the same time. It requires you to think in ways that you don’t normally do, break down problems into smaller pieces than you’ve ever done before, and think in terms of the very abstract and the very concrete, simultaneously. As with all practical skills, getting to a point where you can actually be constructive takes time, and everyone starts out as a beginner.
Everyone starts at zero
I am not a cook, but I know how to make my own food. I’m not a tailor, but I can fix a cracked seam in a pair of pants. I am not a gardener, but I do know that plants need sunlight and water to grow. There are many areas where most people do have limited but working knowledge, just enough to get by, thanks to a bit of life experience. Unfortunately, programming is a skillset where everyone starts at zero.
People like me, who have been programming since they were young, and had other computer nerds as friends growing up, might feel like it comes “naturally” to them. It’s easy to forget those first frustrating steps. If you’re one of those, please remember that things that are easy for you are actually very hard, so don’t forget to be humble. On the other hand, if you’re learning programming later in life, you’re probably in for a steep learning curve.
It takes time
Switching careers to software development is probably a good decision. Salaries are good, and programmers will be in high demand for years to come. You just need to be aware that it will take more time than you think, especially if you believe the promises made by the tutorials, quick-fix books, and online courses. If you are able to, consider enrolling in a code bootcamp, but do your due diligence first; there are big differences in quality between bootcamps.
Watching tutorials can feel empowering, and they are a great way to get started. You go from zero to results in almost no time at all, following along with someone writing perfect code, reaching the exact goal that was set out from the beginning, without any detours, mistakes or any opportunities for deeper learning. After a few tutorials, you’ll be looking for where to go next, and unfortunately, you’ll probably find very little of value to you at that level. Everything is either too complex, or too easy. That’s when you need to start making your own mistakes and learning from your own experiences. You’ll need to dedicate a lot of time to learning and practicing. You get good at what you do a lot, and that is what the promises conveniently leave out. You need to practice. A lot.
What to do
Now, I’m not out to make you feel overwhelmed, or to bring you down. Millions of people are choosing to learn programming at different times in life, and with dedication, discipline, and realistic expectations, you can too. The best way to practice, in my opinion, is to build something that is just slightly out of reach of your current level of knowledge. For every new project, pick one that forces you to go one step beyond what you have already learned. Start small, aim big, and celebrate every little win along the way.
Try to not compare yourself to others, especially the more vocal developers on social media, or people with a long background in software development. Those who really are able to learn a new programming language in a week or so, can do that because of years of experience. After a few years, people might look to you for motivation and advice, too.
Hang in there. Your new career is on its way. Just probably not in 21 days.