Life around programming languages
Should you learn more than one programming language?
There are two schools of thought when this question surfaces. One that believes in vertical growth (specialization) while other being horizontal growth (generalization). Vertical growth says one should become specialist in one core technology stack (LAMP, Java, .NET, etc. assuming languages don’t run themselves; they need complete ecosystem) which will help one solves problems in that domain in very minimal time. The argument further says that learning too many things leads to confusion and indecisiveness often causing unnecessary delays. It believes that today’s technology stacks are generic enough to do any kind of development. Even if you decide to learn many technologies, how much will be enough? The count is simply out of any individual’s capacity if at all not infinite. Thus vertical growth discards the notion of learning many languages.
This is easier to say theoretically but reality is never so ideal. Systems don’t work in isolation. And that is probably the biggest drawback of specialization. Anything that is out of scope of the technology, one is completely blind often taking decisions based on presumptions rather than human rational which ultimately leads to chaos.
Horizontal learning certainly makes sense from a world view. But, again there are problems with this too. Does learning many things mean that one will be busy for entire life? Where should one stop? Will real life offer such privileged moments dedicated to learning? When learning some new thing, can a person retain knowledge about existing stack? Definitely not! Programming languages, especially syntax if not practiced regularly, are easily forgotten. Plus, there is slight ego problem too. Everyone, at some point, prefers to be called expert of some blah… blah… thing. Also, society tends to respect specialists little more. Because, horizontally learned person will have to rely on experts to get job done and they are always ordinary in a particular context.
In the past, I had many mentors and seniors to guide me. Their opinion was again divided. However, even those who advised specialization i.e. vertical path have said that in typical enterprise setup, one should be able to perform more than one role when one becomes more experienced with time increasing once marketability and employability. While specialization is necessary one should also learn supplementary things. In my case, being a front-end developer, many advised me to look into other areas of product design like user experience, visual design, interaction design, etc. and not keep on learning numerous front-end frameworks.
From philosophical perspective, horizontal and vertical learning are the two prejudices every programmer pass through at certain phase. What about practical side? In one line, it is indeed necessary to learn many things as varied as they can be, while it is also necessary to be master in a particular technology around which one builds the fortress. So, is there any specific way to proceed with it? Unfortunately or fortunately, life is not so easy. There is no simple Boolean true or false for our questions (Else, humans will be machines operating on perfect logic. The fact that human decision making is not simple Boolean is the very essence of being human). On the left one has vertical stairs and on the right, straight horizontal road. The right cord is the balance between the two.
Balance between vertical and horizontal
To summarize, initially I had horizontal learning phase followed by vertical phase and then back again to horizontal learning. The underlying message is “you are the best judge of yourself”.
After reading this article you may feel that the question of achieving right balance is still unanswered. Well, I leave that answer to each individual to discover what works best for him. But, in the end if you feel the need to learn more, there are many more questions on horizon. Which new language should a person learn? How to approach new programming language? Up to what extend should a person learn new language? Should one also learn framework while learning a new language? When can one call himself proficient in certain programming language? And the list goes on…
In the series of articles to follow, we will try to answer these questions one by one. Till then, please wait for other articles.