My recent change in jobs has led me to an existential dilemma about my career path1. I stopped asking what the next new hotness is, and instead started asking what kind of programmer do I want to become— and more generically what makes a good programmer?
One aspect of a good software engineer is (obviously) a solid grasp of programming languages, i.e. a programmer should know a wide range of them. Reasons why include the ability to select an appropriate language for a given project, and to understand various approaches that are employed to solve problems.
Naturally, I wanted to know what would be considered a good set of foundational languages and why those languages were chosen. Almost universally the answer is to learn languages from multiple paradigms:
- A statically typed language such as Java or C#
- A dynamically type language like Python or Ruby
- Low-level languages, specifically C and C++
- A shell or CLI language, specifically Bash
- A functional language like Scala or Haskell
These are clearly some of the most popular languages in use, but there are other reasons why these languages are important, such as the number of libraries available, the communities that surround them, or how easy they are to learn.
So if you want to be a great programmer learn some languages. In fact, learn six or seven from different categories. It might not solve your existential crises, but it definitely can’t hurt.
After all, my purpose in life is not to write software in a given language, but to solve problems using the best means available.[return]