The post is a newcomer’s field report after about a month of using Clojure to build real things, including the author’s own website. They came away impressed by how much the language pushes you toward data transformation instead of object plumbing. The big wins were immutable collections, the seq abstraction that lets one set of functions work across many collection types, and a standard library that feels smaller and more coherent than Common Lisp. The frictions were also exactly the expected ones: dynamic typing, unfamiliar syntax around mixed delimiters, and the sense that Clojure is easiest to love once you also buy into its editor and tooling habits.
The strongest comments sharpened that picture rather than changing it. The consensus was that Clojure is not really a “syntax” story at all. It is a package deal of immutable data, interactive development through the
REPL, and structural editing tools like
Paredit and
Parinfer that make code feel like a tree instead of a string. Several people said this is the point most newcomers miss. Without those tools, bracket juggling feels awkward. With them, other languages start to feel primitive.
A second major theme was portability. Commenters pointed out that once you learn Clojure itself, you are not locked to the
JVM. The same style can target browsers through
ClojureScript, shell scripting through
Babashka, Node through nbb, and newer runtimes like
jank and
Basilisp. The practical claim was not “write once, run anywhere” by magic. It was that cross-platform Clojure works when you keep host
interop thin and enforce it with tests, often using shared
.cljc code.
The longest side debate was about runtime tradeoffs. One camp argued that syntax is overrated and runtime properties like lightweight concurrency matter far more, holding up Erlang and Go as the bar. That view ran into a broad pushback: for Clojure in 2026, the old “JVM can’t do this” critique is stale. Multiple commenters said modern Java virtual threads now cover much of the green-thread argument, while Clojure’s own immutability and structural sharing solve a different class of concurrency problems than
BEAM’s share-nothing processes. The practical landing point was not that JVM, Go, and Erlang are interchangeable. It was that Clojure’s historical runtime handicap looks much smaller now, and the remaining differences are about tradeoffs, not clear inferiority.