Fourteen Months with Clojure
Clojure&#x27;s been my go-to language since around 2009, and I use it full-time today. A few points from the article:<p>The horrible if-let code the author shows is exactly the kind of thing people use macros for. I&#x27;m surprised nothing exists in clojure.core for this, but every project I&#x27;ve ever worked on has something like if-lets, which short-circuits on the first falsy assignment. Everyone thinks they don&#x27;t need macros and then finds stuff they hate in the language which is easily fixed by macros. This is probably true of the non-mainstream paradigms in all languages. It takes some willpower and humility to learn all Haskell&#x27;s lens arrow operators instead of just laughing at them.<p>clojure.spec is nice, and I use it in my current project, but it has performance issues (it is after all basically alpha code) and I&#x27;ll be honest that I don&#x27;t _really_ understand what the workflow is supposed to be. If you deal with a lot of side-effectful code you might be using conforms and asserts to keep things sane, but I&#x27;m not really benefiting from the generative testing bits. Thinking in terms of generators for code that _is_ pure just feels like another job that I&#x27;ve for some reason forced on myself. Anyway, at the very least, it does make the world of procedural code operating on maps a little safer and saner and you should probably try it.<p>My complaints about Clojure are nothing to do with the language, which I think is absolutely fine. My main complaint is that Clojure people are smart, and fundamentally believe in small libraries over frameworks, and this means that the Clojure landscape is scattered with abandoned overly-specific libraries, and abandoned and unloved big frameworks. If I could, I would pay someone full time to maintain Incanter, but it&#x27;s now basically dead, and that means Clojure has no useful numerical computing environment. I am lucky that I can get by with what already exists in Incanter and what&#x27;s in clj-ml for my analytics work, but nobody is going to quit Python or R for Clojure at this point unless they&#x27;re smart enough and willing to write all this for themselves.<p>I happen to do some web stuff and I think ClojureScript is about as good a language as you&#x27;re ever going to get on the browser. But the other consequence of a community where most people are smarter than you is that the best front-end frameworks are utterly inscrutable. Om has wonderful functionality that I think I would like in my app, but I am too dumb to understand all the moving parts. Reagent is very elegant but is tougher to scale to complex web apps.<p>I still believe that Clojure is a beautiful and productive language. Year after year I see other languages pile on new syntax while Clojure just remains brackets and functions. For the parts of my code that are pure and functional it&#x27;s wonderful, for the parts that are ugly and pragmatic I have the full range of the JVM landscape available to me. I get to stay in Emacs, and Cider me custom elisp does everything I need for an IDE. But if anyone asked me to recommend a language to spend their lives in I would probably just say Python and if you do web stuff JavaScript. Bigger community, better maintained open source projects, and just a clearer roadmap to mastery.