Talk: Always Be Composing
Zach Tellman’s talk at the conj is about building composable software.
People often boast of the composability of Clojure programs. Compojure claims that it "allows web application to be composed of small, independent parts." Ring itself is based on composing middleware and handlers to build a web server. In fact, you can compose pieces easily with Ring, if those pieces were designed to compose with Ring. But not all libraries compose well with the Ring ecosystem. This talk asks "How can we design libraries that compose well in general?" A good intro to composition in Clojure is Rich Hickey’s talk Design, Composition, and Performance.
Why it matters
I often get asked why a certain library in Clojure doesn’t have an easy interface like the one in Ruby. The answer, in many cases, is that the Clojure library was designed to compose with other code, while the Ruby library was meant for programmer convenience.
But if I leave it at that, this answer is unsatisfactory. Behind my answer is years of experience telling me that composition beats convenience in the long run. The asker of that question does not have that experience. I would love to have a way to explain why in an analytical way.
If this talk even so much as opens the conversation up about the design space of composition, it would be extremely helpful. But I’m expecting more from Zach Tellman. His talk could have a profound impact similar to Rich Hickey’s talks on immutable values and simplicity.