I don't agree with the suggestion as I fear that beginning with SICP could just demotivates a beginner and that early positive feedbacks (related to the goal to achieve) are important.
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).
There should be no major problem if someone knows both Java and a Lisp. Either reading Programming Clojure or Pratical Clojure should be enough to start with, or maybe this tutorial http://java.ociweb.com/mark/clojure/article.html (I didn't read it but it supposed to be good)
For somebody who don't know neither Java neither a Lisp, I would suggest to understand the following concepts in Java and the JVM before doing the suggestions in the second point (though PCL could be read before learning Java to see why Lisps are so awewome):
- collections (java.util.List, hashmap, set etc.) since each Clojure collection implements a Java interface. This is useful for interoperability.
- interfaces, inheritance and access specifiers (because then you can understand why you can not override a Java protected method from a Clojure proxy)
- some of the most common API like regular expressions, syntax for printf etc.
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).