Why Clojure?
Clojure’s core appeal
- Seen as the “third big Lisp” alongside Common Lisp and Scheme, but with a distinct philosophy: immutable data, simple core, functions over objects, and strong host interop (mainly JVM).
- REPL-driven, interactive development is repeatedly cited as the killer feature: change a small function, eval it into a long‑running system, and see effects immediately without full rebuilds.
- Immutability and simple data structures (maps, vectors, sets) are praised for reducing accidental complexity, easing reasoning, testing, and concurrency.
Immutability vs Static Typing
- Many argue they’ll “take immutability over types”: static types are seen as verbose, tightly coupling code to syntax and slowing expert developers.
- Others counter that static types are invaluable for reading and maintaining large, long‑lived codebases, especially when inheriting decade‑old systems.
- Clojure is strongly but dynamically typed; protocols, records, and types offer structure, but do not provide the same compile‑time guarantees as Java/Haskell/OCaml.
- Spec and Malli are used for runtime validation at boundaries; Typed Clojure exists but has not become mainstream. Some find the dynamic approach empowering, others find it fragile.
JVM, Performance, and REPL Tooling
- Fans praise the JVM as a fast, mature runtime with powerful stacktraces (“caused by” chains), huge library ecosystem, and good performance vs other dynamic languages.
- Critics dislike startup time (especially for scripts and serverless) and Java‑style stacktrace “barf” when errors occur, though tools like CIDER, clj‑kondo, FlowStorm, and Babashka mitigate this.
- Recent Clojure releases improved Java lambda interop, addressing a long‑standing friction point.
Ecosystem, Stability, and Datomic
- The core language is intentionally small and very stable; many libraries “just work” for years without changes. This stability is valued by long‑running businesses.
- Some perceive stagnation:
clojure.specremains alpha; Schema withered; Malli has become the de facto alternative. - Datomic (and Datomic‑like DBs such as Datascript, Datalevin, XTDB, Rama) are seen by some as a natural extension of Clojure’s data philosophy; others view them as niche or unnecessary.
Tooling, Onboarding, and Frontend
- Historical churn in build tools (classpath, Leiningen, Boot, deps.edn, various CLJS stacks) confuses newcomers; many wish for a single, “boring” default like Cargo/Mix.
- ClojureScript + React has multiple viable stacks (re-frame, Fulcro, etc.), but the variety and documentation gaps make it hard to know the “right” modern path.
Community, Culture, and Jobs
- Multiple comments praise Clojure for enabling high‑leverage solo/very small teams and successful bootstrapped businesses.
- At the same time, there’s repeated concern about scarce job opportunities and rewrites to Go/Python/Java when key Clojure experts leave.
- Some perceive elitism, defensiveness, and “true believer” culture around Clojure and its leadership, which they believe harms broader adoption despite the language’s technical strengths.