Command-Line Intransigence

In the early days of Clojure, I was skeptical of Clojure-specific build tools like Lancet, Leiningen, and Cake. Why would Clojure, a part of the Java ecosystem, need its own build tool when there were already so many Java-based tools? At the time, I thought Maven was the last word in build tooling. Early Leiningen… Continue reading Command-Line Intransigence

Lifecycle Composition

I’ve been thinking about how to build up software systems out of stateful components. In past presentations and blog posts I’ve alluded to a standard interface I use for starting and stopping stateful components: (defprotocol Lifecycle (start [this] “Begins operation of this component.”) (stop [this] “Ceases operation of this component.”)) Most of my Clojure programs… Continue reading Lifecycle Composition

The Amateur Problem

We have a problem. We are professional software developers who work with open-source software. The problem is that we are in the minority. Most open-source software is written by amateurs. Every time a hot new technology comes on the scene, developers flock to it like ants to a picnic. Those early adopters are, by definition,… Continue reading The Amateur Problem

My Clojure Workflow, Reloaded

I have a new post up on the Relevance blog: My Clojure Workflow, Reloaded. It’s a description of how I work with Clojure interactively using the REPL, tools.namespace, and Leiningen.

Affordance and Concision

Quick, Clojure programmers, what does the following expression do? (get x k) If you answered, It looks up the key k in an associative data structure x and returns its associated value, you’re right, but only partially. What if x is not an associative data structure? In every released version of Clojure up to and… Continue reading Affordance and Concision

A Brief Rant About Versioning

Version numbers are meaningless. By that, I mean they convey no useful information. Oh sure, there are conventions: major.minor.patch, even/odd for stable/development versions, and designations like release candidate. But they’re just conventions. Version numbers are chosen by people, so they are subject to all the idiosyncrasies and whims of individuals. Semantic Versioning, you say? Pshaw.… Continue reading A Brief Rant About Versioning

The Reluctant Dictator

I have a confession to make. I’m bad at open-source. Not writing the code. I’m pretty good at that. I can even write pretty good documentation. I’m bad at all the rest: patches, mailing lists, chat rooms, bug reports, and anything else that might fall under the heading of “community.” I’m more than bad at… Continue reading The Reluctant Dictator

Playing the Obstacle

When I was in acting school (yes, I was in acting school, see my bio) one of my teachers had an expression: playing the obstacle. When studying for a role, one of an actor’s most important jobs is to determine the character’s overall objective: What’s my motivation? The plot of any play or movie typically… Continue reading Playing the Obstacle