Wrangling Clojure Stacktraces
Clojure error messages and stacktraces are the number one most complained-about feature of Clojure. I agree they're bad. There are many levels of abstraction that the problem can exist in. For instance, it could be a reader error (syntax error), a type error (expecting a different type), an argument order/number error, etc. I wish I had a nice analysis showing you how to identify each type of error. But I don't!
What I do have is a bunch of resources. As a major problem in the Clojure language, rest assured that a lot of energy is spent on it. There are blog posts, stack overflow questions, utilities, and major work in the language. Here are some resources:
How To Understand Clojure Stacktraces And Error Messages
Christopher Bui has written a nice guide for beginners.
Clojure Stack Traces for the Uninitiated
Connor Mendenhall gives some beginner tips for reading stacktraces.
Prone
Prone is a cool middleware for Ring applications that catch exceptions and give them to you with a nice UI in the browser. It's one of the first things I add when starting a new web project.
clj-stacktrace
This older library prints stacktraces in a better way. Clojure functions
are converted to their namespace/name
format instead of their
canonical JVM name with dollar signs, and things are aligned to be more
easily read.
Clojure Error Message Catalog
This is a project to document error messages in Clojure with their interpretations and solutions. It is similar to the Elm version.
clojure.spec
clojure.spec, due out in Clojure 1.9, promises to make a lot of error messages much better. A lot of the difficulty with error messages in Clojure is that there are macros (yet another layer of abstraction). clojure.spec gives you a way to parse macros (and other syntax) with much better error messages.
For a preview of how spec will help, check out Illuminated Macros and Improving Clojure's Error Messages with Grammars, which came out before spec but use similar solutions.
Conclusion
With spec, I am very optimistic about Clojure error messages. In the next five years, I can see them getting really good. In the meantime, Clojure error messages are just something you'll have to learn how to read.
I wish I could wave a wand and give you all of the experience needed to read error messages. Error messages are a problem in many languages and Clojure's follow that tradition :)
If you're interested in learning Clojure, don't be discouraged by the error message. Nor should the JVM scare you off. That's why I created the JVM Fundamentals for Clojure course. It's over five hours of video teaching lots of things from my experience with the JVM that I still use with Clojure.