It's Groundhog Day, which the movies tell us is a day in which we have to worry about the same thing repeating over again. So maybe today's a good day to report on a book whose title repeats, The Design of Design.
Fred Brooks has been around for the design of a few computer architectures. And he's worked on some house remodels and additions. Now he's written this book about the general design process.
The strict waterfall method is still a bad idea. New to me, what I learned from this book: the people who originally created the waterfall method didn't mean for it to be applied strictly. They were saying stuff more like "At various stages, you're gonna have to think about X or deal with Y, but you're gonna have to move forwards and backwards between those stages. Too bad that folks setting up a bunch of government contracts overlooked the "and backwards" part, and thus some parts of the software industry followed (and follow) strict waterfall.
The important thing: When designing something, figure out what the critical resource is. If you're mass-manufacturing something, watch the manufacturing cost. If you're stopping a forest fire, watch the time. Don't assume that you know what the critical resource is at first. And once you've figured it out, don't get distracted, don't prematurely-optimize your design for something that doesn't matter.
There's a good chapter on Esthetics and Style in Technical Design. I.e., what do we mean when we say something is "elegant"? It's easy to just say "simple", but a machine that only implements NOOP is simple and useless. Brooks brings up a computer architecture by van der Poel with just one opcode. By being clever, a programmer could use that opcode to do anything, but the resulting code was complex. A simple instruction set doesn't lead to elegance. If simplicity isn't enought, what else do you need?
Parsimony is not enough. One also needs a certain straightforwardness in a language or computer architecture. There should be a direct route from what one wants to say to how one says it...
Structure. "Elegance" in a technical design demands that the basic structural concept of the design be plainly evident and, if not logically straightforward, easily explained.
Metaphor. Both "elegance" and comprehensibility are aided by the use of familiar and simple metaphors, especially in UIs to the designed object...
What is Good Computer Architecture?
...Blaauw and I believe that that consistency underlies all principles of quality. A good architecture is consistent in the sense that, given a partial knowledge of the system, one can predict the remainder... From consistency flow three major design principles: orthogonality, propriety, and generality.
Orthogonality: Do Not Link What Is Independent. A change in one orthogonal function has no observable effect on any other function in the set...
Propriety: Do Not Introduce What Is Immaterial. ...An example of propriety in computers is the unique representation of zero in twos-complement notation. In contrast, both signed-magnitude and ones-complement notations attach a sign to zero, a distinction that is extraneous. More rules have to be made as to how the signed zero behaves in arithmetic... Parsimony is a subset of propriety. Another is transparency, the property that a function's implementation of the datapath with a pipelined organization should be invisible to the programmer.
Generality: Do Not Restrict What Is Inherent. Generality is the ability to use a function for many ends. It expresses the professional humility of the designer, his conviction that users will be inventive beyond his imagination and that needs may change beyond his ability to forecast... When you don't know, grant freedom.
He still contends that great designers are born, not made. I dunno if I agree with that; he doesn't score any points by citing his examples from the Bible. He points out: once you've found a talented designer, don't nudge them into management. I agree with that.
He writes up some examples of the design process; I kinda wish that only one of these had been from home design/remodel projects. Still, this was overall a good book.