Have you ever come across anyone who claims to be a polyglot programmer? And have you wondered what exactly does it mean? I am not too much of a fan of some of the terms that have crept into the world of software development. “Code Ninja” ? Anyone?
But I make an exception for the Polyglot programmer. I would personally consider someone as a polyglot programmer if he/she has expertise in at least 3 distinct languages. Distinct is an important word here. Someone who knows Java, C++ and C# may be considered a polyglot programmer. However, all of these are essentially very similar in their form i.e. all of them are object oriented languages with similar structure and do not provide diverse learning experiences. Knowing Java, Groovy and Scala on the other hand provides a rich learning experience in terms of the unique structure of each of these three languages. Even though all three languages run on the JVM, each one of them has something distinct in terms of the paradigms it supports and hence opens up one’s mind to more possibilities in terms of how a particular solution could be modeled as a programmer.
Being a polyglot programmer or even making an effort towards being one, in my opinion, has too many advantages to not take note of them. Let me proceed to address a few of them.
It allows you to avoid the “Hammer and Nail” syndrome.
The “Hammer and Nail” syndrome is nothing but a rehash of the old saying that “If all you have is a hammer, everything looks like a nail.” If all you know is Java everything looks like an object. Everything ends being nouns and then you end up with a plethora of “Managers” and “Helpers.” Confused? If not, then there is a good chance that you have worked some kind of functional language and hence can think in terms of functions or verbs and can avoid the aforementioned pitfall and therefore design using the proper constructs and then make a choice of a language which allows you to use those constructs.
Solution first, language and technology later
This aspect actually explains how you avoid the ‘Hammer and Nail” syndrome by virtue of knowing multiple programming languages. It is generally agreed that when it comes to natural languages, knowing more of them allows you to perceive and express your experiences in a much richer manner. In fact, based on the particular experience, one may actually choose one language over the other to express it more effectively. But, only if one knows multiple languages.
The same can be said of programming languages. Knowing more distinct programming languages introduce you to varied paradigms. Object oriented vs. procedural, functional vs. imperative, statically typed vs. dynamically typed, strongly typed vs. weakly typed. Once you get to know all of these concept by actually using or learning a programming language that uses one or other of these paradigms, you get in a position where you are no longer biased for or against a particular way of solving a problem just because you know ONLY that way of solving it. Let us be honest here. How many people choose an imperative programming language like Java or C# because they know it, are comfortable using it rather than because it offers any significant advantages over say a functional style of programming for a particular problem.
Effective workout for your brains
Anyone who has done regular workouts at the gym would agree that if one does the same set of exercises, over a period of time the muscles tend to develop a memory and the tissues no longer tear as much as they did earlier. As a result, the muscles no longer grow at the same rate. To ensure that the muscles keep growing, one has to introduce variations into your routine.
Similarly, when you try to learn a new programming language, it is a way of introducing a new variation in the workout for your brains. Though brains do not quite grow like muscles, working them out by taxing them – which you do when you take it through the learning curve of a novel concept like a new programming language – makes it more agile and adaptable. What it means is that it will help you work more effectively with your routine work as well as adapt to the evolution of your own mainstream technology more easily. A Java developer who knows a functional language already will be able to pick up the lambda expressions introduced in Java 8 much faster.
Learning aids learning
I believe that trying to learn something new starts off a virtuous cycle in the sense that it makes your brains more adaptable, as mentioned above, and hence enhances your ability to learn something else new much easier and quicker. Again, going back to natural languages, it is believed that a person who already knows 3-4 languages apart from his/her mother tongue can pick up a new language much faster than someone who only knows his mother tongue.
Apart from the above mentioned advantages of being a polyglot programmer, there is also the obvious advantage of keeping relevant in a marketplace that evolves at a pace that is arguably much faster than any other professional field. The fact that you have worked or even taken the effort to learn new languages – more so the latter – shows that you love what you do and are in this profession for a passion that goes beyond just paying your bills. If you were hiring a programmer, will you consider that as something positive? If the answer is yes and you yourself do not fall in that bucket – yet – then it may be time you consider being just that – a Polyglot Programmer.