Programmers Overview

Programmers Overview

Does the prospect of having to learn multiple programming languages haunt you? Are you confused which language(s) you should learn? Should you just learn one language? What about frameworks? This article tries to address the philosophical and practical aspects of these questions.

One of the first larger projects I worked on had Visual C++,  SQL, Python, PHP and JavaScript in it.  I was not working on all of those components at once but it’s not uncommon to have to code in multiple language’s even on the same project.

As systems have become more complex a programmer’s job is not about converting an algorithm into code as it once was, but has become building functional systems within component architectures and application frameworks.

Programming in these environments required the ability to integrate and understand system architectures and is more accurately described as a developer, rather than a programmer.  Each new project may require a completely different technology stack and the only transfer of skills is your understanding of  design and architectural patterns. The wisdom of experience revolves around design decisions which often are the most critical, especially in early stages of projects.  Design mistakes are the most dangerous because of the high cost of effort and technical debt that accumulates over the life of a prject. This is the journey from simply cutting code to becoming a developer.

Back to the question, should you learn more than one programming language?

There are two competing schools of thought. Is it better to put all your eggs into one basket and specialize (vertical integration) or to learn many languages (horizontal integration) and be more versatile. Vertical integration suggests you should become a specialist in one (or a few related) technology stacks, languages and environments.  In theory you become very efficient in that ecosystem but it also requires that the technology stack is technically suitable for any project, and there is a market to undertake any kind of development in that enviroment.  This is often not the case and even if it were, decisions are not always made on the basis of technology capability alone.

On the other hand, horizontal integration suggests you should learn as many technologies as possible and as markets evolve and systems become more complex you will be well positioned to move forward with any technology.

Potentially exposure to more technologies and languages will enable you to make better choices for the problem at hand rather than automatically fall back to what you know and love. Think here about how many Cobal (what’s that you say) and Fortran programs were written a decade or more  after the world had moved on.

Although learning many languages is appealing from a world view it comes with it’s own problems.  Is it possible to keep learning new languages and technologies but keep your existing skills sharp? Programming languages, especially syntax if not practiced regularly, is easily forgotten or at least doesn’t become something you can do quickly.  Learning library and function calls, syntax, object properties and methods and component architecures will have a steep learning curve so this is an endeavour you should not tackle lightly.

However, even those choosing specialization should anticipate being able to perform more than one role. This will increase your employability and  provide a career path for when the inevitable happens and technology moves on. Even in specialization you should also develop supplementary skills.  In my case, being a front-end developer led me to other areas such as research and innovation, product design,  human factors,  graphics design, marketing and eventually into business development and running my own enterprise.

From a philosophical perspective, horizontal and vertical learning are not neccessarily binary choices. Everyone has unique learning abilities and styles. I have learned  many languages and often wished I was better at all of them.  I always wanted to develop high performance applications like 3D games but the thought of yet another ecosystem and learning curve was more than I wanted to invest in.  Timing is everything in this business, I actually made more money for a while just coding user interfaces with HTML, CSS and JavaScript. If I wasn’t alert to the landscape and willing to learn I would have missed this opportunity.

The question of achieving a balance is still unanswered but I leave that for you to discover what works best for you in your own good time.