Re: [feyerabend-project] Long-lived software
- For the last few years I have focused my full attention on preserving what I
believe to be the real promise of objects, namely flexibility. Flexibility is
the ability to make unforeseen changes in a timely way. A long series of
inventions have addressed flexibility, starting with 'stored program' digital
computers, then the subroutine call, and now the polymorphic message send. But
flexibility is a property that programs still easily loose. And the loss is due
to a failure of design.
The relationship between design and flexibility is of course complex. Here I
will only mention two principles, each of which I have found to take more away
from flexibility than they give back to design. First, the notion of a program
life cycle admits failure from the start. If we are to have a life cycle, let us
make it long. One hundred years cannot be beyond reason. Second, analysis as an
activity to be conducted independent of implementation again presumes
implementation artifacts to be short lived and of little value. These ideas have
become self-fulfilling prophesies. Although they apply in the current
circumstance, they have become barriers to change from that circumstance. They
impede progress in object-oriented programming.
The cause of flexibility will not be served by merely discrediting life cycle or
independent analysis. To make progress we must examine the system of practices
that have lead to these principles, discard those practices justified only by
habit, construct new practice where human nature alone is insufficient, and then
describe the whole with metaphor that implies useful longevity for the programs
we make. I have many modest proposals. All fall within this framework.
v 503-245-5633 mailto:ward@...
f 503-246-5587 http://c2.com/