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.