I've thought this very often as well!
Especially in terms of maintaining/extending existing
code - it's just so simple and flexible.
- the structure of
lisps
- you can open a `let`/call
a function anywhere that you need space/context
- threads (-> and
->>) are ideal for adding/removing
functionality
- the simplicity of
clojure's data structures
- the simplicity of
clojure's standard lib functions for working with the data
structures dynamic languages get to re-use functions without
interface/polymorphic-impl overhead
The feedback loop (a proper repl) is of course the
best thing, but certainly not easy to setup - other languages
don't ask you to learn your editor as much.