In integrating The Mighty Dan Webb's code highlighter on this site I was faced with a familiar task: developing a stylesheet to match the current site style. As I was groveling around for the original Photoshop compositions and stumbling through the CSS it occurred to me that it would be really handy if the site had a "swatches" page. You know, just a simple page that displayed the swatches for the current color theme. Each color would have it's CSS color value and other little things readily accessible and ready for cutting and pasting into new code. So I made a swatches page:
It made developing the highlighting styles easy but perhaps no easier than a swatches page in Photoshop would have. The real value of something like this is accrued next time, and the time after that.
You see, next time I won't have to look for the swatches because they are baked in to the site. And if the site colors change these swatches will too because they are dynamically generated the same way all the site colors are. This is an example of what Richard P. Gabriel, in Patterns of Software, calls "habitability":
Habitability makes a place livable, like a home. And this is what we want in software—that developers feel at home, can place their hands on any item without having to think deeply about where it is.
Habitability is perhaps most readily achieved in a controlled, closed environment. Gabriel is one of the original LISP hackers and cites examples from that ethos often in his musings on habitability. LISP is sort of the ultimate closed environment when it comes to programming languages.
It's at the edges of our software systems where habitability can be the hardest. The interfaces. The interface between our software and the graphic design is a paradigm. That space, between our CSS and our Photoshop compositions and our browser compatibility and our programming languages is fraught with rabbit holes, big carnivores and super bugs. Where are the connections? They're juggled in our heads. By bringing more of the graphic design into the actual software product, and reifying the pieces in our programming environment we move the software system edge to encompass more territory. By expanding that perimeter we can spend more time inside our nice cozy, efficient, habitable environment. Ah.