2.1 通用设计
设计是一个动词,也是一个名词。设计是一个过程,一个活动,因此可以被看作是一个动词。该过程的结果是创建一个设计——一个对理想的最终状态的描述。因此,设计过程的输出是一件事物、名词,是你最终会实现的产品。设计意味着做出决策来达到目标并满足要求和约束。设计过程的输出是这些目标、要求和约束的直接反映。例如,我们可以参考一下房子是如何设计的。为什么中国传统民居的外观不同于瑞士或阿尔及利亚的?为什么蒙古包看起来像蒙古包,而不同于雪屋或者木屋呢?
这些风格的房屋的建筑架构已经发展了几个世纪以反映它们独特的目标、需求和约束。中国式房屋的特色包括对称的围墙,增加通风的天井,用来采光和御寒的朝南的庭院,等等。木房子有陡峭的一直延伸到地面的坡屋顶,这意味着最小面积的油漆和在大雪中的保护(雪会滑落到地面上)。雪屋用冰建成,这反映出除了冰雪以外其他建筑材料的相对匮乏,以及时间的限制(一个小雪屋可以在一个小时内建成)。
在每一种情况下,设计的过程中都会涉及一些解决方法的选择和采纳。即使是雪屋的设计也可以有变化。有些雪屋很小,就是一个临时旅行的避难所。有的雪屋很大,往往由几个建筑连接在一起,可以供整个团体开会使用。有的是简单朴实的小雪屋,有的里面挂着毛皮,用冰来做“窗户”,并用动物的皮做门。
在每一种情况下,设计过程平衡着设计师面对的各种“力量”。有些设计需要相当高的技巧来执行(例如,雕刻和堆积雪块,用这样一种方式来做出一个自支撑的圆顶)。有的相对来说需要比较少的技巧——几乎任何人都可以用树枝和树皮建成一座单坡屋顶小房。但这些建筑所表现出来的质量也可能有很大的不同。从原理上讲单坡屋顶小房提供保护的很少,很容易被破坏。但雪屋可以抵御北极的风暴而且屋顶可以承担一个人站立的重量。
设计“困难”吗?嗯,是也不是。新兴领域的设计是很难的。如何设计一个普通的自行车对我们来说非常清楚,但平衡车的设计则开辟了一个新的天地。幸运的是,大多数设计都不新奇,因为大多数时候我们的需求都不新奇。大多数人想要的都是一辆能可靠地从一个地方骑到另一个地方的自行车。这在每一个领域都是相同的。以房子为例,生活在菲尼克斯的大多数人都想要一个可以很容易、很经济地保持凉爽的房子,而在埃德蒙顿的大多数人主要想要的是一个可以保持温暖的房子。相反,生活在日本和洛杉矶的人想要的是能抵御地震的建筑。
对你(一个软件架构师)来说有一个好消息,有丰富的已经过验证的设计和设计片段,或者我们称之为设计概念的构建块,可以重复使用并组合来可靠地实现这些目标。如果你的设计真的很新奇——如果你正在设计下一个悉尼歌剧院,那么设计过程将很可能是“困难”的。例如,悉尼歌剧院的预算是最初预算的14倍,而且比预计的时间晚落成了十年。软件架构的设计也是如此。