June 28, 2017

Is Kotlin the new Java?

One of the programming languages I’ve (essentially) been ignoring for the past couple of years has been Kotlin, the “better Java” from Jetbrains, the author of IntelliJ and other IDE’s.1 Recently, Kotlin has come back into focus for me for the following reasons: Google finally announced official Android support for Kotlin Steve Yegge, that infamously opinionated programming language enthusiast, wrote a patently Yeggian post about how Kotlin scratches his itches without supporting academic or impractical features. I began to tire (after only a handful of months!!) of diligently reminding my colleagues to prefer Guava Immutable collections over Java collections, Lombok/Immutables over hand-rolled POJO’s, and to please please use the @Nullable and @Nonnull annotations or at the very least java.util.Optional instead of returning ambiguous types (such as empty/nullable/possibly full collections of possibly null values). Some features need to exist at the language level To paraphrase Jeff Bezos, ...

June 18, 2017

Clojure and the Esoteric Mysteries of Namespaces

If you’ve ever been programming in Clojure and encountered an error which looks something like, IllegalStateException("Can't change/establish root binding of: *ns* with set"), read on! Preface I recently had the drive/opportunity to deep-dive on how Clojure’s namespaces function and how they provide a simple abstraction using the concept of Clojure’s “Vars”. Here is a deep-dive on how they work. This is a two-part series. The previous part of the series is available at Clojure and the Esoteric Mysteries of Vars. ...

June 18, 2017

Clojure and the Esoteric Mysteries of Vars

I recently had the drive/opportunity to deep-dive on how Clojure’s namespaces function and how they provide a simple abstraction using the concept of Clojure’s “Vars”. Here is a deep-dive on how they work. This is a two-part series. The next part of the series is available at Clojure and the Esoteric Mysteries of Namespaces. Vars: A Simplified Model of Variables One of Clojure’s essential motivations is to provide a hosted runtime for easily concurrent programs, wherein most of the challenges of locking and thread-safety are provided “for free” (at least in the sense of the programmer not having to worry about these low-level concepts). To that end, Clojure implements its variables differently than most other languages. ...

June 4, 2017

Bearish on Clojure in 2017

There was a recent brouhaha in the Clojure community about the recent blog post by a Clojure dabbler to the effect that Clojure may be a clean and beautiful language but that it fails in a few pragmatic and ergonomic senses which hurts its adoption and limits its appeal. Although the author admits that he probably made a mistake in jumping to adopt Clojure, a foreign technological concept to him, for a startup in a space that was also completely foreign to him, he does bring up some worthwhile points that are worth chewing over. ...

June 3, 2017

Switching to Hugo Blogging

I recently decided to switch the backend static site compilation toolchain for this blog from the small Cryogen project in Clojure to the venerable Hugo project written in Golang. Although I had previously written that I wanted a hackable static site generator at Returning to Blogging with Cryogen, my requirements lately have changed. I thought I’d write a couple of quick notes about why I switched (and why I didn’t). hackableToolchain << maintainableToolchain An easily hackable blog generator became less valueable to me than a robust and well maintained one. Although it was nice getting to contribute code to Cryogen and to make a difference, and to be able to understand the code base, the value of established and battle-tested code is something I ignored at the time. (I knew it was a factor, but at the time I just wanted to get rolling quickly. These days I’d rather have something that works on its own.) ...

© Jeff Rabinowitz, 2025