In Erlang/Elixir, your programs should be designed such that each process performs a small enough task that if it crashes unexpectedly, you can "recover" by restarting it. This idea is complemented by the shunning of side effects.
If you do it right, you end up writing wildly different programs in erlang/elixir than you would in other languages.
That said, erlang is specialized for a certain kind of problem, and if you're not building large-scale distributed systems, you probably won't as much out of erlang. Clojure is more general purpose.
But to be honest, I think you should just learn both. Clojure is an interesting language, even if I disagree with some design decisions (no reader macros...), with interesting capabilities and so is Erlang and even more so Elixir, but that's really the end of similarities between them. Error handling, metaprogramming, concurrency and pretty much every other aspect of these languages are different, so learning both is not redundant IMHO in the least.
Someone more well-versed in Clojure than I can probably answer this better, but in my opinion:
- Clojure runs on the JVM, so Clojure's concurrency is still sharing memory deep down, whereas Elixir is not.
- I would think Elixir has deeper library options than Clojure due to having interoperability with Erlang. I guess in Clojure you get all the Java libraries too, though.
- While Leiningen is a much better build tool than other JVM build tools, it still reeks of too much configuration. Mix is very, very simple.
- Clojure, for sanity purposes, requires using a very Lisp-specific development environment. Clojure isn't the only language I use so using something like vim-fireplace or Emacs just for Clojure was a bit much for me.
I'm happy to be wrong on any of my points above and again I think both Elixir and Clojure are great.
> requires using a very Lisp-specific development environment
I'm an Emacs user, so it was very natural for me, but I think it can be a problem for others. On the other hand I hear that there are excellent plugins for widely-used IDEs for Clojure.
Actually, as Clojure is a Lisp, the only thing you really need is an editor which handles sexps well. Emacs Paredit is really great for this: http://emacsrocks.com/e14.html but as long as you get similar functionality you can use anything you want.
The choice is between Erlang's VM and the JVM. The usual reasons apply.
For example, this code generates a bunch of functions using some compile-time code execution and a macro: https://github.com/alco/benchfella/blob/2513f85eff3886fdf1b3.... Doing the same in Erlang would involve using some 3rd party tool for code generation or doing the whole thing at runtime, in a more verbose way.
In short, achieving similar development productivity with Erlang would be quite a challenge.
Edit: I assumed this was a test, turns out it's a benchmark. My bad.