Like any other technology, Clojure has its trade-offs.
Persistence structures in Clojure are less efficient
than their analogs in Java. There are some tips and tricks of how to optimize performance,
for example, you can use transient
versions of vector, map,
, which are more efficient, but not intended for concurrent access.
Also, you can use all host-platform abilities in Clojure (i.g., data structures and Java libraries), but typical
Clojure code will probably be slower than typical
Java or Scala code. It's not crucial to most applications, but it can be a decisive factor when choosing a technology for a specific high-performance system or module.
Clojure beginners often mention the quite steep learning curve
, but usually, it relates not to the functional approach itself, but to work out the common practices or, say, to interact with a hosting platform. Take your time, and with some practice, it should not become a problem.
Taking all that into account, I think that one of the most serious Clojure shortcomings is marketing.
Clojure is a simple language with minimal syntax, a well-conceived ecosystem, and high potential. You really will be pleasantly surprised!
However, its "public image"
, probably inherited from Lisp, is usually associated with excessive complexity and lack of standards, although things are the exact opposite. As a result, newcomer developers sometimes hesitate to invest in Clojure(Script) learning, preferring more popular alternatives, although, in fact, they could benefit more from mastering Clojure.