<?xml version="1.0"?>
<!-- 
/*
 * Copyright 2001-2004 The Apache Software Foundation.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 -->

<document>

 <properties>
  <title>The Turbine Experiment</title>
 </properties>

<body>

<section name="The Turbine Experiment">

<p>
  
  The following principles have been excerpted from
  <em>The Oregon Experiment</em>. <em>The Oregon Experiment</em> 
  is the third volume in a series of books written by
  Christopher Alexander describing methodologies and patterns 
  for designing healthy architechural structures that
  satisfy human needs and contribute postively overall
  to the surrounding ecology.

</p>

<p>
  
  Many people in OO design have drawn from the works of
  Christopher Alexander and I thought it would be a fun
  (and hopefully beneficial) experiment to systematically
  apply Christopher Alexander's ideas to the development
  of Turbine.

</p>

<p>
  
  <em>1. The principle of organic order.</em>
  <br/>
  Planning and construction will be guided by a
  process which allows the whole to emerge
  gradually from local acts.

</p>

<p>

  <em>2. The principle of participation.</em>
  <br/>
  All decisions about what to build, and how to
  build it, will be in the hands of the users.

</p>

<p>

  <em>3. The principle of piecemeal growth.</em>
  <br/>
  The construction undertaken in each budgetary
  period will be weighed overwhelmingly toward
  small projects.

</p>

<p>

  <em>4. The principle of patterns.</em>
  <br/>
  All design and construction will be guided by
  a collection of communally adopted planning
  principles called patterns.

</p>

<p>

  <em>5. The principle of diagnosis.</em>
  <br/>
  The well being of the whole will be protected
  by an annual diagnosis which explains, in detail,
  which spaces are alive and which ones dead, at
  any given moment in the history of the community.

</p>

<p>

  <em>6. The principle of coordination.</em>
  <br/>
  Finally, the slow emergence of organic order in
  the whole will be assured by a funding process
  which regulates the stream of individual projects
  put forward by users.

</p>

<p>
  <a href="mailto:dl@cs.oswego.edu">Doug Lea</a> has written an
  excellent article on the writings of Christoper Alexander and how
  they relate to the practice of OO software development:
  <a href="http://gee.cs.oswego.edu/dl/ca/ca/ca.html">
  Christopher Alexander: An Introduction for Object-Oriented Designers
  </a>

</p>

</section>

<section name="References">

<p>
  
  1. Alexander, C., M. Silverstein, S. Angel, S. Ishikawa, and D. Abrams, <em>The
  Oregon Experiment</em>, Oxford University Press, 1975. ISBN: 0195018249.

</p>

<p>
  Alexander, C., <em>Notes on the Synthesis of Form</em>, Harvard University Press,
  1964. ISBN: 0674627512.
</p>

</section>


</body>
</document>
