Clojure/West 2013

Jeremy W. Sherman

3 min read

Apr 7, 2013

Clojure/West 2013

I stumbled from the red-eye into the airport shortly after dawn. Bleary-eyed and back on the ground in Atlanta at last, Clojure/West, and its talk of Lisp and browser and JVMs, seemed already a distant memory. My laptop hadn’t left its TSA-friendly bag for the past week. My notebook was full of scribbles and mindmaps. What was a Cocoa programmer like me to make of it all?

Cocoa is a collection of large frameworks for an elegant object-oriented extension of C.

Clojure is a multi-platform Lisp with rich support for immutable data structures and high-level concurrency constructs. Its community is very open to exploring academic ideas in an industrial context, which generates interesting projects and great content at a rapid pace.

Despite their differences, both communities face the same problems. Multicore is language-blind; mobile doesn’t care what language you hack in; and bugs crawl into our code whether it’s chock-full of square brackets or all-over parens.

Same problems, different solutions:

  • Making sure the right things happen at the right time without an explosion of fiddly state can be a pain. (Especially with GUIs. Special cases everywhere for those prima donnas.) Functional reactive programming takes a good shot at solving that. Javelin adopts a spreadsheet-flavored approach to functional reactive programming with an elegantly narrow API. ReactiveCocoa applies a more conventional signals-and-behaviors approach structured around blocks, KVO, and C macros.

  • Turning data into meaning is a problem that just won’t go away. Core Data gives us save, fetch, and a sometimes too-magic ORM. The rest is up to us. Core.Logic lets you convert data drawn from a database into facts and relations and declaratively answer questions and generate new assertions about that information. It plays nicely with relational data as tuples.

  • Undo remains a higgledy-piggledy mess. Undo with Core Data adds an extra spice to the mix. But treating the database as a persistent data store, as Datomic does, greatly simplifies the problem. No more “oops I just stepped on that data”. No more “let me compute the opposite maneuver and register it”. Instead, just, “let me just back up a bit in history”.

  • Build dependency management remains an issue. Xcode doesn’t handle any unit bigger than the file very well, and good luck keeping a diverse list of dependencies up-to-date and correctly installed. Clojure’s building on Java meant they got to start with a substrate with established dependency management systems, but those systems were also Clojure-agnostic. Clojars is a couple years older than CocoaPods. Both have some growing to do, but looking at what Clojars does might provide some good ideas for where CocoaPods might head next.

I’ll post more about these in the future, but my main point is that it’s not just tools and projects a Cocoa programmer could take from Clojure. It’s ideas:

  • Program with values, not variables.

  • Focus on transforming data, not pulling levers in a grand contraption.

  • Compose programs out of modules that present a limited, clean interface.

Mark Dalrymple

Reviewer Big Nerd Ranch

MarkD is a long-time Unix and Mac developer, having worked at AOL, Google, and several start-ups over the years.  He’s the author of Advanced Mac OS X Programming: The Big Nerd Ranch Guide, over 100 blog posts for Big Nerd Ranch, and an occasional speaker at conferences. Believing in the power of community, he’s a co-founder of CocoaHeads, an international Mac and iPhone meetup, and runs the Pittsburgh PA chapter. In his spare time, he plays orchestral and swing band music.

Speak with a nerd

Schedule a call today! Our team of nerds are ready to help

Let's Talk

Related Posts

We are ready to discuss your needs.

Stay in Touch WITH Big Nerd Ranch News