410 likes | 1.77k Views
Keynote presented at DevWeek (24th March 2015) <br><br>Trees. Both beautiful and useful. But we’re not talking about the green, oxygen-providing ones. As abstract structures we see trees all over the place – file systems, class hierarchies, ordered data structures, etc. They are neat and tidy, nested and hierarchical – a simple way of organising things; a simple way of breaking large things down into small things. <br><br>The problem is, though, that there are many things – from modest fragments of code up to enterprise-wide IT systems – that do not comfortably fit into this way of looking at the world and organising it. Software architecture, design patterns, class decomposition, performance, unit tests... all of these cut across the strict hierarchy of trees. This keynote will look at what this means for how we think and design systems, whether large or small.
E N D
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
Domain Services Infrastructure 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: EPISODES: A Pattern A Pattern Language of Language of Competitive Competitive Development 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.
test test test function
method test test method test method
test test method test test method test test method
tests class tests tests tests class
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).