If you have ever programmed in your life you have probably come across the phenomenon that I’ll refer as programming paradigms wars. It happens when 2 or more people start arguing about what is the right way of doing programming.

I’ve recently been to PolyConf, a wonderful conference in Paris about polyglot development and I’ve been inspired by a great talk: “programming across paradigms” by Anjana Vakil. She described paradigms as a world view, reusing the definition of this word from Kuhn (which is a cool philosopher).

I do agree with her definition and I really think that how we program is just a reflection of how we believe the world should be described. There is no such thing as the universal way of doing programming because humans are different and we all have our own way of thinking.

I would like to add my own take on this argument, which will be influenced by Feyerabend (another cool philosopher). I’ll start with one of his quotes:

One can show the following: given any rule, however “fundamental” or “necessary” for science, there are always circumstances when it is advisable not only to ignore the rule but to adopt its opposite.

Contrary to what Kuhn believed, the latter philosopher thought that science could only progress and shine when it was free from paradigms and strict rules.

What if our necessity of encapsulating the world and its problems in just one paradigm was itself a problem? Using only functions may over-complicate our code and the same applies to objects. Bending the rules sometimes is necessary, sometimes is incredibly dangerous.

Our love for just one paradigm is a chain that stops us from having a wider view and, practically, from having the right tools. When we start advocating for just one way of doing things, we forget the beauty of diversity.

My intention is not to replace one set of general rules by another such set: my intention is, rather, to convince the reader that all methodologies, even the most obvious ones, have their limits.

Yet another Feyerabend quote.

A lot of languages already support a multi-paradigm approach, but I think that how we are taught and how usually people describe software engineering is still mono-paradigmatic.

Furthermore, I believe that exposure to different paradigms helps us being more elastic and coming up with the right solution. But be careful, programming languages are just tools, they can be very good one, but in the end, the real bottleneck is us. Don’t blame your tool.