Tell me more ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I primarily program in D nowadays and my second favorite language is Python. I've decided I want to learn Clojure to broaden my horizons to a language that's more functional flavored and designed even more around metaprogramming than D or Python. What are some good (ideally free, but this is not a hard requirement) learning materials for someone with my background:

  1. I'm an experienced programmer in more imperative languages. I don't want something that tries to teach me "how to program" rather than just the language.

  2. I grok and regularly use some functional flavored constructs (map, reduce/fold, lambda functions, list comprehensions, closures) but tend to think of these as convenience features rather than fundamental primitives.

  3. I absolutely love metaprogramming and it's the main reason I care about Clojure. Ideally the learning material should treat macros/metaprogramming as a fundamental part of the language, not an "advanced" feature.

  4. I don't care at all about theoretical purity. (For example, despite my interest in Clojure I have zero desire to learn Haskell.) I want learning material with a very practical "getting things done" style.

  5. Lisp-style S-expressions and programming mostly without mutable state still seem weird to me, though I'm willing to try to get used to these.

Bottom line: Ideally I want a tutorial that assumes plenty of prior knowledge about programming in general and dives right into the unusual parts of Clojure's syntax and semantics, what cool/unusual things Clojure can do, and how to do them.

share|improve this question
1  
+1 just because you use D – Anto May 25 '11 at 18:37

5 Answers

up vote 5 down vote accepted

Mark Volkmann wrote an online article in 2009. It is very thorough, and garnered positive feedback from the Clojure community. It looks like it has been kept up-to-date.

(Disclosure: Mark is a friend and former colleague.)

share|improve this answer
This looks like exactly what I'm looking for. – dsimcha Mar 30 '11 at 2:34

You might want to check out Brian Marick's recent three part series on how to do TDD in Clojure (he works through Conway's Game of Life):

http://www.exampler.com/blog/2010/06/10/tdd-in-clojure-a-sketch-part-1/

share|improve this answer

Since you are extremely interested in macros, here is the best Clojure macro tutorial I've come across.

share|improve this answer

I would recommend starting with one of Rich Hickey's videos. You can find them on clojure.blip.tv. "Clojure for Java Programmers" is a really good intro.

If you're willing to shell out a little bit of cash either "Joy of Clojure" or "Clojure in Action" from Manning Books are excellent.

You can also check out the question http://stackoverflow.com/questions/599519/which-tutorial-on-clojure-is-best for some more resources.

share|improve this answer

Adding this as a new answer since its been quite some time since my original answer.

I've started an open source website where you can solve interactive fill-in-the-blank Clojure problems. It should be perfect for someone with your background. We've had a lot of great feedback so far, and the project has a lot of active contributors. The one thing you will probably miss, is that our site doesn't have a lot of metaprogramming problems right now. This is due to restrictions with the sandbox we are using to execute code.

share|improve this answer
+1 Awesome website. I'm finally getting around to learning Clojure now, 6 months after I asked the question about it. Since the syntax and style are so radically different from anything else I've used, this is a great crash course in the basics before I try to do metaprogramming. – dsimcha Nov 27 '11 at 2:43

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.