During my life I’ve lived in five different language areas. On two of these I have been able to communicate with the natives very easily because we have been able to speak the same language. On the other three not so much. My resistance to learn a local language properly to communicate, or even try to communicate is one of the biggest regrets in my life. Learning languages always gives you a different perspective on the minds of the local people. Nelson Mandela famously said that “The way to someones heart is to speak to them in their own language.”
I like to extend that thought process to programming languages as well. Learning new languages is one of my hobbies, playing around with side projects in a new language is always exciting and it always gives me so much insight that the price of slower initial velocity is well worth it.
Learning a new language might seem like a daunting task. Especially if you are in earlier stages of your career and still just trying to grasp your initial language of choice. The syntax of new languages might seem strange especially if you are jumping between the big base-language families. C-based languages are all very similar and easy to learn once you have mastered one but a jump to an ML-based or Lisp-based language might scare you a little bit. A little bit of persistence with different families goes a long way. Once you have crawled over the initial hump the syntax doesn’t matter anymore because over time you get used to it. This step of the transition comes easier the more languages you learn or try out.
Every time I touch a new language I have to immerse into the ecosystem and community. This is a very important step in the learning process. Like with human languages the culture of the community differs and that shapes the ecosystem around languages. Cross pollination between languages and their ecosystems is usually somewhat minimal which is a bit of a pity. Cultures around tooling, architectural decisions, community responses and build/release/deployment styles could at times use a lot of influences from each other between languages. Since these differences can be quite drastic it is very beneficial to immerse yourself within multiple languages and paradigms. There are always something that can bring massive amounts of value between language and ecosystem boundaries.
The more languages you know the more starting points you have to start solving your problem. Especially when you get into the habit of jumping between paradigms. Going from OO mindset to a strictly functional will give you so many new ideas and approaches to problem solving even if you are living in a strictly OO world. The same goes the other way around.
Another important thing to remember are patterns around languages. Even seemingly similar languages, like Java and C#, approach problems from different angles. If we bring in something like Scala or Kotlin there are even more nice patterns that work on either side of the fence very nicely. Without trying out other languages and paradigms people are usually missing out on a lot of knowledge and more importantly experience that has been gathered in different language communities.
During these times where tensions due to cultural differences are on the rise, familiarity with ones language makes a big difference. This same matters for programming languages as well. Interoperability between teams, ecosystems and communities depend a lot on the programming language we are talking about. Also programming languages develop a culture behind them. If we think about Javascript, the shift as a language isn’t that big if coming from Java for example. The culture on the other hand is completely different. JS world lives and dies with its tiny packages and modules. Java is still thought about as a monolithic language. Without a similar culture across the development team your velocity and quality is naturally going to dip.
Maybe there are finally enough memes online telling about the friction between frontend and backend development. Backend developers don’t like the dynamic nature of the frontend. Frontend developers don’t like the slow, patterned and over-engineered approach of backend. Maybe it is time to cross-pollinate those aspects properly as well.
This could be something to think about at a company level as well. Maybe it is smart to go polyglot as a company. Difficulties in hiring are often cited as a big reason to stick with one trusted language. There is also a counterpoint to this though. Hiring might be more difficult if language of choice is not plain Java/C#/Javascript/Python/Ruby but it also brings an upside where the candidates are higher quality. If your tech stack consists of languages like Kotlin, Haskell or Rust it means that most people you hire will be passionate about learning a new language they can work with. High quality employees usually dabble around different ecosystems to learn and explore new ideas, low quality developers stick with the status quo and are afraid of change or otherwise stick with the familiar.
“To learn a language is to have one more window from which to look at the world” -Chinese Proverb