Date post: | 28-Jul-2015 |
Category: |
Software |
Upload: | kevlin-henney |
View: | 457 times |
Download: | 4 times |
A System Is Not a Tree
@KevlinHenney
Let us examine [software's]
difficulties. Following Aristotle, I
divide them into essence — the
difficulties inherent in the nature
of software — and accidents —
those difficulties that today
attend its production but that
are not inherent.
How much of what software
engineers now do is still
devoted to the accidental, as
opposed to the essential?
Arboricide is the murder of trees.
The victims of arboricide are the descriptive tree structures that are so often found in software, holding together many individual elements in one coherent and immediately understandable harmony.
Software development should not be a trade of constructing difficulty from simplicity. Quite the contrary. So where there are trees to be shown you should show them, and refrain from turning the relationships they describe into a puzzle. It is, essentially, a matter of the span of description.
Aboricide, then, is using a smaller description span when a larger one would be better.
Trees sprout up just
about everywhere in
computer science.
Donald Knuth
main
subroutine subroutine
subroutine
subroutine
subroutine
subroutine
subroutine
subroutine
afferent branch transform branch efferent branch
main
function function
function
function
function
function
function
function
afferent branch transform branch efferent branch
main
function
function
function
function function
function function function
Concept Hierarchies
The construction principle involved is
best called abstraction; we concentrate on
features common to many phenomena,
and we abstract away features too far
removed from the conceptual level at
which we are working.
Ole-Johan Dahl and C A R Hoare
"Hierarchical Program Structures"
Infrastructure
Services
Domain
Infrastructure Services Domain
concept
realisation
A city is not a tree
Christopher Alexander
A city is not a tree
Christopher Alexander
The tree of my title is not a green tree
with leaves. It is the name of an
abstract structure. I shall contrast it
with another, more complex abstract
structure called a semilattice.
Both the tree and the semilattice are
ways of thinking about how a large
collection of many small systems goes
to make up a large and complex
system.
The semilattice is potentially a much
more complex and subtle structure
than a tree.
It is this lack of structural complexity,
characteristic of trees, which is
crippling our concepts of the city.
The reality of today's social structure
is thick with overlap — the systems of
friends and acquaintances form a
semilattice, not a tree.
The basic thesis [...] is that
organizations which design
systems [...] are constrained
to produce designs which are
copies of the communication
structures of these
organizations.
Melvin Conway
How Do Committees Invent?
We have seen that this fact
has important implications
for the management of
system design. [...] A design
effort should be organized
according to the need for
communication.
Melvin Conway
How Do Committees Invent?
EPISODES:
A Pattern
Language of
Competitive
Development
Ward Cunningham
In simplicity of structure the tree is
comparable to the compulsive desire
for neatness and order that insists the
candlesticks on a mantelpiece be
perfectly straight and perfectly
symmetrical about the centre.
function test
test
test
method test
test
test
method
method
method test
test
test
method
method
test
test
test
class tests
tests class tests
tests
In simplicity of structure the tree is
comparable to the compulsive desire
for neatness and order that insists the
candlesticks on a mantelpiece be
perfectly straight and perfectly
symmetrical about the centre.
The semilattice, by comparison, is the
structure of a complex fabric; it is the
structure of living things, of great
paintings and symphonies.
A program which
has such a
structure in which
there is no single
"highest level"... is
called a heterarchy
(as distinguished
from a hierarchy).