
Ask HN: Scala or Elixir, What would you recommend me? - sanosuke
Hi!
Which programming language do you recommend me to learn next, Scala or Elixir? I want to be able write concurrent systems. But I also want to be hireable.
Thanks.
======
jnbiche
While Scala's Akka is pretty sweet for concurrent systems, Erlang/Elixir puts
them all to shame. I think that Elixir and Phoenix will very rapidly assume
position #1 for web frameworks, surpassing Node.js and Golang among the
cutting edge but practical crowd in the next 1-2 years, and surpassing Ruby
and Python among the more conservative crowd in the next 3-4 years. Java may
be so entrenched in Entreprise systems that it will never be replaced, but if
any ecosystem could do it, it's Erlang/Elixir.

That said, if you want to work with one of these two languages in a job _now_
, Scala is obviously a better bet. But I could see that changing in as soon as
1 year from now.

Also, if you plan to mix a lot of computationally expensive stuff with
concurrency, then Scala may be worth seriously entertaining regardless of the
job situation or popularity, although for that, C/++ and ZeroMQ may be the
best bet. Based on my limited experience, and what I've read from expert
Erlang users, hybrid C/Erlang projects tend to eliminate a lot of the
concurrency benefits that pure Erlang systems have.

But I've been playing around more and more with Phoenix and other Elixir and
Erlang projects over the past month, and am pretty amazed at what I've seen.
As much as I enjoy FP, I'm sad that I discounted Erlang for so long because of
its lack of static typing (which is unfortunate, but far from being a deal
breaker for me now that I've explored Erlang a little more).

------
weatherlight
If you want a job right this moment, Scala.

If you want to learn about FP, and build things where concurrency wasn't an
after thought, be happy while doing it, and be a head of the curve when Elixir
conquers the world.... Elixir.

------
jfaucett
This type of question gets asked a lot on the net and as someone with
experience I can say it rarely matters what language you know its what you
have built, can build and your architectural skills that matter. The language
is just a tool for the task and will vary depending on the task. So ask
yourself what you want to build then choose the language, the other way around
makes no sense. Its like saying I want to be a carpenter should I learn how to
use a hammer or a chainsaw? Only when you know youll be chopping down a tree
for wood first can you make a reasonable choice to use a chainsaw.

Recruiters might not get this and just ask for knowledge of X or Y but at some
point in your interview process theres most likely going to be a lead engineer
sitting across from as an influencer on whether to hire you or not, and if hes
worth anything hes only going to care about your "building" skills not
language X or Y.

~~~
jnbiche
> This type of question gets asked a lot on the net and as someone with
> experience I can say it rarely matters what language you know its what you
> have built, can build and your architectural skills that matter

He's asking what his _next_ language should be. I don't get the vibe here of a
new programmer thinking he's staking his entire future on what programming
language he decides to learn.

It's entirely possible to understand that the programming languages you know
aren't as important as what you've built along with your knowledge of software
engineering and computer science fundamentals, and yet still want input on the
next PL you'll learn in your free time.

~~~
jfaucett
"It's entirely possible to understand that the programming languages you know
aren't as important as what you've built along with your knowledge of software
engineering and computer science fundamentals, and yet still want input on the
next PL you'll learn in your free time."

I get what you mean, but it still makes very little sense to me. If he had
said I want to make a client/server chat system, then we could make a real
suggestions between elixir and scala. He also wants to be able to write
concurrent systems, the best way to do this is of course write concurrent
systems, not learning concurrent lang structs in scala or elixir. Only when
you write a distributed system are you going to encounter all the networking
and data integrity problems that arise at those lower levels and these are the
things that are important to know and will give him reasons to choose elixir
or scala or erlang or golang or whatever works best for him while building
that.

------
eranation
If you want to be hireable then forget about both learn Ruby or Java, you'll
get tons of hiring options (depends on where you are and what types of
companies you like)

Scala will get you more job openings now than Elixir, but less than Java jobs
or even Rails/Node/Django jobs.

If you are into big data, then right now the most "hyped" toolset is Apache
Spark and it is written in Scala and it does not have an Elixir API (not
anytime soon)

One last thing, what do you prefer: dynamic typing or static typing? If you
prefer dynamic Elixir is going to feel much better than Scala. If static
typing is a must for you, Scala is your choice...

Also in Scala you get all of Java's ecosystem in terms of reusable libraries.

Elixir looks great and the Erlang VM is exciting and I know that my next
language to play with is going to be Elixir. But this is because I already
know Scala pretty well. (My main day job language)

------
lectrick
Elixir all the way. The earlier you get in on this wave, the better for you...
although it may take a year before the offers start rolling in. Just find
whatever work you can now in it or at least pick up the basics. It's fun!!

------
brudgers
Why not both?

------
justthistime_
Language rarely matters, but Scala is were the action is today and probably in
the future.

Both languages could be considered "add-ons" on top of their runtime, so you
have to think about how likely it is that the "base" language gets good enough
to slow down adoption significantly.

In Scala's case it's quite unlikely that Java will ever be able to even
decrease the gap let alone closing it.

Elixir feels a lot like CoffeeScript in that regard.

~~~
jnbiche
> Elixir feels a lot like CoffeeScript

Elixir's syntax bears some resemblance to CoffeeScript (both were influenced
by Ruby's syntax) but otherwise it's hard to imagine a language more _unlike_
CoffeeScript/JavaScript.

~~~
justthistime_
I meant in terms of being obsoleted by their "base" language (JavaScript).

~~~
jnbiche
Yes, the added "in that regard" makes that clear.

