A lot of the reasons I love it are really just what I love about Erlang.
The Elixir-specific reasons (aside from macros) are that it’s just a well designed language: Almost everything you need from a standard library is there and implemented right. The developer tools are great andthe non-Erlang abstractions and syntaxes are right.
It’s a language you can tell was done right and with care.
Great and nice commmunity that tries new things and can create new paradigms
Parallelism from the ground up baked into everything and all of that with Actors
Explicit over implicit (after being burned a bit in Ruby/Rails with quite some of the implicitness)
A nice gateway into functional programming and OTP/reliability/distributed systems
High level of trust into Jose and his views and experience about web programming
More focussed specifically on the language:
Pattern matching, single feature I’d love to have in Ruby and other languages and that I accidentally code my ruby code with and then realize I don’t have the feature
Doctesting build in. I just LOVE this for coding and documentation, doesn’t get enough love imo
Cool macro system as imo runtime meta programming isn’t needed so at compile time with a good system is great
I really love the fact, that documentation is considered “first class” and available at runtime.
And since @AstonJ asked for a slogan… “Once you got it, it gets you”[1]
[1] Explanation: After I got at least some concepts in OTP I have problems to think in the more classical stuff. A project where I realized this was written in go. After about a week I took a step back and have seen things that try to act as Supervisors or GenServers, but still very crumpy…
What I love most about Elixir I also love about Erlang/OTP.
On top of that we get an improved core library, easy-to-navigate documentation, and best of all a standard build tool, package manager, and testing library. This, combined with OTP conventions, makes it easy to dive into any Elixir project to learn/use/share/modify.
In addition, I’ve found the Elixir core team to be very friendly, accessible, and responsive to feedback.
I don’t have too much knowledge about Elixir yet, since I just started to read the book “Programming Elixir 1.3” and the course “The complete Elixir and Phoenix Bootcamp”. But what I had a few wow effects when I learned:
Elixir has a built in doc generator which looks pretty cool
Elixir has a built in testing framework
Elixir will also test your doc examples! How AWESOME is that!
So, batteries are included (this is so amazing, especially if you know dozens of JavaScript libraries which become obsolete every couple of months)
What I also like is the functional programming aspect and pattern matching - which are both new to me.
I am so excited about the language that I want to read “Programming Elixir 1.3” and learn in my spare time as bad as I want to watch a great movie. I am looking forward to finish the book and start a few small projects in order to really become familiar with this language.
If someone asks a question, they get a thoughtful response no matter who they are or what the question. This includes what I’ve read on the Google Groups, on the (incredibly clean) GitHub issue tracker, and of course - here on Elixir Forum.
Even though the documentation is so good (see next bullet section),I have yet to come across an RT(_)M response.
This is a huge deal for me.
Documentation
Docs are first class citizens.
Clear and simple guidance on documentation from the get-go.
There are many reasons already stated in this thread, but as for me, coming from the (in)famous JavaScript world, there’s one thing that I really like about Elixir: that my code (thus far) is sequential.
I’ve just realized how awesome being able to write sequential code is. It really helps keeping your mind sane. In JS we try to mimic it using Promises, but it isn’t exactly the same. async/await is still in ES2016/ES7 so it’s kind of bummer that most platforms haven’t supported it yet.
It’s maybe the case that I haven’t used most of Elixir’s features yet, but it’s great to be able to query the DB (using Ecto) in one line and use it directly after that.
Several other reasons:
Phoenix. It’s kind of nice to have decisions canonically made for you, especially when you’re learning.
I love how fast dependency resolving and fetching are in Elixir. In contrast, I tried Haskell, but given up halfway trying to bootstrap an example Yesod project. The fetching and compiling the dependencies took so long.
And of course, echoing many in this thread, the community
One thing I love the most is no god classes, or functions spanning across god knows how many lines. Splitting big chunks of code into small functions just come naturally here. You don’t do nested If’s and null checking. “With” is so freaking awesome
I know that most of this are code smells in every language, but in Elixir when you write code you naturally avoid them, because code more then ever begs to be extracted to a separate function.