Expanding Your Horizons as a Polyglot Programmer

Learning multiple programming languages and putting non-trivial projects into production using those new languages has been one of the most powerful tools for me personally to expand my abilities as a software developer. It will help you to do the same.

Why?

Exposure to new ideas, paradigms, and ways of approaching problems. This is especially true if you're using a language from a different paradigm than you're used to.

I was more easily able to apply concepts from Practical Object Oriented Design in Ruby by Sandi Metz in JavaScript and then taking those habits back with me to Ruby, even though I had read it and learned to apply some of the concepts in Ruby first. This isn't because Node.js is drastically different from Ruby, but because I didn't have existing coding habits to fight. I was much more able to see how I could apply these concepts against this cleaner slate.

When I learned Elixir, by shipping a product and open source package, it changed not only the way I write Ruby and JavaScript but it fundamentally changed the way that I think about code, maintainability, fault tolerance, and developer happiness. This is directly because it forced me to think in a different paradigm.

Being a polyglot also gives you more freedom and flexibility in job hunting. If you're only a Ruby or Java dev, you may miss out on exciting opportunities with Node.js, Python, or Haskell.

What language should I learn next?

Pick something completely alien to you.

If you already know Ruby or Python, think about Typescript, Elixir, Rust or Haskell. You'll pick up more than if you went with something more similar like JavaScript, because there are fundamental differences in the way the language forces you to think about code.

Think about some of the key paradigms. If you primarily write statically typed languages, consider a dynamic language. If you write object oriented code, try your hand at functional or inductive logic programming.

Immerse yourself and adopt the culture

It doesn't do any good if you come to Ruby from Java and write your Ruby so it looks like Java. In the same way it won't do you any good to try to force your current habits into TypeScript or Haskell. Really soak in the language and community as a beginner. It will force you to see where your current language of choice is weak, and how it could be better, while also allowing you to see the weaknesses in the new language.

This will be frustrating, because you will be a beginner again. But this frustration is important. Don't give up, and don't go back to your current paradigm until you internalize the new. Force yourself to solve the problem in the new language's way and it will make you a better engineer.