When creating, there are two (main) vectors: original and compelling. Imagine "Compelling" on the y axis, and "Original/Unique" on the x axis.
We've found a lot of patterns that make things compelling. Next time you watch a movie, set a timer on your watch. At almost exactly ten minutes into the film the exposition and character build up finishes and the plot begins. Why? Because that's been found to be a compelling amount of time to do that. Take more time, and you bore the audience, less and you risk losing them because they don't identify with the characters enough.
But notice I said "most movies". Because it's compelling, it's used often and that makes it unoriginal. Pop songs are all around three minutes and the hook comes at a certain time into the song, every time. So when you make something compelling, you are usually taking away from its originality. If you go for originality, you risk that people won't like it as much.
Genius is when you can make something both unique and compelling. It's rare. And then it's copied to the point where it soon becomes unoriginal. But that moment, when it's beautiful and you've never seen anything like it - that's a wonderful moment.
What Alexander is bringing up is that, while Hollywood films and pop music favors compelling over original, architects usually favor creating something original at the expense of it being compelling. And he is saying that quality without a name is the creation of artifacts that people actually like.
If I remember right, Kent Beck introduced Erich Gamma to Alexander's ideas with the notion of letting users create their experience in software. Erich took it in a different direction obviously, but I can't help but think that Kent had the stronger instinct of what Alexander was trying to say.
We have to remember when creating that startup: It has to be original or everyone will have done it already, but it's additionally about creating something that people will want. And there's the rub. First because that's extraordinarily difficult. But also because the original part is such an extension of your individuality -- it's you -- that then to modify it to adjust it to reflect what to people will like, means taking yourself out of that very personal work.
One thought though: is it really just genius, and the only way to get to that top right compelling and unique state by just jumping there?
Feels like it would be more of a combination: someone tries a unique idea and it's not compelling. Someone else sees this idea, but changes something about it, so it's now unique and slightly compelling. This gets repeated until you end up with something unique and compelling. This new idea now gets copied exactly, and it slowly moves from the top right to the bottom right - compelling but non-unique.
ie. Is this not a continuous process curve innate in all invention? The only real effect might be the speed of movement along the curve - someone (a genius) may be able to iterate across the curve by himself by building on his own ideas?
If this is true, then genius is not really required - all that we require is constant iteration of bad unique ideas until they become something good. Seems to hold up in reality - the more people involved in something, the quicker it gets somewhere good, as there are more iterations happening.
Emacs is often talked about as a structure that does have some kind of quality without a name. But it doesn't make sense to attribute that to any individual genius. The essence of Emacs is its openness.
I think there's some important thing to say about the arbitrariness of distinctions like compile-time/run-time, and the architectural implications of "open source," etc, but I don't have time to think it through...
Another example is Blender (3D). Created with and by the people who are using it (http://wiki.blender.org/index.php/Dev:Source/Architecture). I think it's one of the best software programs I've ever seen. Both compelling and Original/Unique.
In my opinion it is a gross misreading of Alexander to see him as advocating hedonism. His work is not based upon what people like, but what makes their lives better moment by moment. It is an approach to functionalism which is not task based but instead based upon consideration of universal social and emotional needs of each individual.
His patterns seek toward satisfaction not pleasure. Pleasure is a byproduct, of respect for the individual"s humanity and the emotional state of satisfaction that results. Pleasure is not a result of response to taste or fashion.
You bring up an interesting point. I didn't qualify compelling but, you're right, it can mean many things and have many aspects. You can say both Rebecca Black's Friday and Bach's Goldberg Variations are compelling, but they are night and day different.
Software, like architecture, usually doesn't have the type of hedonism you're speaking about (as far as I can tell). What people like is what they enjoy using. They often may not even know it, but find they're using it all the time, for example. And that is exactly that quality/satisfaction that you're talking about.
I find Christopher Alexander to be a much more opinionated architect than Alexander-pattern advocates are about software, at least in A Pattern Language.
For example, one of Alexander's patterns is to make buildings not more than four stories tall. He presents compelling evidence that living in tall buildings increases rates of mental illness and stunts physical and intellectual growth of children, and explains why the 5th floor is one too many. He is not saying, "maybe you should use the four floors pattern here," he is saying, "buildings should not be this tall!"
Another example is that homes on a street should somewhat cluster together and their doors should face each other. What is the equivalent in software of shaping a street to create a few small communities this way, not as an option but simply as the better way to make a street?
I know we don't wish to be dogmatic about things like REST, but the power of Alexander's ideas come from the superiority of his specific patterns over other ideas, not just his power to organize the practice of a profession into patterns.
I've only read Alexander's Synthesis of Form once, and it was a few years ago. Thoughtful reading, no doubt.
I think you may be confusing design requirements with patterns. His "no more than four stories" was a requirement for healthy human development, not a pattern. His 'patterns' were reusable chunks that fit a situation's requirements.
Patterns in programming only add value to the developers and architects.
This seems like the central misunderstanding of Alexander's work.
His patterns are about involving the inhabitant with the work of architecture. This is why Alexander's work is humanistic and beautiful, while stuff like the GoF patterns book is utterly uninteresting for anyone who's not a programmer.
The process described in Notes on the Synthesis of Form is 180 degrees from that advocated in his later work. It is top down and all at once. His later work advocates many hands working incrementally from the bottom up.
I would also suggest that his work is about the user interface of buildings and thus has implications for the design of analogous interfaces for software.
This sounds a lot different than the way patterns have been used in software:
"Notes includes presentation of a semiformal algorithmic method that helps automate good partitioning under various assumptions. To use it, one first prepares an exhaustive list of functional and structural constraints...The algorithm takes as input a boolean matrix indicating whether any given pair of constraints interact...The method results in indications of groupings that minimize total requirements interaction and resulting complexity. This statistical clustering algorithm arrives at subsystems by minimizing the interaction of problem requirements that each one deals with."
Something straight from the horse's mouth: Christopher Alexander himself, the keynote address at 1996 ACM OOPSLA. A good read and a taste of how much of Alexander's work you are missing if you stop at the GoF book:
Are you suggesting patterns don't exist in other programming paradigms?
We just saw a top level post on lessons from Haskell, for example, that while not using the pattern form, expressed a variety of idomatic, reusable solutions to contextualized problems.
Secondly, I think you are misusing the term Cargo Cult. Someone like Doug Lea (the OP) has a lot of experience with good software design - his concurrency libraries, in particular. Suggesting that OOP as a whole is a cargo cult is the height of ignorance.
Judging by the article, Alexander's work seems a lot more relevant and interesting than the simple structures the OOP folks have built and called by the same name.
We've found a lot of patterns that make things compelling. Next time you watch a movie, set a timer on your watch. At almost exactly ten minutes into the film the exposition and character build up finishes and the plot begins. Why? Because that's been found to be a compelling amount of time to do that. Take more time, and you bore the audience, less and you risk losing them because they don't identify with the characters enough.
But notice I said "most movies". Because it's compelling, it's used often and that makes it unoriginal. Pop songs are all around three minutes and the hook comes at a certain time into the song, every time. So when you make something compelling, you are usually taking away from its originality. If you go for originality, you risk that people won't like it as much.
Genius is when you can make something both unique and compelling. It's rare. And then it's copied to the point where it soon becomes unoriginal. But that moment, when it's beautiful and you've never seen anything like it - that's a wonderful moment.
What Alexander is bringing up is that, while Hollywood films and pop music favors compelling over original, architects usually favor creating something original at the expense of it being compelling. And he is saying that quality without a name is the creation of artifacts that people actually like.
If I remember right, Kent Beck introduced Erich Gamma to Alexander's ideas with the notion of letting users create their experience in software. Erich took it in a different direction obviously, but I can't help but think that Kent had the stronger instinct of what Alexander was trying to say.
We have to remember when creating that startup: It has to be original or everyone will have done it already, but it's additionally about creating something that people will want. And there's the rub. First because that's extraordinarily difficult. But also because the original part is such an extension of your individuality -- it's you -- that then to modify it to adjust it to reflect what to people will like, means taking yourself out of that very personal work.