HACKER Q&A
📣 Antoninus

Which programming languages to learn in 2020 for an experienced dev?


I've been a JS Dev for the past 5 years specializing in Node and recently adding React with GraphQL as the data layer in the last few years.

It seems there are less fullstack jobs and even less Node jobs available which leaves me the option of writing frontend code full-time which I don't want to do.

I want spend the next handful of years specializing in a language with longevity in the industry the same way I did with JS.

My choices are Rust, Go or Python.

What do you recommend for an experienced developer to learn in 2020? I'm open to suggestion.


  👤 tlack Accepted Answer ✓
Python is definitely on an undeniable upswing, but you might find your mind more tingly taking a look at Elixir [0] with Phoenix-LiveView [1].

Here's a video that introduces the framework (April 2019): https://www.youtube.com/watch?v=8xJzHq8ru0M

It's based on Erlang which has always felt a little rough around the edges, but rock solid and very fast. With Erlang, service boundaries become a thing of the past and tangible state makes debugging a breeze. It's still on the upswing after 20 years in industry.

Elixir greatly improves Erlang's tooling and creature comforts and adds syntax that many find more enjoyable.

As a guy with web dev PTSD, I've been testing Phoenix and Live-View a bit lately and it really hits a sweet spot between Node's speed and evented nature and the simpler end of React's interactivity.

And jobs seem to be appearing too.

Plus Elixir is surprisingly simple to setup[2] so you won't be spending all night fighting Python module dep issues. :)

[0] http://elixir-lang.org/

[1] https://github.com/phoenixframework/phoenix_live_view

[2] https://elixir-lang.org/install.html


👤 jkoudys
I'm finding the very concept, and separation, of frontend + backend thinking has changed fundamentally in the past few years. There used to be a silly perception of frontend work as being somehow less-serious than the "real programming" you do on a backend. I'm sure you've found more and more in your react w/ gql work how little that applies now. Treating a browser like some kind of thin presentation layer there purely server-rendered html is very limiting.

We've also seen a major trend in recognizing the importance of strict(er) types with the excitement around TypeScript. Functional programming is also seeing widespread adoption.

The language that is best suited for including the browser as a target, taking advantage of an excellent type system, and applying functional programming concepts is without a doubt Rust.

It has the steepest learning curve, but once you get the hang of a few concepts, you'll be amazed that you're writing a systems-level compiled language with perf comparable to C, because a lot of code is more readable than JS. People go on a lot about the performance because it's impressive, but that doesn't even break my top 10 reasons to use rust. Everything is so safe and thorough, it's one of few languages where I write non-trivial changes that actually work the first time I run them.


👤 rahulkandoriya
The whole thing of asking "which programming language" is not the good idea. As a programmer the main fundamentals to solve the problems in any language are somewhat same. For example I was developing native android apps using java and due to clear fundamentals I was able to pick up the dart language to use flutter within weeks.

👤 kwiromeo
I'll echo the rest of the people's comment and say Python. It's reasonably easy to pick up, and is really versatile. I personally use it for some backend work, and it's a joy to use. One language that I am intrigued by is C# and dotnet. I live in the Midwest, and there are way more dotnet jobs than there are Python, which surprised me at first, but then I figured most of the shops here would have been on prem installations. The tooling from Microsoft has improved a lot in the past 3 year. I myself will be looking at C# just to see how it feels to use.

👤 __app_dev__
Definitely learn Python. It’s extremely popular with data science but also makes for a great general purpose scripting language. For Web Devleopment with Python the most popular options are Django and Flask. Django is an opinionated framework (like Ruby on rails) and has a large setup while Flask is un-opinionated and very easy to start something from scratch (like Ruby on Rails).

I’ve been programming with JavaScript for 20+ years now and learned Python only a few years ago. Actually I did some a very small project in it over 10 years ago but didn’t remember enough so I had to relearn (and it’s relatively quick to learn compared to other languages I feel). I’ve used it at 3 different jobs now for a variety of scripting tasks that I would have previously used C#/.NET or other languages for and I've developed a number of sites with Flask now (both on Linux and Windows with IIS).

