If design is dead then when was it alive?
[This little post has been a draft for too long. Time to let it loose I think...]
Among Mike Hill's FAQs and FUNQS from XP2004 is the following gem about the skills of developers he has met:
Based on my experience:
– 30% [of developers] need basic language training.
– 50% need OO training.
The problem is, what kind of OO training would be effective? Exposure to good designers and good designs would surely help, as would working in an environment that exposes the monetary cost / benefit tradeoff of a good design. (As Martin Fowler puts it: If you're a manager or customer how can you tell if the software is well designed? It matters to you because poorly designed software will be more expensive to modify. In my opinion I think that "to modify" means "for more than one person to work on for more than one day".) It is frustrating to keep on hearing of the confusion between the simplest design and the problems of simplistic design. Surely simple design has aesthetic qualities such as self-similarity, elegance, or coherence; whereas simplistic design is repetitive, inconsistent, and plain ugly?
This is what Alan Kay has to say about OO design and the history of Smalltalk: Bob Barton... had said in one of his talks a few days earlier: "The basic principle of recursive design is to make the parts have the same power as the whole." For the first time I thought of the whole as the entire computer and wondered why anyone would want to divide it up into weaker things called data structures and procedures.
Later, I sat in the room pondering the board from my talk. Finally, I counted the number of nonobvious ideas in this little program. They came to 17. And some of them were like the concept of the arch in building design: very hard to discover, if you don't already know them. The connection to literacy was painfully clear. It isn't enough to just learn to read and write. There is also a literature that renders ideas... at some point the organization of ideas starts to dominate mere language abilities. And it helps to have some powerful ideas under one's belt to better acquire more powerful ideas. So, we decided we should do design.
When, in what order and depth, and how should the powerful ideas be taught? Should we even try to teach programming? I have met hundreds of programmers in the last 30 years and can see no discernable influence of programming on their general ability to think well or to take an enlightened stance... A twentieth century problem is that technology has become "too easy". When it was hard to do anything whether good or bad, enough time was taken so that the result was usually good. Now we can make things almost trivially, especially in software, but most of the designs are trivial as well. Really? I hope not.