The key criticisms of Clojure seem to be in the “death by a thousand papercuts” section starting at 14:00:
not clear how to structure large apps
fun to write, can be difficult to read ("too expressive")
has deep subtleties ("like C++"; "reducers, transducers, atoms, agents, protocols, reader macros...all this cool shit")
useless stacktraces (especially with anonymous functions)
comically terse documentation
there doesn't seem to be a debugger? ("I can't attach something and say 'show me what's happening'")
omg the jvm
…but at the end of that section, he admits “this is all just another way of saying I’m way more fluent in Ruby.” I mean, yeah, building a large app in a language (and language paradigm) you’re not fluent in is going to mean some learning. Learning is not painless.
So basically JVM bloatiness in the usual on-disk size, in-memory size, and dependency-hell seems to be the largest points with a few other miner ones? Interesting. Clojure is one of those languages I’ve only dabbled in, try to stay away from the JVM as much as I really can though. I did see it ‘from the other side’, I.E. accessing Clojure code from Java, that was a world of pain there, not transparent like Scala, it has its own… everything, even function types… >.>
The way I see it they just wanted to play with Datomic - that seems to be the only reason they got involved with Clojure in the first place. During the refactor they changed the PostgreSQL data model to a point in time architecture so there was no reason to keep Datomic/Clojure around. You could argue that Datomic/Clojure was never critical to their business need and should have never been adopted under the circumstances (hindsight being 20/20).
The positive impact on their Ruby development environment should have been gained on some throwaway code - not by using the technology inside the core of their product.
That being said they are now back to maintaining a Ruby/Rails monolith avoiding the “fixed cost of distribution”. So as such they are not prepared for sudden, exponential growth (as they’ll likely not experience that anyway) but at the same time it isn’t clear whether the are investing in practices like identifying and adhering to bounded contexts, especially after they admitted to underestimating the domain complexity. Now my exposure to Ruby/Rails has been extremely brief so I don’t even know how easy or difficult that would be (my superficial impression is that Rails wouldn’t lend itself all that easily to maintaining bounded contexts - but I really don’t know).
Yes I had the same problem with Cojure sometimes it is hard to read, the same as Scala.
I like to have nice syntax
And it is hard to refactor Clojure code.
I tried to learn Clojure last year because I believe on learning one programming language per year. The stacktraces are terrifying. You don’t have a clue on what’s going on, and it’s all Javaish stuff. Really bad, if you compare with Elixir stacktraces.
What I like of Clojure are the alternatives of concurrency you have - STM, Actors and Fibers. My wish is that someone builds a programming language on .NETCore that looks like Elixir, has all metaprogramming features that Elixir have plus optional Types. And, of course has all the alternatives for concurrency implemented.
But I miss something with a direction which is not directly tied with Microsoft. An alternative would be awesome, even more one that has same features as Elixir. And the CLR is a way better place to build programming languages than the JVM, it’s such a shame most of the .NET devs only have looks for C#.
I’m looking into Clojure and while researching the gotchas of the system I stumbled upon this video:
For anyone who doesn’t want to watch it (IMO 30 min well spent) basically a Ruby guy discovers FP with most its nice parts but without BEAM, then has few problems (some are Clojure related, but most are not - distributed is hard, JVM is no walk in the park, this kind of stuff) and goes back to Ruby now trying to bend it to become somewhat functional since it’s better then nothing and better then working with what he had before.
This arguably sad story made me appreciate my case so much more: I researched a lot of alternatives and switched to Elixir in a similar situation, though most of the paper-cuts that this guy had do not exist in Elixir world and are something we don’t think about till it hurts us (so we take it for granted). Also we get BEAM and it’s really awesome Still I wonder if there are people going back from Elixir to where they came from, but they sure have not too many reasons to do that.