His book, "The Nature of Order" is also worth reading, even if it goes practically mystical. There is a theme in thinkers like Alexander, Hofstadter, and less known but tangentially related for his "constructal law," Bejan, where there a kind of aesthetic abstraction yields useful heuristics for more concrete problems. I'm sure there are many others, but these other two were on the brain recently. (Availability bias, surely)
Hofstadter gives you an intuition about complexity and formal hardness of problems. Alexander provides intuition about a kind of quality of reasoning, where from Bejan there is a sense of quality of relational change.
Reading Christopher Alexander is weirdly meditative and good for a technologists soul. I'm always happy to see him rediscovered.
When I was a student, my free time was spent in dusty corners of university libraries digging up old, forgotten books. I found many gems this way (including the venerable TAOCP. I only realized how famous it is after reading the Wikipedia page).
Although he seems to be most famous for the "Pattern Language" book, my introduction to his work was during my visit to the university's architecture library, from a slim volume entitled "Notes on the synthesis of form". It really highlights the magnitude of the task facing the modern architect/designer/developer. The first half of the book details how for most of history, design has not been a conscious process but rather an emergent property arising through a selection process (basically evolution). The alternative, discussed in the second half of the book, is for a human to sit down and think through the requirements and design almost de novo - this is extremely challenging due to the number of interacting variables.
Reading this book gave me a much better appreciation and respect for evolved techniques (eg. traditional methods of building, farming, etc; even social norms and traditions), and gave me valuable thoughts on when an evolutionary approach would work better vs a design approach (similar to Linux's explicit evolution vs OpenBSD's considered design).
Stewart Brand's How Buildings Learn: What Happens After They’re Built is another good book about designing for evolution. The book was also adapted into a 1997 BBC TV series (available Stewart Brand's YouTube channel).
I would actually recommend his "The Timeless Way of Building" [1] instead. :) This is the book that explains the philosophy and thinking behind all those patterns, and where I personally found the vast majority of his insight.
YES! Fantastic book and such enjoyable reading. And I love the built-in lifehack it suggests for reading just certain passages and type styles if you are in a hurry, then diving deeper on the sections you need to. I have both books and would find it hard to choose just one. A Pattern Language is more famous but this one is a really good complement to it.
Christopher Alexander is great. I first encountered Alexander in the book "Peopleware" [1], where some of his philosophy was summarised as:
> Alexander proposes a meta-plan. [...] The meta-plan has three parts:
> • A philosophy of piecemeal growth
> • A set of patterns or shared design principles governing growth
> • Local control of design by those who will occupy the space
I love the third part. Alexander argues that people who will inhabit a space (e.g. a home, a workplace, a town) should have the opportunity to participate in and shape the design and construction process.
This perspective is incredibly humane. Clearly it could be applied to software, as well as to buildings and town-planning. Do users of the software find themselves on the receiving end of some opaque automated bureaucratic system that was designed / built by some class of experts and then "thrown over the fence"? Or instead can users participate in the design and construction of the software, and make incremental changes to "sand away the rough edges" over time so it better fits their needs?
It is a shame that the philosophy from "The Timeless Way of Building" did not take off in software engineering, whereas instead Alexander's more formal "design pattern" approach took off and gave us e.g. the Gang of Four's Design Patterns book.
That said, the "design patterns" approach of attempting to formally frame and document patterns is helpful, even if some of the design patterns historically identified in the realm of software are not good ideas or arguably programming language defects. Some of the time in software projects there can be a tendency to get excited about adopting a pattern from another company or project, without first understanding what context that pattern arose in, and what problem it was trying to solve, and if the context and problem apply in the current setting. So I'd argue that the methodology of thinking about patterns in software engineering is a good practice, although cargo-cult application or execution from a given book of patterns is not necessarily helpful.
"The Timeless Way of Building" is a beautiful book, in terms of ideas, writing, and photography. Here's an excerpt of the italicised lines from Chapter 2:
> THE QUALITY WITHOUT A NAME
> There is a central quality which is the root
> criterion of life and spirit in a man, a town,
> a building, or a wilderness. This quality is
> objective and precise, but it cannot be named.
> The word which we most often use to talk about
> the quality without a name is the word "alive".
> But the very beauty of the word "alive" is
> just its weakness.
> Another word which we often use to talk about
> the quality without a name is "whole".
> But the word "whole" is too enclosed.
> Another facet of the quality which has no name
> is caught by the word "comfortable".
> Yet the word "comfortable" is easy to misuse,
> and has too many other meanings.
> A word which overcomes the lack of openness in
> the words "whole" and "comfortable", is the
> word "free".
> And yet, of course, this freedom can be too
> theatrical: a pose, a form, a manner.
> A word which helps restore the balance is the
> word "exact".
> And, yet, of course, the word "exact" does not
> define it properly.
> A word which goes much deeper than the word
> "exact" is "egoless".
> And yet, although the old bench and its carving
> may be egoless, this word is also not quite right.
> A last word which can help to catch the quality
> without a name is the word "eternal".
> I once saw a simple fish pond in a Japanese
> village which was perhaps eternal.
> And yet, like all the other words, this word
> confuses more than it explains.
> And so you see, in spite of every effort to
> give this quality a name, there is no single
> name which captures it.
> It is not only simple beauty of form and color.
> Man can make that without making nature. It is
> not only fitness to purpose. Man can make that
> too, without making nature. And it is not only
> the spiritual quality of beautiful music or of
> a quiet mosque, that comes from faith. Man can
> make that too, without making nature.
> The quality which has no name includes these
> simpler sweeter qualities. But it is so
> ordinary as well, that it somehow reminds us of
> the passing of our life.
> It is a slightly bitter quality.
He was the planner for the village I live in [0]. Did a great job in the early 80’s laying out the patterns to encourage the village to become a community, the concept of clusters of houses is a great way to build units of cohesiveness.
Since we are on the Christopher Alexander love fest, I would like to share a book I purchased a couple years ago by him. It's not a well known as his other stuff, but equally rich.
I can't for the life of me remember which of his books it was in but I remember him writing about having guests around and cooking with them, then eating. This was so different to my life where my Mum spent the time in the kitchen on her own, it just sounded far more convivial, a different way of living that I yearned for.
Does anyone remember which book and chapter it was in?
GTFA gives me this link on kitchens by Christoper Alexander:
"At the core […] is the idea that people should design for themselves their own houses, streets and communities. This idea […] comes simply from the observation that most of the wonderful places of the world were not made by architects but by the people."
— Christopher Alexander et al., A Pattern Language
So true, and it applies to software development as well.
Hofstadter gives you an intuition about complexity and formal hardness of problems. Alexander provides intuition about a kind of quality of reasoning, where from Bejan there is a sense of quality of relational change.
Reading Christopher Alexander is weirdly meditative and good for a technologists soul. I'm always happy to see him rediscovered.