
This book is the first definitive reference for the Clojure language, providing both an introduction to functional programming in general and a more specific introduction to Clojure’s features. This book demonstrates the use of the language through examples, including features such as software transactional memory (STM) and immutability, which may be new to programmers coming from other languages. Overview of functional programming and description of what sets Clojure apart from other languages Detailed explanation of Clojure’s special features Examples of real-world tasks that are well-suited to Clojure’s capabilities, starting with simple tasks and moving on to more complex applications
On the same note, looks like The Pragmatic Bookshelf is working on a more practical "next step" Clojure book (currently in beta):
Gratually moving is good if you want to stay productive. (Scala, Common Lisp, dylan come to mind)
Jumping in the deepend will totaly go against everything you learned but you will learn very fast. (Haskell, ML, Clojure and Scheme are probebly best here)
Books: Land of Lisp/Practical Common Lisp for Commen Lisp Not sure about Scala Programming Dylan for Dylan
Learn you a Haskell for Haskell Programming Clojure/Practical Clojure for Clojure Structure and Interpretation of Computer Programmes/The little Schemer for Scheme (Don't know a good book for ML)
While Scheme is conceptually simpler than Clojure, Clojure remains relatively simple in its conception. Here is what makes it a little more complex:
- one needs to know a bit of Java to really use it fully. The integration with Java is so nice that it's not rare to see direct calls to Java APIs without using wrappers, for instance when there is no Clojure library to do the job.
- one needs to understand the different ways of dealing with concurrency and learn to choose the appropriate one for a given problem.
- one needs to understand how protocols work, when they are needed and when multimethods are prefered. This also implies understanding the differences between deftype, defstruct and defrecord.
That said, it remains relatively simple because you only have to deal with functions, macros and namespaces and all is rather uniform.
Here is what I would suggest to begin with Clojure:
- if you have some Lisp background just pick a book like Programming Clojure (short, nice to read and direct to the point) or Practical Clojure (also short and up to date regarding protocols)
- if you have some Java or OO background but don't find confident enough with a Lisp syntax read the first chapters of Practical Common Lisp and then one of the other books mentioned above. http://www.gigamonkeys.com/book/ This book explains really clearly the why of the Lisp syntax and also macros (better than Programming Clojure on this point but this is mostly due, I guess, to the fact that Programming Clojure is more concise).
That being said, Land of Lisp is a fantastic way to get your feet wet in functional programming. I would highly suggest giving it a whirl. Learning Common Lisp will definitely help in learning Clojure. But you really need to look at it as two distinct steps towards your goal of learning Clojure.
There is also a new Clojure book coming out at the end of the month called the Joy of Clojure, which I'm really excited about. Currently the only two books out are Stewart Halloway's Programming Clojure, which is excellent. and Stuart Sierra's Practical Clojure, which is also very, very good. They are both focussed on Clojure 1.0, however, so you'll miss out on some of the features brought by 1.1 and 1.2. I own both, and can't recommend one over the other, though I might lean towards Practical Clojure purely for personal preference.
