Ask HN: Experienced devs, what language would you learn today?

Question for experienced devs looking to stay fresh and relevant (and highly employable!)- if you were looking to pick up a new (new to you, not necessarily a new language) programming language today, what would it be?

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#)

  • > Experienced devs, what language would you learn today?

    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.

  • I would go for either Rust or Kotlin.

    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.

  • Go if you just want to build stuff that deploys reliably and has good performance. It's a simple language with good enough standard library that you don't end up requiring one of those "mother of all frameworks" (e.g. Spring). Downside is the boilerplate can be excessive at times.

    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.

  • Also learn SQL. Being able to structure data and write complex queries is a superpower I waited far too long to acquire.

  • You've basically whittled the options down to Python. It's still an extremely popular and reliable language, not to mention relatively readable, and in use at the enterprise level. If you are feeling like you want to be on the bleeding edge you can give Go a try as well, not quite in use as much but still quickly gaining traction and no need to deal with endless packages that you need to install on each system.

  • Python or Go if you want to have the easiest time finding a job. I'd probably pick Go among those two even with its vaguely OO design just because it's so much easier to deploy.

    Clojure if you want to have a harder time finding a job but have more fun doing it! :)

  • Go, Python. That all I do now. Quite frankly everything else is just pain.

    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.

  • High employable: JS High earning: Haskell, Clojure, Scala, Ruby, COBOL, whatever Stackoverflow suggests?

    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.

  • I'll stray from the others and mention Unison Lang.

    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.

    https://www.unison-lang.org/

    Great summary here: https://jaredforsyth.com/posts/whats-cool-about-unison/

  • Elixir is the one for me, but I just can't kick JS/TS since I'm so productive with them.

    Elixir is functional, has a great concurrency story, great for real time networking, great open source community with awesome libs

  • As (mostly) a web app developer writing Angular and Typescript (but having worked with ActionScript, python, a bit of Java and meddled around with c++)

    definitely Rust! I already started a course on a MOOC / course site

  • Rust, Python, Javascript gives you a broad spectrum of experience and you can probably adapt most of that to 90% of the other languages you'll probably run into.

    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.

  • I'd learn C# and avoid the "extreme OO" approach.

    You can write C# in an almost functional style if you prefer, it's a very flexible language.

  • The current trends are Python, Go and Rust. Go is going to fade away when Google dies, but Rust will still be here, and Python will too unless there's another language that takes its share. (Python inherited its position from PHP, and Perl before that) And vendors keep churning out JS tools so that'll be a safe bet for a while.

  • undefined

  • Rust or Go. I've been eyeing them for a while, but never got to writing any code with them. They look amazing.

    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#.

  • I'd wish I knew golang. My fortune100 employer is going all-in on kubernetes control plane solutions and I'm twiddling my thumbs as a shell script guy.

    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

  • Typescript and rust pretty much covers everything. Also a lot of jobs and I think increasing a lot in rust

  • Seeing "Java/C#" makes me think that you might not have taken a look at C# in a while

  • I’ve never made more money before than I do currently with Go, Python and Kotlin.

    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.

  • If I were to pick it would be Elixir or Lua. Lua because it can be used as an embedded language and it is pretty fast for an interpreted language. Elixir because I have written tiny scripts in it and was impressed that even though it wasn't the fastest looking way of doing stuff it didn't impact the speed on the machine I was using (a low spec NUC). I feel like Elixir has the potential to keep growing and Lua is certainly a language that can get stuff done or can be embedded as that last bit that probably can be scripted instead of compiled.

  • I’ve been a solo founder working in Go on a growing startup and my code shipping speed is faster than ever. I’m now increasingly also doing Python for generative AI backends and more reactive front-ends than vanilla JS (Svelte, maybe Vue trying to avoid the overhead of React), so front end work and mobile work are also relevant. Rust seems to lower developer productivity too much for production ready work, so staying away from it unless massive throughout is necessary - go is plenty performant if you watch your memory footprint.

    More and more larger companies are seeing the benefits above and Go is gaining ground.

  • Rust and SQL.

    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".

  • I'd like to ask the same question with #2 reversed: Let's say someone has never done web programming at all, frontend, backend, full stack, half stack, smoke stack, doesn't even know what those things mean. They're old school C++ programmers or embedded devs or something. Now they want to learn how to build a modern web app in 2022. There are so many languages and frameworks. Do a web search on how to write a web app and the whole lot of the different options will show up. Where do they start, and which obsolete ones can be skipped?

  • I am extremely fortunate (like I assume most of the HN crowd) in being good at people picking and learning languages with reasonable ease (serious that was not meant to be a humblebrag but sure) depending on the use case.

    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.

  • Flutter, Typescript

    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 employability, I'd say Javascript.

    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'll be honest and whatever brings me some level of personal joy

    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.

  • Once you know how to program picking up a new language is just a matter of doing a project or two in it. Just go see what jobs are interesting to you and learn the language/framework they want over a weekend or two.

  • undefined

  • Javascript on the backend too, why dable in two languages/ecosystem if one can equally get the job done? (for many use cases)

  • I would still learn bash and python, but I'd probably not do Java/C# again and learn rust instead.

  • * Go for backends

    * Typescript for Web and Mobile apps

  • Golang, Elixir or Rust

  • undefined

  • php8