What is the best programming language someone should learn in order to be a
good happy programmer?
That’s the question that I made myself plenty of times when I was learning how to program. I started out with C++, and eventually moved to Java, since it was way more common in enterprise setups. Then, most of my friends started toying with Python for web development (Django was becoming popular during that time), and so did I. After that, I started learning C# in order to use Unity and make some games.
At some point, I grew tired of conventional programming languages. None of those that most people used was fun anymore, they felt like they were mostly the same. That’s why during my academic years, I got curious when I heard good (and bad) things about more esoteric programming languages. I thought that it wouldn’t hurt to go head first and try something new, that’s how I became familiar with creatures such as Haskell, Clojure, Scala, and Elixir. They were good, they were different, but at the end of the day, they were still programming languages.
Programming was still programming, it didn’t matter if I used and Object Oriented language, or a Functional language. Sure, they were different in their way of doing things, but the underlying logic was still the same.
That’s when it hit me: there’s no best programming language, only tools. My perceptions of what a programmer should be, was changed. We are supposed to be problem solvers, not dictionaries. In general, we take a problem, we analyze it, and only then we decided what to use to take care of the problem; and believe me, problems are much easier too solve if we analyze it first, that’s the way we should do it, and in fact, there’s dozens of methodologies for making software that follow this approach.
So, how to be a happy programmer?
I have found that what works best for most people, even if it sounds obvious, is to do what they love in their spare time (bonus points if you work doing what you love!).
Do you work for a company that uses Java, but you love to make games in Unity? Then, make games in your spare time.
Do you work as a full-stack web developer but wish to become a low-level systems programmer? Play around with C, C++, or Rust and make some apps; a new job doing what you love could be around the corner.
An extra (but important) tip: don’t neglect the theory behind programming in general. From the top of my head these are the topics I can think of: Graph theory, algorithm analysis, set theory, probability, statistics, and linear algebra. Why? Those concepts are present in all programming languages, and they are gonna be useful for the rest of our career.