Recs.
Updated
SpecsUpdate
Pros
Pro Extremely rapid prototyping and workflow
Simplicity is one of the pillars on which Clojure is built. Clojure tries to solve many problems in software development as simply as possible. Instead of building complex interfaces, objects or factories, it uses immutability and simple data structures.
Pro Immutability pairs extremely well with stateless web services
Clojure programmers are highly encouraged to use immutable data in their code. Therefore, most data will be immutable by default. State change is handled by functions (for transformations) and atoms (an abstraction that encapsulates the idea of some entity having an identity).
Pro Tries to solve problems as simply as possible
Simplicity is one of the pillars on which Clojure is built. Clojure tries to solve many problems in software development as simply as possible. Instead of building complex interfaces, objects or factories, it uses immutability and simple data structures.
Pro Hook into the extensive repertoire of Java with little to none of the pain of Java
Pro Good for writing concurrent programs
Since Clojure is designed for concurrency, it offers things like Software Transaction Memory, functional programming without side-effects and immutable data structures right out of the box. This means that the development team can focus their energies on developing features instead of concurrency details.
Pro Fun and enjoyable
Clojure's interactivity and expressiveness means you're never bored using it. You get instant feedback and quick results, and your code is never any longer than it has to be, with all redundancy and verbosity removed. Makes it a joy to use, and just an overall fun and enjoyable experience.
Pro Incredible reach
Clojure is incredibly versatile, and can target so many platforms, that you get an incredible ROI. You can use Clojure to write JVM or .net CLR applications. You can use it to develop JaaScript SPAs, or NodeJS applications. You can use it for scripting a-la bash. It has an interpreter in Go and in native GraalVM. There is a Clojure for Erlang. There is a Clojure which compiles down to C++11. These are just the well maintained ones. There are plenty more being developed. This shows that Clojure is a solid foundation which is easy to port to new platforms, and the set will just grow over time.
Cons
Con Confusing error messages
Clojure's error messages more often than not are very confusing. They usually involve stack traces that do not thoroughly explain where the error was caused or what caused it.
Con Hard to sell to people
Introducing it into a company can be hard; common complaints are: It's too hard to find devs (untrue), the syntax is weird (C-style was weird to every beginner programmer too), we need mutability and/or proper static types for speed/efficiency, there's been little change to the language so it must be dead (untrue).
Con Syntax can be alien / jarring for those used to other Lisps
Perhaps some may consider this attribute an advantage, but I do not. Clojure does not attempt to maintain significant compatibility with other Lisps. So, if you already know a Lisp or are used to the way Lisp works in general, you'll probably be confused if you take a look at Clojure. See these resources for more details on this subject:
Con Most developer environments have a tough learning curve
Compared to most contemporary languages, clojure has relatively few well supported environments. Sure, there's cursive, which is decent, but I much prefer vs code to intelliJ. Also, the environments that seem to get the best support are the hardest to learn: emacs, vim, etc.
Recommendations
Comments
Flagged Pros + Cons
Pro Immutability is the default
Clojure programmers are highly encouraged to use immutable data in their code. Therefore, most data will be immutable by default.
State change is handled by functions (for transformations) and atoms (an abstraction that encapsulates the idea of some entity having an identity).