July 21st, 2016
(written by lawrence krubner, however indented passages are often quotes). You can contact lawrence at: firstname.lastname@example.org
The conflict between Object Oriented Programming and Functional programming comes up a lot with Clojure, because to do any serious work you have to eventually use some Java, which takes you back into the world of Object Oriented Programming. This sums up my feelings:
The thing I like most about Elixir is the low friction between it and it’s host language, Erlang. Erlang is a functional language right from the start, and the BEAM is designed to run a functional language, which means you never hit the weird FP-OO barrier that comes up so commonly in Clojure.
I really think the impedence mismatch between Clojure and the underlying Java implementation is a big, painful problem which is going mostly unacknowledged by the inner-core of the Clojure community. And that makes sense, because they’re all (or mostly) “Java Guys” who are already sold on the Java ecosystem and are fine with there being a layer of spindly OO horror in their projects. They don’t mind the Java layer poking through in unpleasant ways.
When I bring this up in a congregation of Clojurists I just get “shrug, welp, Clojure is a hosted language”, not even an acknowledgement that there may be a problem worth discussing.
For the rest of us, the FP enthusiasts who don’t have an emotional or professional attachment to Java, this sucks, because you can’t do much in Clojure without also touching Java. As I said at the start of this ramble, Elixir/Erlang don’t suffer from this problem, it’s FP all the way down. Erlang idioms fit in with Elixir, and vice versa. No friction, no bullshit.