From my brief time trying it out about 3-4 years ago, the major things that needs improvement include:

1. Improve startup times.

2. Ditch leiningen, its functionality should be included in base clojure.

3. Emacs toolchain for Clojure seems massively complex and have too many parts. Makes it difficult to get it reliably installed/setup.

4. Getting it set up on Windows seems obscure, which shouldn't be. Part of the problem is that lein is not distributed with clojure.

5. Error messages are cryptic.

6. Needs a lisp style debugger. Once an exception occurs we need to get a repl at that point of state.

7. Needs provision include Local jars easily without having to set up a maven repo for the same. This is very important for hobbyist work, and for exploratory programming.

Modern Clojure includes that - it's deps.edn (though I'm good with Leiningen).

And ditch Emacs (unless you are already using it/used to it) and try VSCode + Calva that runs basically out of the box.

Exceptions... yes.... they are clear when you know what they mean, but it takes time, because they are so long.

Startup... you only start a REPL once, so does not really matter (to me at least). For compiled code, you can try GraalVM, that has zero-ish startup time - because all static initialization is resolved at compile-time.

Just my $.02

Edit: Calva also includes a debugger - never used it, but here it is https://calva.io/debugger/

> you only start a REPL once, so does not really matter

People say this a lot in Clojure, but don't you worry about global vars that no longer point to what you thought they pointed to? For this reason alone, I almost always load a new Python REPL.

Exactly. It ties to the excessive startup overhead. If you rename things and change stuff you must run the tests in a fresh JVM to ensure that everything has been evaluated in a consistent state rather ad hoc evaluation in the REPL. This means running from the command line in addition to your REPL or restarting the REPL regularly.

There’s a tool called Clerk which among other things resolves this concern about out of sync definitions https://github.com/nextjournal/clerk