第五章是讲构建中的设计 (Design in construction)。
第一节介绍了设计中面临的一些挑战。设计是一个"wicked"的问题,就是需要通过解决或者部分解决才能定义清楚的问题。作者特别举了Tacoma Narrows大桥的例子来说明,不等到这个桥被建好,并被风吹倒,设计者根本不会知道设计的时候还要考虑风的影响。设计也是一个"Sloopy"的过程,过程中会犯错,一个好的方案和一个不好的方案可能只有很小的区别,很难知道什么时候是足够好可以完成设计了,很多情况下,往往是没有时间的时候就完成了。设计中会涉及到各种取舍和优先级的高低,有各种限制和约束。设计也没有一个决定性的正确答案,有时候会有很多可行的方案,这就导致它是一个启发式的过程,其中包含了不断的试错。用一个词来概括就是"Emergent"。设计方案不会一下子从某个人的脑海里蹦出来,它需要不断的评审,非正式的讨论,可能要写一些代码,修改一些代码,不断重复这个过程才能得到一个比较好的方案。
第二节讲了设计中最重要的三个观念:处理复杂性(Complexity),高质量的设计特征,设计的层次。
先说复杂性的处理。这是软件最主要最需要处理的东东。这里要说明一下什么是复杂性。事物的属性可以分为两类:一类是本质的(Essential),一类是附属的(Accidential)。本质的属性就是一种事物必须具有以成为这种事物的属性,就像汽车一定会有发动机一样,没有发动机就不能叫汽车。附属的属性就是可有可无,不影响这种事物就是这