
Ask HN: Which programming languages to learn in 2020 for an experienced dev? - Antoninus
I&#x27;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.<p>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&#x27;t want to do.<p>I want spend the next handful of years specializing in a language with longevity in the industry the same way I did with JS.<p>My choices are Rust, Go or Python.<p>What do you recommend for an experienced developer to learn in 2020? I&#x27;m open to suggestion.
======
tlack
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](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/](http://elixir-lang.org/)

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

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

~~~
iends
There are basically zero Elixir jobs outside a few companies.

~~~
bnchrch
This is not true according to my inbox. There a certain few behemoths that
keep their Elixir usage closer to their chest as they consider it a
competitive advantage

~~~
iends
Outside of the bay area?

~~~
petersjt014
Yep.

The Financial Times: [https://github.com/Financial-
Times/tapper](https://github.com/Financial-Times/tapper)

Discord: [https://blog.discordapp.com/using-rust-to-scale-elixir-
for-1...](https://blog.discordapp.com/using-rust-to-scale-elixir-
for-11-million-concurrent-users-c6f19fc029d3)

Pintrest, who seems to really like it (note the highlighted comment):
[https://medium.com/pinterest-engineering/introducing-new-
ope...](https://medium.com/pinterest-engineering/introducing-new-open-source-
tools-for-the-elixir-community-2f7bb0bb7d8c)

And looking on [https://elixir-companies.com/en](https://elixir-
companies.com/en) I see two in the UK, two in Brazil, Amsterdam, Ukraine,
Canada...Plenty there.

~~~
iends
FYI: Discord is in SFO. So is pinterest.

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

~~~
realtalk_sp
I think we need to start drawing a distinction between "backend" and "CRUD on
top of a database". I've been full-stack for several years now, and I can
assure you that the complexity of the non-CRUD parts of a live system
generating significant economic value very often dwarfs anything you might
deal with on a typical frontend.

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

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

~~~
Antoninus
I used to develop Perl at the start of my career, now there is no market for
it. In my opinion, that makes stack important.

I appreciate what you're saying about fundamentals, but its not applicable to
me.

------
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 :-) ).

~~~
Antoninus
I worked on a Laravel/React native app a few years ago. The Laravel community
is great especially Taylor Otwell and Jeff Way.

Personally it comes down to staying power and community. I really loved being
a part of Node's and contributing where I could whether it be forums or open
source projects.

------
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/](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](https://angel.co)) to
search for jobs with startups working in spaces that interest you.

~~~
Antoninus
Thanks, I think the scarcity is due to a lot of companies deploying Node in
their stack as a microservice on lambda rather than using it for their entire
backend. Its understandable.

------
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?

~~~
kugelblitz
I think PHP is also implemented in a lot of large scale apps, I've worked in
some large e-commerce companies that use it as the main language. If you want
to go for bigger companies, I think they do use a lot of Java or C#.

JavaScript is pretty much everywhere, Python is popular, but as a web
developer, I don't get as many inquiries as PHP or JavaScript. Could be that
mostly webdev recruiters contact me, but could also be regional (I'm in
Germany).

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

~~~
Antoninus
Thanks, it seems like the natural route after so many TypeScript, React,
GraphQL, Node projects. As I and another HN member said, Node is only deployed
as niche microservice within larger architectures.

The addition of multithreading in 12. _._ didn't seem to change much.

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

~~~
g82918
> Rust ... how computers actually work under the hood.

A curious C++17 programmer, how does Rust teach you much about "how computers
work under the hood?" I thought Rust wrapped most of the ugly bits in 'unsafe'
and tried to keep programmers from them?

~~~
mhh__
OP is coming from JS.

I'm not a rust guy myself (Fascinated by the memory/thread model but totally
disinterested in the rest of the language) but to _understand_ rust (or C++,
D, blah blah) you do need to have some concept of a how a computer actually
works. The really ugly stuff is hidden but in order to actually do work
(thermodynamically rather than REST apis) you need to know what your code
actually does (or acts like?)

"Under the hood" is far too complicated to learn from programming as soon as
you go below the surface.

~~~
Antoninus
I forgot to mention my background is computer science and I wrote Ruby, Perl
and Java for the first 3 years of my career before focusing on JS during the
last 5. Thanks for your input, I'm leaning towards Rust or Go; hoping to get
some input from the community on what is preferred and what is viable in the
market.

~~~
psv1
> I'm leaning towards Rust or Go; hoping to get some input from the community
> on what is preferred and what is viable in the market.

If you care about work opportunities - Go, and it's not even close.

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

~~~
Antoninus
I'm leaning towards Go, it seems like a good move over Python or Rust for me
personally. I might be bias because a lot of the JS jobs I have been
interviewing for have been using Go.

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

~~~
Antoninus
You're probably right, but I don't feel comfortable telling prospective
employers I know a language without at least a few open source merges or at
the very least some solid side projects.

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

~~~
Aduket
superp answer.

------
probinso
Elm

------
slavapestov
C++

~~~
catacombs
Why?

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

~~~
AnimalMuppet
> You should learn something different...

OK.

> ... which Java is.

True, but so are many other languages. Why Java in particular?

One possible answer: You'll learn the most from Java. I doubt this answer.

Another possible answer: There are a _lot_ of Java jobs. This was definitely
true 5/10 years ago. Is it still true?

~~~
bjourne
Java has been leading the TIOBE index for 20 years. So, yes, there are still
lots of Java jobs. Java uses static typing but not manual memory management so
it's a good next step after JS.

