Pure Danger Tech


Clojure abstractions

11 Mar 2011

Last weekend I did a talk about Clojure and abstraction at the CodepaLOUsa conference in Louisville, KY. At the end of it I summarized the list of features and what kind of abstraction they support:

  • Functions (name and manipulate code as a unit)
  • Collections (trait-based, immutable collections of data)
  • Seq (logical list view of a sequence of values)
  • Records (data types)
  • Multimethods, protocols (polymorphism and function dispatch)
  • Atoms, refs, agents (concurrency, state)
  • Macros (syntax, order of evaluation)
  • Namespaces (modularity)
  • Metadata (out-of-band information)

When I wrote that list down, it was actually pretty impressive. What I really like is how these are not just a great set of abstractions but how they actually support each other. I mentioned when I did this talk that really each of these topics is itself worthy of a whole talk and in fact, various Clojure gurus have done talks about many of these which I’ve linked into the list above.

I’ll be doing this talk a few more times in the next few months and will continue refining my talk. In particular, I think the talk is lacking a compelling example of how these abstractions come together; it’s missing the holistic view of what it feels like to have these abstractions available. Of course, doing that in a presentation is hard. :) But I accept the challenge…