Some constraints:
1. You want to work in a Linux environment
2. Your experience so far is in full stack web stuff (you enjoy back end more)
3. You dislike the tediousness of ExtremeOO languages (Java/C#)
The language that was required by the company I'm joining.
Experienced devs assumptions:
- Basic familiarity and can read the popular languages already (Java, TypeScript / JS, Python, Go, Rust, ...)
- If not the above, correct it. Spend a weekend getting up to speed on Rust syntax. When you're going through open source code and see something you don't understand, look it up.
So what's missing? Idioms, best practices, avoiding foot guns -- actually writing production code. This is on the job training since doubtful you'll get any of it with a hobby project by yourself without helpful code reviews.
Rust because it's a systems/native language and seems to be the go-to language for new projects that would have been started in C++ some years ago.
Kotlin because it's a nice modern language that can be used both on the frontend (Android and lately some iOS and Desktop, sometimes even web) and on the backend. Yes, it's a typical OO language that inherits some of the "ExtremeOO" properties from Java but it fixes some of Java's (former) issues as well. Having the whole Java/Maven library ecosystem available is also a big plus in my book.
Python is easy to develop with, but the packaging situation somehow only ever gets worse. I don't recommend it for large projects that have to support multiple platforms.
Clojure if you want to have a harder time finding a job but have more fun doing it! :)
I’ve been using python for about 20 years. That has longevity. Go has the same feeling around it.
I’ve got nigh on 20 years of c# experience and it has been nothing but pain and misery so yeah, stay away. I’m sure I’ll annoy everyone with this but wait until you’ve got to lug along and fix a project with three deprecated Microsoft frameworks in it after one of their schizophrenic direction changes. I spent more time delivering churn than ROI on .Net.
Personally I'd study clojure to get exposure to new things. Already studied Elm, Elixir and Haskell for FP, ruby, php, c#, java for OOP, go and c for imperative, I think clojure would be an interesting addition.
It's a whole new everything but has yet to prove itself useful for production code.
Its promises, if they pan out, could change how we design data-intensive applications. Its idea about code and data as content-addressable can help simplify some distributed workflows.
Great summary here: https://jaredforsyth.com/posts/whats-cool-about-unison/
Elixir is functional, has a great concurrency story, great for real time networking, great open source community with awesome libs
definitely Rust! I already started a course on a MOOC / course site
If I had to pick one of the three, it would absolutely be Python for ubiquity. I believe the thing that makes someone confident and capable in a language is writing a lot of code, and Python makes it really easy to explore a broad range of problems-domains which means you can follow whatever interests or whims you have which will hopefully encourage you to write more code.
You can write C# in an almost functional style if you prefer, it's a very flexible language.
I'm very good with JavaScript and TypeScript (7+ years of experience, full-time, both back and frontend). I absolutely love them. The freedom to mix functional and oop is amazing. And no awkward verbosity like Java.
I don't like requiring the NodeJS runtime in environments I don't control — it's ok for servers I own, not ok to ask users to install it so they can use a lib/app I made. There are tools to "statically-link" NodeJS projects now, but I haven't tried them yet.
I've been working exclusively on Linux for the past 6 years. Wouldn't look back. Did Mac for a few years, didn't like it. The hardware is superb, but the UX is not optimized for software development. Windows is not an option unless doing C#.
ghost edit: I could change my original response because employers often find my HN posts because of my login, but honestly, I'd rather just be honest
I guess it depends on what you are trying to achieve.
In general, it would be more beneficial to learn supporting topics like building distributed systems, database internals etc than purely just another language.
More and more larger companies are seeing the benefits above and Go is gaining ground.
Rust teaches you how to architect (memory management, async handling), SQL teaches you how to query (set theory, computational efficiency). Once you know those two things, everything else is just "translation".
One language I have been wanting to pickup for a while but haven't had the time is rust. The specific use case for me is high performing (with safety), mostly synchronous execution, and reasonable ease of use inside another web framework. My use case is something like building a rust version of tree-sitter.
One of the few modern languages that have my (dev) comfort as one of their priorities. Even if not intentionally.
If you want to maximize enjoyability, for me the choice is clojure.
Advent of Code starts tonight; pick a language and try it on the AoC problems. The first few are usually extremely easy/straightforward and they ramp up in difficulty throughout the month.
I'm experienced enough, I don't care a ton about the applicability. I don't need to stress financially if its going to be marketable. If its interesting and fun, I would be interested in learning it.
* Typescript for Web and Mobile apps