As most of the others software developers I know, I learned programming in an object oriented language (Java in my case). I learned a few other similar languages along the way (C++, C#, Python) and it was always pretty straight forward as they share similar paradigms.

I think it is important to know more than your language of choice for the following reasons: -You learn new ways to solve problems with other languages -Your favorite language may not be appropriate to solve certain kind of problems (e.g. Frontend development) -You may suddenly need to know another language in one of your projects -Your favorite language may suddenly be outdated and you won’t want to exclusively maintain legacy projects the rest of your career (even though it may pay out financially one day if you are one of the only people remaining who are ready to use that old language) -It is fun (at least for me) to learn something new -You may develop libraries/framework that replicate things from other languages to your favorite language -You may even find a new language in which you are more productive

So which languages should you know about and what are good ways to learn them (or at least get to know them a bit better than by reading the Wikipedia article)?

I personally would advice you to start with the website Exercism. There you can find exercises and learning path for a lot of programming languages. They provide a set of unit tests that your code needs to pass. Once your code is ready, you can submit it and a mentor will have a look at it. He or she will give you some feedback on your code (e.g. not idiomatic, you missed out to use a function from the standard library that would simplify your code a lot…). This is really helpful, as this way you avoid just using the new language exactly the same way than the new one, but also to use some feature specific to the language you are learning. Unfortuatly sometimes it takes some time for the mentors to review your changes. Sometimes you get feedback after a few minutes, sometimes it takes more than a week. There is also the possibility to use Exercism in Independent Mode: there you don’t get feedback from a mentor (and don’t have to wait for feedback to proceed with the learning path), but once you have submitted your exercise (even if it is incomplete), you can view the solutions from others and learn from them.

One other site where you can practice new languages is cyber dojo: on this website you can code directly in the browser and don’t need to setup a development system yourself. The code is executed on a Docker container on the server. You can also setup a server on your own, so that you can work together with fellow developers on a local network. In Cyber Dojo, you have to write your unit tests yourself. You can share the link of your session, so that others can see it.

I haven’t answered yet, which languages you should learn in my opinion. That of course depends on your background, but I think you should learn the following paradigms and at least one representant of this paradigm.

Object-oriented languages: Java, Scala, Kotlin, Groovy, C++, C#, Python, Ruby, Go

Statically typed languages: Java, C, C++, C#, Scala, Kotlin, TypeScript, Go, Rust

Dynamically typed languages: Python, Ruby, Clojure, Groovy, JavaScript, Erlang, Elixir

Functional languages: Clojure, Scala, Erlang, Elixir, Haskell

Logical languages: Prolog

Languages for following use case are surely also interesting, but I would only learn them, if you are interested in this use case

Web-Frontend languages: JavaScript, TypeScript, ClojureScript, CoffeeScript

Scripting languages: Bash, PowerShell, Python, Groovy

Languages for performance critical code: C, C++, Rust, Go

Statistical languages: R, Julia, Python

If you want my personal opinion which languages I would choose (that covers a broad range of pardigms and use cases), I would advice the following: Java (most broadly used), Python (easy to learn, dynamic typing, used in Data Science), C or C++ (memory management), Clojure (functional, different syntax, will get you out of your comfort zone), Prolog (completely different type of programming), JavaScript (standard in web development), Kotlin (Java in simpler, now also available as native Kotlin outside of JVM).

The two next languages that I will personally have a look at are Go and Rust. I think that Go may become a very important language in the next few years and Rust may be an interesting alternative to C for performance critical code.

If you learn all these languages (at least by doing the Exercism learning path), you’ll have a very broad spectrum of languages that you can handle and shouldn’t have lot of problems to learn any other language.

Drop me a mail, if you don’t agree with my choices at all and let me know the languages you would advice and why.