Abstractions

Recently I’ve been reading Dreaming in Code, Scott Rosenberg’s account of the first few years of the Chandler project. At the time (2004), Mitch Kapor and his team were trying to develop an open-source alternative to Microsoft Outlook. At one point, Rosenberg makes reference to an essay by Joel Spolsky which he published on his blog in 2002 about how adding layers of abstraction to software can make it easier for people to develop, but ultimately causes problems when things go wrong:

Abstractions do not really simplify out lives as much as they were meant to…The law of leaky abstractions means that whenever somebody comes up with a wizzy new code-generation tool that is supposed to make us all ever-so-efficient, you hear a lot of people saying, “Learn how to do it manually first, and then use the wizzy tool to save time.” Code-generation tools that pretend to abstract out something, like all abstractions, leak, and the only way to deal with the leaks competently is to learn about how the abstractions work and what they are abstracting. So the abstractions save us time working, but they don’t save us time learning…

With that said, I’ve switched from the Adobe Creative Suite to Panic’s Coda to develop this site and after spending a week learning my way around, I am convinced that I didn’t really need all of the extra layers to do web development. When I started out learning HTML and CSS a few years ago, it was important that I had abstractions to make things easier to understand. Now that I’m more comfortable with the technology, this is no longer true.

Despite the Creative Suite’s position as one of the market leaders in design/development software, it’s a significant learning curve that takes time to get comfortable with. Given the events of the past week concerning Adobe and Microsoft, I quickly discovered that I’m not alone in wanting to simplify things. Without question, Coda lives up to the Panic motto: Shockingly Good Mac Software, and I appreciate the great work Cabel and the team have done to deliver an app that Mac web developers can love.