Step 1: Offload the initial selection task to the hype machine. This gives me a smaller set of candidates to work with.
Step 2: Go through the language guides/documentation to understand the core ideas and USP of the languages in the above set.
Step 3: Try to guage the long term viability. This is usually based on some data points but mostly intuition and experience.
Step 4: How does it feel to work with. Is it suitable for the kind of problems you want to solve? Does it provide some technological leverage for the business problem you want to solve, if you are looking for such leverage.
Step 5: Start tinkering with the language(s) that made it past step 4, and be open to update your evaluation during some probation period.
If you want to know my reasoning behind those steps, feel free to ask. :)
I usually ask myself if the language can do things that I can't do with a language I already know. For example, I learned a bit of Go because it shines at concurrency in a way that other languages I know didn't. My first language was C++ and I wanted to learn a scripting language so I took up Python. Etc., etc.
Beyond that, I prefer to learn languages that are well documented and have strong communities for support. In my opinion, these not only make it easier to learn the language, but are also good proxies for whether the language will continue to thrive.
I want to learn Rust. Partly because its talked about nonstop here on HN. But I have doubts:
- Will this language continue to grow and be relevant in the near future?
- Will people continue to expand available libraries?
- Is there an existing and active community out there that can help answer questions?
I look at capabilities my current language set doesn't cover well, and/or ecosystems that are exploiting rapidly growing niches. I also have an aversion to vendor-owned rather than community/foundation owned languages.
I've forgotten all the BASIC, FORTH, ColdFusion, etc.that I ever knew, and C/C++/Java never stuck in the first place, so my current language set is Python, Javascript, and SQL (not counting server-side HTML templating languages, CSS preprocessors, etc.).
Ruby's strength is in the webdev ecosystem, but overlaps too much with Python there.
Go looks interesting but is owned by Google. Same with Dart. Swift is owned by Apple, etc.
First, find a problem or something you'd like to learn about. Me one day decides mp3 players are cool and should be hacked, searches around finds rockbox, learned some C. Or me got assigned the task of interfacing off the shelf barcode scanner with orangehrm and OpenERP, mmmm definitely python there. Or when I was interested in cross platform compatibility and delved into java.
Point is that languages are often specialized or different to themselves for different reasons, and you should keep that in mind when choosing.
To be honest, I listen to what the new shiny is from places like Reddit and HN and take a look into it. If it seems interesting and has features or does things well that my go to language (C#) doesn't have then I dive deeper. For instance, I heard about Elixir from HN and Reddit and thought it was interesting. I started looking into it and now I'm learning it and writing a few projects and love it.
Step 1: Offload the initial selection task to the hype machine. This gives me a smaller set of candidates to work with.
Step 2: Go through the language guides/documentation to understand the core ideas and USP of the languages in the above set.
Step 3: Try to guage the long term viability. This is usually based on some data points but mostly intuition and experience.
Step 4: How does it feel to work with. Is it suitable for the kind of problems you want to solve? Does it provide some technological leverage for the business problem you want to solve, if you are looking for such leverage.
Step 5: Start tinkering with the language(s) that made it past step 4, and be open to update your evaluation during some probation period.
If you want to know my reasoning behind those steps, feel free to ask. :)