
Christopher Alexander: An Introduction for Object-Oriented Designers - ohwp
http://www.patternlanguage.com/bios/douglea.htm
======
david927
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.

~~~
RyanZAG
Really good analysis.

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.

~~~
mbrock
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...

~~~
ohwp
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.

------
1123581321
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.

~~~
breckenedge
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.

Edit - and architects.

~~~
brudgers
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.

~~~
breckenedge
Sounds like I have a bit more reading to do. Thanks

------
DennisP
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."

------
praptak
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:

<http://www.patternlanguage.com/archive/ieee/ieeetext.htm>

------
codewright
Two things:

1\. What? — An FP coder

2\. Patterns mean "I have run out of language." — Rich Hickey

~~~
ohwp
_Patterns mean "I have run out of language."_

That's why he called it a pattern language. It's the language of patterns
found in life ;)

~~~
codewright
I was mostly huh'ing at the mapping of dissimilar disciplines in a confused
attempt to promulgate OOP cargo cult.

~~~
parasubvert
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.

