1.3 何为实在?
设计理念 如果许多个体有共用的名字,则可以认为它们对应着同一个构想或形式。你懂我的意思吗? 我懂。 随便举个实例好了。世上有一些床和桌子,有许许多多,对吗? 对。 但是它们仅仅拥有两个构想或形式:一个是床的,一个是桌子的。 的确如此。 任何人在制作一张床或一张桌子给我们使用时,都要遵循这构想。 —柏拉图(公元前360年),《理想国》卷十 在2008年举办的第7届设计思想研讨会上,每位演讲者都发表了他们对相同四支设计团队会议的分析。3 这些会议的录像和抄本都提前很早发给大家看过。 雷丁大学的Rachael Luck在架构会谈中提出一个原先未引起任何人注意,后来却被大家一致意识到的实体,即设计理念(Design Concept)。4 毫无疑问,架构师和客户总是不断提到这个共识中的无形实体(即设计理念)。演讲者在谈及它时,常常会对着演示画面含糊地指点,但显然他们的意思并不是指整个演示画面或是画面中的某个特定事物。而他们实际上关注的总是研发中的设计的概念完整性(conceptual integrity)。 Luck的见解让设计理念取得了独立地位,这与我本人的经验有着强烈的共鸣。在开发IBM System/360“大型机”(mainframe)家族的单一体系结构时(1961~1963),体系结构组就经常谈及该实体,尽管没有明确地为其正名。得益于Gerry Blaauw的远见卓识,我们明确地把System/360的设计活动划分成架构(architecture)、实现(implementation)和具现(realization)的阶段。5 其基本理念在于,整个计算机家族既对开发人员呈现统一的接口(即体系结构),而又能提供多种并存的实现机型(位于性能和价格曲线的不同区间)。(参见第24章) 正是因为同时存在多个实现机型,以及几位工程经理之间你追我赶,才促成了这套体系结构向更通用、更简洁的方向演化,并且避免为了省小钱而做出的妥协。然而这种力量,仅仅是架构师们出于想要捍卫各自想要做出简洁机器的直觉和心愿才达成的。6 随着体系结构设计的不断推进,我观察到一件乍看上去很奇怪的现象。对于体系结构团队而言,实在的System/360,就是设计理念本身,即那台柏拉图式的理想机器。那些在工程基础上建造出来的、物理或电子意义上的Model 50、Model 60、Model 70和Model 90等机型,不过就像柏拉图说的那样,是那台实在的System/360的影子。而实在的System/360最完整、最忠实的化身,并不在那些芯片或金属元件里,而是在《IBM System/360 Principles of Operation》这本给程序员参考的机器语言手册中的文字和图表里。7 在建造View/360海滨小屋(参见第21章)时,我也有过类似的体验。它的设计理念在建造活动开始以前很久就已经是实在的了。后来图纸和纸板模型虽然更改过多次,但是设计理念始终如一。 说起来很有意思,我从未发现在Operating System/360软件家族有过这样的设计理念实体。或许其架构师觉得有,又或许我对其概念核心了解得还不够。也许我感受不到OS/360软件家族设计理念的原因在于它实际上由四个分立的部分混合而成:一个主控程序(supervisor)、一个调度程序、一个I/O控制系统,以及一个由编译器和实用工具组成的庞大软件包(参见第25章)。 价值何在 识别出隐形的设计理念,并在设计对话中转化成实在的实体,是否可以带来积极的价值呢?我认为答案是肯定的。 首先,伟大的设计都具备概念完整性—统一、经济、简洁。正如古罗马作家、建筑大师Vitruvius所说,它们不仅能有效运作,而且使人开心。8 我们会使用优雅、简洁、漂亮这种字眼来形容桥梁、奏鸣曲、电路、自行车、计算机,还有iPhone。识别出设计理念这个实体,有助于我们在独立做自己的设计时去追寻这样的完整性,有助于在团队设计时围绕它协同工作,也有助于将它传授给年轻人。 其次,经常提及设计理念,对于设计团队的内部沟通也有极大的帮助。概念统一这个目标,只有通过大量的对话才能达成。 如果设计理念本身是焦点,而不是拐弯抹角的表达或残缺不全的细节,那么沟通就可以非常直截了当。 因此,电影制片人都使用故事板(storyboard)来将他们的设计讨论的关注点始终保持在设计理念上,而不会陷入实现细节。 一旦深入细节,自然会使得概念的不同版本之间的冲突显现出来,并迫使人们形成决议。例如,System/360体系结构需要一种十进制数据类型,作为已经有着成千上万用户的IBM十进制机型的兼容过渡之用。我们正在研发中的体系结构里已经有了数种数据类型,包括32位定点补码整型以及可变长字符串类型。 十进制数据类型定义成与两者中的任何一个相似都是可行的。那么,哪个更符合System/360的设计理念呢?两方面都拿出了强有力的论据,而不同的侧重点则依赖于个人对于设计理念的不同见解。有些架构师主张的设计理念受早年的科学计算机的影响,而另一些架构师主张的设计理念则受早年的商用计算机的影响。而System/360的设计目标明确地规定,对于这两种计算机上运行的应用程序都要提供良好支持。 我们选择了把十进制数据类型建立在字符串类型的基础之上,因为对于十进制数据类型这个特殊的用户群,即IBM 1401的用户来说,这是他们中的大多数人最熟悉的数据类型。如果再给我一次机会,我仍然会做出这样的决定。