Patterns of Software

Book cover image

Richard Gabriel is well known in software circles for his writings on the relevance of software completenes in the market, and as the founder of a startup that produced a Lisp environment. This book is a collection of his musings on software and some personal history. The first 100 pages or so deal exclusively with patterns, but without actually delving into the standard patterns in the Gang of Four book, or discussing applications of specific patterns. Gabriel prefers a close reading of the work of Christopher Alexander, the architect whose idea of architectural patterns was the incarnating influence for software patterns. If you think about it, it might appear weird that this closer inspection of Alexander’s writings from a software developer’s perspective has not been done more often, but judging from the quotes from Alexander’s books, and the way Gabriel makes the connections between Alexander’s ideas and the software domain, there is a reason for this inattention: Alexander’s work on patterns appears, except for the few concepts that might be useful for creative thinking, to be too esoteric, vague, and simply irrelevant for software. For example, on page 40, Alexander is quoted to say “Beyond that is my desire to see [buildings] belong with people, trees, and stars as part of the universe”. Such astral generalizations are really difficult to make convincingly; in a book on software, they are plain confusing. Gabriel cannot do more than draw weak parallels between software and Alexander’s broad ideas. There are a number of concepts that spring from this discussion which might be good sources of inspiration (such as habitability, peacemeal growth, and organic order), but the implications of these concepts are not dealt with in a sufficient manner by Gabriel.

An interesting detail that crops up a few times in the pieces on patterns and languages is the closed nature of libraries and platforms that was common at the time. On page 42, Gabriel laments that “programs are secret and protected, so we rarely see any but those we write ourselves”. Later, on p.102, commenting on the complicated format statement in Common Lisp, he writes that “there is no access to the source, neither for proving nor for improving”. To the developer of today, who uses languages whose source code is freely available, and components that are host on Github, these sound like stories from a dark past. They serve as reminders of how big of a change the OSS movement made in the industry, and how sharing code radically changed the dialogue on code quality.

Another pattern that pops out is that this book, having been written before the agile movement took foothold and everyone started working with some sort of “scrum”, ends up arguing for agile processes in a few places. For example, in a piece discussing productivity, Gabriel gives the example of a succesful project that was particularly productive, and was “iterative and partly prototype-driven” (p. 125). Apparently, ideas that were lingering around at the time got codified into what we call agile now, and it’s nice to see how the idea of agile was not born into a vacuum.

The second half of the book tells stories of how Gabriel came to be a Lisp hacker, Stanford PhD in computer science, and entrepreneur. This half is, in my opinion, the really rewarding part of the book. Gabriel tells stories of how he got so far and deep in the software business in an amount of personal detail unusual for software-related books. At times, the memoirs read like a novel about a sofware developer that lived through the great AI and Lisp crash of the early 90s, and a good novel at that. The first story details how Gabriel, son of dairy farmers in a rural areal, got into prestigious universities to study computer science and AI. This story is so incredible, and at one point so enraging, I would have called out “too much drama” if it were fiction.

Altough the personal stories do not contain any discussion of software per se, they are full of very interesting details on the early software business and the people who worked in it. The disappointment caused by the superficiality and lack of focus of the first half of the book that concentrated on patterns is made up for by the memoirs in the second half. This book is worth reading if only to learn the story of a hacker who had to navigate a world that was at times truly hostile.