Clojure 2013 Year in Review
stuartsierra.com
stuartsierra.com
What is missing from Clojure, I think, is better support – either at the language level or as common practice – for large software composition, or programming-in-the-large. This is probably the opposite problem from to of Erlang, the other language that tackles the huge problem of state management well. Clojure is terrific when it comes to implementing computation, but how to best assemble various components into a large, maintainable program is not so clear.
http://www.infoq.com/presentations/Clojure-Large-scale-patte...
https://github.com/puniverse/pulsar
Your comment below this one focuses more on 'established practices' for large programs rather than 'is there a library that has this feature?'. I think that's just a reflection of both the state of functional programming and Clojure. They are growing and on there way to being commonly used in large systems, but not there yet (and so the practices don't exist).
For a completely different way of thinking about the problem of software composition that is more functional (although not for Newbies, not that you are) - there is lots of work going on with Monads in Clojure.
You can read about Monads in Clojure on Leonardo Borge's blog entry "Monads in Small Bites". This has some nice parallels by comparing Haskell and Clojure usage patterns.
http://www.leonardoborges.com/writings/2012/11/30/monads-in-...
Jim Duey has put lots of work into explaining Monads in Clojure in his talk at Clojure West. The way he builds up the venn diagram is a great visual explanation (some say the addition of arrows wasn't helpful).
https://github.com/strangeloop/2011-slides/blob/master/Duey-...
In addition the Fluokitten library in Clojure has lots of building blocks for Monads in Clojure. You can read about it on this blog entry "Functors, Applicatives and Monads in Pictures - in Clojure". The great thing about this is the focus on boxing. http://fluokitten.uncomplicate.org/articles/functors_applica...
I also saw my first Free Monad in Clojure in the wild this year:
http://stackoverflow.com/questions/20171057/is-it-possible-t...
Re naming and specific APIs - there is a comment along these lines on this blog entry:
"As you may have noticed, I reused list concatenation as monoid addition, but this makes a lot of sense, as list concatenation satisfies all the monoid laws, and no other laws. A more accessible way of saying that a type is a monoid is to say that it is combinable, addable, appendable or summable."
http://tailcalled.wordpress.com/2012/04/03/translation-of-mo...
I reckon 'addable' is what you were getting at with "build a specific API and then give it a different name."
The tooling and the libraries are working much better right now. A strong indicator of this was the decision to nuke Noir, which I gather made a lot of sense when it came out. I've noticed that my code makes fewer calls to Java than it did a year ago. nRepl was a huge improvement over Slime. I'm looking forward to Leiningen 3.
Documentation across the board has improved quite a bit. Its still not perfect, but you can't deny the quality found in Elastich [1], Leinengen [2], ClojureScript [3], Luminus [4].
Many more useful libraries. I can't list them all here, but the library ecosystem has improved quite a bit, not only in quantity, but quality. Don't get me wrong, there are a few duds out there, but it is nice to see that many problems are being solved.
[1] http://clojureelasticsearch.info/
[2] https://github.com/technomancy/leiningen/blob/master/doc/TUT...
It was not a good experience and trying to get any help with errors netted me angry and uncooperative responses from the maintainer/creator.
You do bring up an interesting point though. Some people in the community truly do suck and come across as elitist and are quick to dismiss you as an idiot with no good reason, when reality it is their poor documentation and assumptions that are amiss.
I shouldn't really write the dismissal found in the above paragraph. I've met quite a few Clojure users in real life, and to be honest, the vast majority are humble and just sort of making it up as they go along, albeit at a higher level. Overall, the Clojure community I've been exposed to has been great, and more than willing to help you. Don't let a bad apple ruin the basket.
great video outlining how datomic was implemented using clojure..I would say this is a large sized system....
I have built a larger system in clojure and do not have the same concerns..I feel for the first time in a while I have a powerful tool at my disposal and will be my tool of choice for now..