One Language to Rule Them All
The 2012 State of Clojure Survey sparked a familiar debate: whether a working developer should even have a "primary" language. One respondent argued that the notion betrays inexperience, pointing out that real-world constraints—platforms, existing codebases—usually dictate the tools you use.
After roughly 18 years of programming (a decade of it professionally), I take the opposite view. My journey spans Modula-2, C, Basic, HTML, Perl, XSLT, Ruby, PHP, Java, Mathematica, Prolog, C++, Python, ML, Erlang, Haskell, Clojure, and Scala—in that order. Few of those gave me any sense of home. Clojure does.
Why Clojure Stands Apart
Clojure belongs to a small class of "apex" languages—think Haskell—that represent the best convergence of software ideas toward a coherent goal. While Haskell owns the domain of lazy, purely functional, strongly typed problems, Clojure is my default for dynamic, high-level, general-purpose work. It is the most powerful, the most enjoyable, and the language with the fewest tradeoffs I have ever used.
That is not to say it is without flaws. I wish it ran faster, had a more intelligent compiler, boasted the package breadth of CPAN, produced kinder error messages, and included a strong type system for certain problem spaces. Yet these shortcomings buy something remarkable: a language of striking expressiveness and concision, assembled from a surprisingly small set of ideas that interlock beautifully.
The Toolkit
Clojure delivers a modern build system, a REPL, hot code reloading, and a rich feature set that includes:
- Hierarchies, parametric polymorphism, protocols, and namespaces
- Immediate, lazy, logical, object-oriented, and functional programming modes
- Rich primitives and expressive syntax
- Both immutable and mutable containers
- Multiple concurrency models
- Thoughtful Java integration
- Hygienic and anaphoric macros
- Homoiconicity
Commitment Beyond Convenience
Were Clojure to disappear tomorrow, I would not simply reach for the nearest alternative. I would actively set out to recreate its strengths in another language. That, to me, is the true definition of a primary language—not the one you happen to use, but the one whose design principles you carry with you wherever you go.



