I just spent a couple of days debugging some Clojure code (most of which I wrote myself), and it was not all that pleasant.
I want better tools. I have for years. The tools have gotten vastly better over the years I have been doing Clojure, but we can still do much better.
Having just seen several great talks about tools at Clojure Conj, I'm convinced that we can do better right now. In particular:
- Proto-REPL - Jason showed off exactly the kind of data-structure visualizations that I have been dreaming of for years. I sure do love me some emacs, but I could be convinced to change if this thing is good enough.
- Sayid - Bill gave a glimpse into the future with a tool that captures a complete record of a program's execution, fully inspectable. This, too, I have been dreaming of for years. (I even started to write almost exactly the same thing myself, here, but didn't get nearly as far with it as Bill has).
In addition, there were a lot of talks about clojure.spec, and I'm embarrassed to admit that I haven't really tried it yet, but I have high hopes.
Finally, spectrum looks extremely promising - it's more-or-less a static type checker for Clojure.
In addition to all that, I'm becoming convinced that I need to make more effort to build visibility into my programs. I do plenty of logging, but poring through logs sucks. I'm not entirely sure how to go about this, but in general I'm thinking about putting in more "dev-mode only" code that captures data in various places (eg: messages received on a kafka queue) and exposes them through special, dev-mode only HTTP endpoints. I'll need to explore this to get a more concrete idea of what would be useful.