Kyle's suggestions have a ton of value, but do note that debugging Clojure(Script) can also be a pedestrian activity if you so desire. All the usual mainstream bell/whistles IDE-based interactive debugging is available today in CursiveClojure - break on all exceptions, eval in frame, etc.<p>Also ClojureScript has had accurate source mapping in Safari, Chrome, Firefox, and Node.js for quite a long time now and recently moved to support targets like iOS. It's a huge time saver even for an experienced Clojure programmer :)
I'm trying so hard to love Clojure, but I keep running into examples of code like this in the world: <a href="http://imgur.com/79FlpTL" rel="nofollow">http://imgur.com/79FlpTL</a>. I don't write dense Lisp code like that, but unfortunately a lot of other people do. And I spend far more time reading code than writing it.
Error messages and stack traces look pretty ugly.<p>In Common Lisp:<p><pre><code> CL-USER 51 > (bake (make-instance 'pie :flavor :blackberry) 375 10.25)
Error: The value 3843.75 of #:|predicate1555| is not a predicate in CONDP.
1 (continue) Supply a new value of #:|predicate1555|.
2 (abort) Return to level 0.
3 Return to top loop level 0.
</code></pre>
A clear error message and a way to repair it.<p>A stack frame:<p><pre><code> Call to BAKE {offset 394}
PIE : #<PIE 402000993B>
TEMP : 375
TIME : 10.25
DBG::|predicate| : 3843.75
DBG::|expression| : #<Function < 411007995C>
DBG::G : 3843.75</code></pre>