Skip to content

Seeing the Bigger Picture: Why I Reject the Notion of a Favorite Programming Language


“You should not have a favorite weapon. To become over-familiar with one weapon is as much a fault as not knowing it sufficiently well.”

- Miyamoto Musashi

Table of Contents

Open Table of Contents


Recently, I completed the Programming Languages Part A, Part B, and Part C MOOCs, which provided me with a valuable perspective on programming languages. This blog post serves as a course review and an exploration of my stance on the idea of having a favorite programming language.

Key Ideas Explored in the Courses

Throughout the course, I delved into fundamental programming language concepts with a strong emphasis on functional programming in parts A and B. Part C focuses on Object-Oriented Programming and how they both are similar and different.

Part A

Part B

Part C

Insights and Paradigm Shift

Completing the course led to a significant paradigm shift in my perception of programming languages. I realized that each language possesses its unique strengths and weaknesses, making them more suitable for specific problem domains. Having a favorite programming language often blinds us to the possibility of finding more elegant and efficient solutions in other languages. This notion was exemplified by the course itself, which utilized three different languages to teach appropriate concepts for each.

The ultimate goal of programming is to develop software solutions efficiently and effectively. To achieve this, it is crucial to select the right tools that align with the objective at hand. The course enabled me to transcend language-specific syntax and focus on program design, gaining a broader understanding of various concepts employed by different languages. This newfound perspective allows me to approach programming challenges agnostically, reasoning about design independently of specific languages. Additionally, I have discovered that with a strong foundation in programming concepts, learning new languages and frameworks becomes a manageable task.

Ask yourself these questions when learning a programming language:

  1. Syntax: How do I write it?

  2. Semantics: What is the meaning behind the syntax?

  3. Idioms: What are typical patterns and best practices in the language?

  4. Libraries: How to do specific things such as file access? In any language, there are things that one cannot do without library support.

  5. Tools: What are the tools that make it easy/efficient to program in that language? Such as REPLs, debuggers, and code formatters etc. However, note that these tools are not inherently part of the language itself.


Embracing a language-agnostic approach to programming opens up a world of possibilities. By considering broader aspects of program design and leveraging concepts from various languages, developers can create efficient and elegant solutions. It is essential to remember that programming languages are tools at our disposal, and the choice of language should align with the problem.

hacker matrix gif