Slashdot Book Reviews: Programming Clojure
books.slashdot.org
books.slashdot.org
That's how you know you're learning - your brain rebuilds itself around new concepts. If you push it hard enough you will start hearing a hum in your ears after few hours of continuous learning.
You can either be someone who knew various programming languages and wrote a few small single-purposed libraries (and jump the wagon to another new languages) or knew two or three programming languages and build something big.
It's a choice. Ask yourself if you are truly interested at these languages or is it because of the HN side-effect (hang out with a crowd with certain belief, you'll become them or want to become them).
And you're absolutely right about making decisions, they have to be made. Anyway, I don't want to steal the topic, but thanks for the handy reminder. :)
These days, learning a new programming language every year is the fashionable thing to do. This trend, IMO, is stupid. I'd say build something new every year with what you already know. If what you know isn't enough to build that something, then go ahead and learn a new technology. (For example, I mostly program Cocoa but now I want to build a webapp. I can't write a webapp in Cocoa, which is why I'm learning Django.)
Pick one for the specific domain if your current one can't handle it.
JoC is for deeper understanding, Programming Clojure is for breadth and basic understanding to get you going in the first place. They, or maybe (depending on how it turns out) Clojure in Action are companion pieces to each other. On it's own JoC would be a decent book, but it really feels like one to take you the next steps AFTER you already have a foundation in the language from which to build.
Programming Clojure is an introductory book that provides an overview of the language and its functional heritage/constructs. I'd say its the "First" Clojure book.
JoC is the next step - it does offer a good look into Clojure, but from Ch 7, aims to go deeper into higher level constructs - macros, protocols, reify et al as well as concurrency. There's a lot of new 1.2 stuff that wasn't developen when PC came out.
The third book, Clojure in Action, is going to be excellent insight into the very practical, deployment, editing and interfacing aspects of the language. (Things like DSLs, web services, et al).
Recur seems to be maligned by people on both sides of the recursion/iteration divide. I rather like it, in no small part because I think the divide is silly. Iteration is the same as recursion, both semantically (especially if you have tail-call optimization) and syntactically (especially if you can have multiple loop variables). Recur blurs the distinction. If you think the distinction is important, it's confounding; if you think the distinction is silly, it's unifying.