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.
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.
“To learn a language is to have one more window from which to look at the world” -Chinese Proverb