Elixir vs Go: what to learn in 2024

khoi@slrpnk.net to Programming@programming.dev – 19 points –

Which one is better in the context of job opportunities?

14

Unquestionably Golang if those are the two options. It'll give you a much better base to work with if you are still earlier in your career and is much more applicable to a lot of things.

Elixir is niche, the syntax doesn't share a lot of patterns with other languages, and no one is hiring for it. Also few people know it.

I want to caveat my answer with that I personally really like elixir, and would prefer to work with it myself over golang for some types of problems. Actor patterns are really cool.

Having tasted the syntax from both, I’d say Elixir is awesome. But it’s true that Elixir is niche.

Jobs? Probably Go.

But really what's most important is learning portable skills, which amounts to learning about different approaches. In that case, I'd say learn both.

There are a lot of interesting ideas in both languages.

(I learned a lot of great ideas from Go, especially about concurrency. I think it's great for writing the kind of frameworks where that matters. But in terms of "normal" business logic programming, I think it's trash. It not ergonomic at all.)

What lang would be ergonomic you’d say?

Python is ergonomic. It's very expressive without the language feeling too magical.

If you are comfortable "programming with types" then Rust is a very ergonomic language. But it does take a while to get your brain thinking in Rust.

It's also useful to have counter examples.

C is not ergonomic. You basically have to reimplement collections for different applications.

What's your background? I've mainly used language with huge standard libraries and Go's intentionally small standard library feels very unergonomic sometimes (I miss sets).

Elixir feels very ergonomic to me, but a lot of programmers struggle with the lack of typing.

I came from JavaScript NodeJS and Python.

I’ve learnt Elixir and it seems like it’s packed with lots of features/patterns.

I use Scala. Huge fan. Both for work and personal projects. Not wildly popular, so i get asked this by my team. This is what i tell them:

Focus on the patterns, design and theory. Those last longer than the language. What is enabled by language? What is difficult? What does the type system let you prove? How do you utilize the type system? How does the execution of the language work? What is the runtime like?

Language development itself has evolved. There is no longer a huge jump from one language to another because, well, we've figured out a lot of it. Want to learn rust? The patterns and concepts you learn with Scala will still apply. Go? Same, just a different form and you'll probably be asking about monads in short order. :)

If i look at future trends. Real far stuff. Stuff that will only become popukar years from now. Well, some of it exists now in esoteric languages. Those languages wont be useful for jobs, but studying them now preps you for the future.

Elixir is further future than Go. Go, like Java was, is not particularly novel but a very solid implementation of what we currently know.

Also mostly coding in Scala here (plus some python) and agreed with all that was said above.

Learning Scala will probably make you a better developer (much more so than learning e.g. go/swift/rust...), you will first wrap your head around functional concepts that might not feel super compelling initially (why would I want to write a recursive function instead of a while loop+mutator?), but those, and the constant exposure to type level concepts and monadic/higher-kinded constructs will slowly make you write safer and self-documenting programs.

Also, most of the intimidating language abstractions are not required to be mastered to be efficient with Scala, many of the bells and whistles serve library authors much much more than end users, so it's important to find resources that go just "deep enough", I think Martin Oderski's and Li Haoyi's books are perfect in that sense.

Finally there was this video published recently which might give an idea of where future programming languages are heading (and why it might be a good idea to keep an eye on Scala for the years to come): https://m.youtube.com/watch?v=7mTNZeiIK7E

My go-to language for everything is elixir and has been since 2018

  1. I use go pretty regularly, because I like it, but it's not what I get paid to use.

  2. I'm only about 70% sure that Elixir is a programming language and not a typo or something you made up. (I'm kidding... But only just barely kidding...)

  3. If you're concerned with employability, neither language would be in my top 3. (Python, JavaScript, SQL)

Source: I pick up new languages for the lols, and have coded professionally, for money, in about a dozen languages.

More relevant: I hire developers. Some of my team want to write new code in go, but I've instructed them not to, for now. They've never asked about Elixir.