Over the course of my career, I’ve frequently been approached with questions from juniors eager to delve into the world of programming. They often ask:
Where do I start if I want to learn programming?
Which programming language is the best?
These questions are fundamental yet challenging, as the answers can vary widely depending on who you ask in the tech community. We are a passionate bunch, shaped by our unique journeys and the hurdles we’ve overcome. This leads to a variety of perspectives (or tribal wars), but I aim to provide guidance that navigates beyond personal bias.
The right tool for the right job
Imagine programming languages as tools in a toolbox. Just as a carpenter selects a hammer or saw based on the task at hand, programmers choose languages that best fit the problem they’re solving. This concept is crucial for beginners to understand.
While my background in economics introduced me to diverse models that attempt to analyse phenomena in multiple angles, programming languages are less varied in their foundational goals—they all solve problems through computation.
As programming languages were designed by engineers (duh!), I believe we should look at it based on how they were designed and intended to be used. For example, Javascript is a scripting or programming language that allows you to implement complex features on web pages, whereas Go attempts to combine the development speed of working in a dynamic language like Python with the performance and safety of a compiled language like C or C++. These descriptions highlight the unique purposes and advantages of different languages, underscoring the importance of matching the language to the task at hand.
Prefer interpreted over compiled languages, opinionated frameworks over non-opinionated ones
My journey through various programming languages and frameworks has been enlightening. I started with Java Springboot, which, despite its steep learning curve, offered a structured, opinionated approach that I appreciated. However, finding resources and navigating its complexities was initially challenging.
Transitioning to NodeJS and Express, I encountered the opposite problem: an overwhelming array of choices, from database libraries to other tools, which often led to decision fatigue and later regrets.
Then came Laravel, a breath of fresh air. Its opinionated nature and interpretability of PHP made learning exciting. Being able to dive into the vendor folder to understand the core functionalities opened up a world of knowledge, showcasing the power of interpreted languages and opinionated frameworks for beginners.
Other considerations
I haven’t touched on specific language features and how they should be taken into consideration while choosing a starting language as I think it is harder to appreciate them until you’ve experienced enough. For example, functional languages such as Scala would train a developer to learn how to think functionally and also experience the benefits of immutability of data and having stateless functions. However, this may not be felt as much if you haven’t really tried out the imperative way of programming. Similarly, the benefits of writing reactive code in React can probably only be felt if you’ve lived through the hell of managing an ungodly amount of listeners and handlers on jQuery.
Wrapping up
Remember, the journey of learning is as important as the destination. Focus on growth rather than efficiency at the beginning. If time allows, learn to do things the hard way in your attempts to understand technical concepts (e.g. implement a dynamically sized list in C). This will not only show you how far these languages have evolved, but also allow you to understand the abstractions that you might be taking for granted.
Happy coding!
P.S.: Start with Python if you’re not sure of what to learn and branch out from there.