Most software engineers I know can program in multiple languages. Based on the domain in which they work, it can be anywhere between 2 and 10. On a regular basis, I use Matlab, Python and C++. Infrequently, I use many others like Java, Rust, C, batch etc. The interesting thing is that switching between languages is not a big deal these days. Why is that?

When I started programming in C two decades ago, I installed turbo C, followed Kernighan & Ritchie’s C Programming Language book and made programs to test my knowledge. Learning was slow. If something didn’t work, I would have to ask someone or access really slow dialup internet to fix my issues. If I had to cross compile the code into a microcontroller, then there was scarce help available. It was natural that people became experts in one programming language or two.

A few years later, the internet started to explode. Stackoverflow came into the scene in 2008. Now, programming in any language became much easier. For example, I was able to make changes in javascript code by looking up answers on stackoverflow. Tools became better too and many like eclipse were free. The internet enabled free flow of resources required to become a multilingual programmer.

In the recent years, I think the number of languages themselves have exponentially grown. Because most people know multiple languages, projects also tend to use multiple languages, each suited for a particular purpose of the product. It has also become easy to integrate the outputs of the tools with each other. Open source is one big reason for the amazing interoperability that we have today.

Where is this headed to? As I mentioned in an earlier post, tools such as github copilot are enabling developers to code in a language which they never knew before. The AI will only keep getting better. And may be in the end, developers will only remain as language agnostic instructors and reviewers/testers to AI based tools that do the programming itself. Maybe a language agnostic mother of all languages emerges. Time to prepare for that day.