Clojure Programming at Big Astronaut: Data Nirvana

Michael Drogalis

One of the most striking differences between Lisps and object oriented languages is its first class support of data structures. This idea often end up a struggling point for those new to Lisp, and particularly Clojure. In order to be an effective functional programmer, it's critical to understand why Clojure chooses to make data structures, and not objects, king in its environment.

A common complaint from those new to Clojure is that at first glance, it seems that the language doesn't support abstraction very well. In an OO world, when we want to create a new abstraction - we do the only thing that we can - we make a new class. I wrestled with this notion for a long time. Working directly with data structures felt too unstructured, and there was no clear path to understanding data semantics. No lies here: learning Clojure was an uphill battle.

A few lines from Stu Halloway's "Narcissistic Design" talk finally made everything click for me. Stu describes why data...