Would be awesome if interactive like the interactive SICP[0]<p>[0] <a href="http://xuanji.appspot.com/isicp" rel="nofollow">http://xuanji.appspot.com/isicp</a>
For those who prefer learning in a more passive manner, I've found these sets of screencasts on the Clojure Koans quite useful too.<p><a href="http://www.clojurescreencasts.com/koans-walkthrough/01.html" rel="nofollow">http://www.clojurescreencasts.com/koans-walkthrough/01.html</a>
This is a great project!<p>I believe there's a lack of clarity in the let form explanation:<p><pre><code> =>(let [object "light"]
=> (let [object "darkness"])
=> (println (str "God said let there be " object)))
God said let there be light
nil
</code></pre>
'object' is overwritten but only within the second let form:<p><pre><code> =>(let [object "light"]
=> (let [object "darkness"]
=> (println (str "God said let there be " object))))
God said let there be darkness
nil
</code></pre>
or even:<p><pre><code> =>(let [object "light"]
=> (println (str "God said let there be " object))
=> (let [object "darkness"]
=> (println (str "God said let there be " object))))
God said let there be light
God said let there be darkness
nil
</code></pre>
The reason for this is the let form uses lexical scoping. In other words it creates a new frame which includes the bindings declared in the square brackets. When 'object' is evaluated its binding is looked for in the current frame, then the frame that called that frame and all the way out into the global namespace stopping when a binding is found.<p>See also: <a href="http://stackoverflow.com/questions/1774417/scoping-rules-in-clojure" rel="nofollow">http://stackoverflow.com/questions/1774417/scoping-rules-in-...</a>
If the site looks cool and slick to you, then you should give a star to <a href="https://github.com/tripit/slate" rel="nofollow">https://github.com/tripit/slate</a> which I used to create the site.<p>I found Slate is very easy to use and customize!!
Lovely. A nice addition would be a floating REPL to try things out as you go along, maybe at the bottom of the screen with a dash of transparency.<p>(I know I know, there are plenty of other ways to access a Clojure REPL!)
Clojure has always been slightly disappointing for me...<p>The principles behind its design are all sound and Rich Hickey deserves credit for putting in the hard thought behind it.<p>... but.... the reality seems to be of a really under performing language. The forums are consistently full of people with 'why is this slow?' to which the solution is always 'Give it more hints' or 'do it in a more Java like way'.<p>Unfortunately the Clojure stack seems not to have much mechanical sympathy (despite its best intentions). It seems the natural/idiomatic way to use Clojure results in far too much dynamic behavior to be performant.
Clojure may scale well, but its inherent bad performance (without lots of work) is a major downside.<p>I forget who said this, but it seems very appropriate to Clojurists... "Show me you can use one machine well before you get another..."
It reminds me to <a href="http://learnxinyminutes.com/docs/clojure/" rel="nofollow">http://learnxinyminutes.com/docs/clojure/</a> but prettier.
<a href="http://www.4clojure.com/" rel="nofollow">http://www.4clojure.com/</a> should also be mentioned here. I had a lot of fun there.
I love it!<p>The target audience is people with prior programming experience. It's important to know the target audience, either as a writer or reviewer.<p>The tutorial webpage is simple and effective with a gradual progression in concept difficulty.<p>I hope we have more things like this! Thanks!