If you are based on the US a lot of companies here that look for hire for C#/.NET and Java. Larger corporate type companies for .NET while Java is commonly used for high traffic sites (game engines, etc).


👤 kugelblitz
I've been using PHP with Symfony and Laravel the last 5 years and the ecosystem development has been promising and PHP has been improving with each version. The freelance market is also great, though you have to pick the interesting projects as well (I usually don't do Wordpress or CMS-type stuff, but rather custom Web Apps or APIs).

I've also worked a lot with Vue.js and currently with Angular.

The two next big things I want to pick up are React with GraphQL and also Python (Flask and Django). I'm also very interested in longevity, and I think the mentioned technologies have good staying power (I've been burnt enough with AngularJS 1, bower, grunt, gulp, etc :-) ).


👤 UncleOxidant
Python is probably a good next language given that it's a very marketable skill right now. And it should be quite easy to pick up if you know JS already.

After that I'd probably learn Rust - it's kind of a longer term bet. Seems to be getting some critical mass so it'll likely be around for a while, but that's by no means a sure thing at this point. Still, there are lots of good concepts in Rust that are worth learning that would be transferable.

You might also look into ReasonML (https://reasonml.github.io/) a strongly-typed, functional alternative to JS.


👤 tmm84
My recommendations are Go or Python depending on your geographic market. In my area Python is there but not really desired where as Go is plastered everywhere. I personally haven't seen much in terms of Rust being a skill employers are looking for. I feel that the amount of stuff written in Go/Python is huge and those jobs won't being going away too soon so it should give you something to offer for some time.

👤 binarynate
I'm surprised that Node.js and full-stack jobs seem scarce. When I was last job searching in 2017, I was able to find numerous local (Indianapolis) and remote jobs for JS-based stacks. My two pieces of advice:

1. Rather than focusing on the language, you may get more satisfaction by pursuing a particular industry or sector in which you're interested (for example, podcasting or robotics) and then learning the stack needed to apply for jobs in those fields. If you're working in a problem space in which you're deeply interested, the language feels more like a means to an end rather than an end in and of itself.

2. To help with this, use AngelList (https://angel.co) to search for jobs with startups working in spaces that interest you.


👤 iends
In the same boat as the OP, kinda, but for me, I feel like the interesting problems at interesting scales are not being done in Node:

- I do 100% Node.js backend work and am a technical lead.

- I did a lot of Java in college, and tiny bits of Java over the past 10 years (servlets on websphere)

- I've gone through phases of doing Go in my free time, and really like it, but jobs seem scarce

- Before JS I spent ~2 year doing Python/Django professionally. I used to do all my whiteboard questions in Python but now use JS. (I've been paid to write Perl, C, & C# in addition to the languages mentioned above.)

I've looked at Elixir, Rust, & Go but none of those languages seem to have critical mass. Do I really need to learn enterprise Java to go up market in terms of money and scale?


👤 muzani
I'd say everyone should pick up languages that are good at different kinds of problems.

I like C for low level stuff.

C#/Java for stable higher level stuff.

Swift/Kotlin for apps.

Cordova for hybrid.

JavaScript for quick prototyping.

JavaScript/jQuery/Bootstrap/Framework7 for web.

MEAN stack for server stuff.

There's plenty of reasons to do otherwise. There's good reason to switch from Cordova to Flutter, for example. Or Java to Kotlin. C to Rust looks like such an example.

But if it's only a 20% improvement, it isn't really worth it. If you are looking for a better web/full stack language, you should know what's best as an experienced dev. What does Go or Python solve better than what you already know?


👤 playing_colours
I think Go would be a good safe choice for you, if you want to be on the backend. It is popular to find job, used for backends / microsrvices and for infrastructure, which is a very good area of expertise to have as well. Go is a compiled static-typed language with goroutines, so it will be a different experience for you after Python.

Python is great, if you want to be a data scientist / data engineer. In my city for example, there are less web development positions in Python.

I like Rust and you would learn a bunch of interesting concepts, but I would not bet on it now regarding available jobs, particularly in Europe.


👤 mhh__
Rust but purely because if you only speak JS you'll learn some rewarding new concepts that JS hides from you - both in language theory and how computers actually work under the hood.

Programming languages are to programming what foreplay is to sex - important but not the main exhibit, my point being that Python and (especially Go) are relatively simple languages coming from your background so you could realistically learn all 3 in a few months if you really wanted to.


👤 davidjnelson
Go is a solid choice since it sounds like you prefer backend work. Great language, crazy fast, tons of jobs.

👤 taf2
All 3... python you can probably learn in a day... Go another day or two and rust - the rest of the year

👤 slipwalker
for "a language with longevity in the industry", my 2cents:

- either a JVM based ( Java, Kotlin or Scala... ) or C# dotnet ( core/net-standard ).

- SQL ! understand joins and query plans.


👤 aprdm
I am asking the same question myself as someone with 8 years of experience in software development.

I've read this thread and went ahead and read a lot of comparison between languages and I have decided to go with Java.

For context I have been working mostly with Python for the last 4 years with a bit of C++ and the casual React/Js, before that a mix of VHDL and C.

In 2019 I gave a chance to Rust, Elixir, Golang and Clojure. I read at least a book on each, did all the exercises available in the books and did a small size project with Golang (around 5k LoC).

Clojure while cool doesn't seem to have a lot of jobs and I felt the ecosystem to be a bit immature (no big companies / projects behind it). Not only that but there's nothing I saw in Clojure that I thought -- wow Wish I could do that in Python! I also didn't come to some grandiose lisp revelation, maybe python has adopted enough of functional programming that it all seems OK-ish?!

Golang while cool gets under my skin to write anything bigger than a simple microservice. I feel the language doesn't have some OOP/functional constructs that I came to rely on. It really feels like the language makes me write "more dumb" code. I like explicit and simple constructs but it is a bit too much. I am cheering for Golang language evolution and hope it gets Generics/Exceptions.

Rust seems like a really cool idea! It has very cool concepts BUT it hasn't gained enough adoption yet for my taste. There aren't a lot of jobs or big projects using it. I am also only casually in the systems level programming space and I much prefer C/C++ when I get there because at least I remember the language constructs / syntax. Using Rust casually has been proven really hard as its syntax and concepts aren't mainstream yet and I always have to re-read the basics. Cargo is awesome. Cheering for Rust as well.

Elixir was super cool, really enjoyed going through the book I bought and doing the exercises. IMO it also lacks jobs and big projects using it. That said, it was the language that I enjoyed the most out of the new ones and had enough new concepts / a cool framework that it wowed me (unlike Clojure) ! Really cheering for Elixir to be more adopted!

Scala I gave up very early on, the amount of constructs / syntax and ways you can code are just too much for my pragmatic brain.

... so why Java?!

Java is very mature and has tons of well paying jobs. In the last 5-6 years it seems to have gained a lot of cool features that makes it much more pleasant to write. The community also seems to have changed its culture a bit on the AbstractFactoryFactoryFactory pattern.

But the best part is the ecosystem, the IDEs are top notch!

Start a project with Java + IntelliJ and it is awesome. It makes all the difference to have a very solid ecosystem and proven tools / projects that rely on it. After using Java with IntelliJ writing Go feels like you're going back a lot of years.

Java is a language with better performance than Python/Javascript and it is static typed so a bit different.

I feel that with Java + Python + Javascript (for frontend) I have all the basis covered for 99.9% of the problems out there that interest me.

All these languages are battle proven and not going anywhere, they also look very similar to each other. I cannot stress how important it is for me that they look similar, if I am working 8h/day in a language I don't want to have to add cognitive overload to remembering how the syntax and language constructs work in Clojure, Rust or Elixir.


👤 probinso
Elm

👤 slavapestov
C++

👤 bjourne
Learn Java! If you only know JS you have barely scratched the surface of Computer science. You should learn something different which Java is. Then continue with C.