A while back I opened an online form so that people could ask me anonymous questions, and posted it on Twitter. Then I forgot about it – until today, when I was cleaning up my online docs, and saw quite a few questions there, waiting to be answered. Oops!
One of them is the topic of this blog post: "What programming language should I learn first?" – and I'll try my best to reply to other questions as I find some time to write it here.
Choosing your first programming language is a very daunting task, especially today in this interconnected world.
When I started out, I didn't have many options: all I had was the manual for my computer, which taught me the fundamentals of the BASIC programming language. My school didn't have computer classes; none of my school mates programmed in anything; I had no adults to ask questions about computers in general, let alone programming. It was just me and that book. It wasn't easy, but I was entranced.
Over time, my father saw that I was getting interested in programming and got me every book he could find in the university library that was about to be discarded for that programming language – BASIC, especially of the old, 8-bit kind, was already obsolete at the time and not taught anymore at the university he lectured at – so I ended up having more references. Those books were for other variants of BASIC, which are similar but not exactly compatible with the one my computer had. I learned early on to focus more on the problem being solved, not on exactly how the program has to be written in order for the computer to understand.
Things are very different today, and I wouldn't recommend anybody to trail the same path I did; however, the takeway from this little anecdote from my childhood stands: you'll very likely have to learn more than one programming language in your programming career, so choosing one programming language over the other as your first language isn't as much of a big decision as you might think.
Still, there are a no number of programming languages out there. I'd recommend, before even looking at a list – whatever list it is – try to figure out what kinds of things you'd like to build. Many – if not all – of the modern, mainstream programming languages, are quite capable and can be used to solve a multitude of problems. Some of them, however, tend to do really well in some specific niches, so determining the kind of things you want to build is the first crucial step.
Even if you narrow down your search to just a handful of options, you're probably going to have a hard time picking one. The websites and documentation of many programming languages&related tools often do mention characteristics and features that will be, at this point, completely alien to you.
And that's why you should look at another thing: the community around a programming language. There are many vibrant, helpful, welcoming communities around programming languages out there. They provide discussion forums, documentation, examples, tutorials, guided tours, videos, conferences, chat rooms, and a whole lot of information I could only dream as a kid back in the early 90s.
Finding one where you feel welcomed is maybe the second most important thing you can do while picking your first programming language. You'll have questions, you'll be stuck, you'll want to share what you're working on; the community will most likely have your back and help you on your journey. (It's important to note that many of these communities are self-organized by volunteers, donating their free time to its betterment. Be kind, respectful, and once you're confident enough, pay it forward: others will come after you and they'll appreciate this.)
Unfortunately, not all programming languages have a community around them, let alone one that welcomes novices. On one hand, this might hinder your search for your first language if there's not much overlap between a healthy community and the language of choice of your particular niche of interest. On the other hand, choosing a language with a healthy community will increase your chances of success so if you're struggling in this step, you might want to reconsider the first step—at least for your first language.
Now that you picked your programming language, wrote a few programs, and participated in a community, I would highly recommend you learning a second programming language. I assure you that it'll be a lot easier this time around, and that it'll only get easier as you learn other programming languages. The hard part will continue to be how to break down a large program into manageable pieces that you can fit in your head, and once you learn two or three programming languages, they don't really matter as much anymore.
To recap, my recommendation here is to:
And, more importantly, "lather, rinse, repeat".
Before I forget: it's absolutely fine to not learn a new programming language for a good while – even if it's your first, second, or 10th – there's no need to rush or learn things just to learn things. Solving problems and making things is what you're looking for, and it just so happens that many systems today are written in a mixture of languages for a variety of reasons.
Last, but certainly not least: if you're not a native English speaker, consider learning it as your second programming language. Yes, I said that English is a programming language: it's not because you can program computers with it, but because, for better or for worse, it is the de facto language used by computer scientists and software engineers to share information and interact with each other online and offline. Even though you might find great resources in your native language – and I completely see the irony that this blog post is not written in my native language, Brazilian Portuguese – you'll not only be missing out on a lot of good materials and interactions, you'll also risk only having to work with terrible translations that mislead and misinform you. There are exceptions, of course, but as you move forward in your path, this is definitely something you want to invest some time in. (By the way, if you end up liking this blog post enough to translate it to your native language, please send me a link, I'll update this post with it here.)
If you liked this blog post, and would like more like this, please let me know! Contact information is in the "About" page.
Copyright © 2021 Leandro A. F. Pereira