概念一致性
绝大多数欧洲的大教堂中,由不同时代、不同建筑师所建造的各个部分之间,在设计或结构风格上都存在着许多差异。后来的建筑师总是试图在原有建筑师的基础上有所“提高”,以反映他们在设计风格和个人品味上的改变。所以,在雄伟的哥特式的教堂上,依附着祥和的诺曼第风格十字架,它在显示上帝荣耀的同时,展示了同样属于建筑师的骄傲.
与之对应的是,法国城市兰斯(Reims)在建筑风格上的一致性和上面所说的大教堂形成了鲜明的对比。设计的一致性和那些独到之处一样,同样让人们赞叹和喜悦。如同旅游指南所述,风格的一致和完整性来自 8 代拥有自我约束和牺牲精神的建筑师们,他们每一个人牺牲了自己的一些创意,以获得纯粹的设计。同样,这不仅显示了上帝的荣耀,同时也体现了他拯救那些沉醉在自我骄傲中的人们的力量。
对于计算机系统而言,尽管它们通常没有花费几个世纪的时间来构建,但绝大多数系统体现出的概念差异和不一致性远远超过欧洲的大教堂。这通常并不是因为它由不同的设计师们开发,而是由于设计被分成了由若干人完成的若干任务。
我主张在系统设计中,概念完整性应该是最重要的考虑因素。也就是说为了反映一系列连贯的设计思路,宁可省略一些不规则的特性和改进,也不提倡独立和无法整合的系统,哪怕它们其实包含着许多很好的设计。在本章和以下的两章里,我们将解释在编程系统设计中,这个主题的重要性。
如何得到概念的完整性?
这样的观点是否要有一位杰出的精英,或者说是结构设计师的贵族专制,和一群创造性天分和构思被压制的平民编程实现人员?
如何避免结构设计师产出无法实现、或者是代价高昂的技术规格说明,使大家陷入困境?
如何才能与实现人员就技术说明的琐碎细节充分沟通,以确保设计被正确地理解,并精确地整合到产品中?
获得概念的完整性
编程系统(软件)的目的是使计算机更加容易使用。为了做到这一点,计算机装备了语言和各种工具,这些工具实际上也是被调用的程序,受到编程语言的控制。使用这些工具是有代价的:软件外部描述的规模大小是计算机系统本身说明的十倍。用户会发现寻找一个特定功能是很容易的,但相应却有太多的选择,要记住太多的选项和格式
只有当这些功能说明节约下来的时间,比用在学习、记忆和搜索手册上的时间要少时,易用性才会得到提高。现代编程系统节省的时间的确超过了花费的时间,但是近年来,随着越来越多的功能添加,收益和成本的比率正逐渐地减少。而 IBM 650 使用的容易程度总萦绕在我的脑际,即使该系统没有使用汇编和任何其他的软件。
由于目标是易用性,功能与理解上复杂程度的比值才是系统设计的最终测试标准。单是功能本身或者易于使用都无法成为一个好的设计评判标准.
然而这一点被广泛地误解了。操作系统 OS/360 由于其复杂强大的功能被它的开发者广为推崇。功能,而非简洁,总是被用来衡量设计人员工作的出色程度。而另一方面,PDP-10的时分系统由于它的简洁和概念的精干被建造它的人员所称道。当然,无论使用任何测量标准,后者的功能与 OS/360 都不在一个数量级。但是,一旦以易用性作为衡量标准,单独的功能和易于使用都是不均衡的,都只达到了真正目标的一半。
对于给定级别的功能,能用最简洁和直接的方式来指明事情的系统是最好的。只有简洁(simplicity)是不够的,Mooers 的 TRAC 语言和 Algol 68 用很多独特的基本概念达到了所需的简洁特性,但它们并不直白(straightforward)。要表达一件待完成的事情,常常需要对基本元素进行意料不到的复杂组合。而且,仅仅了解基本要素和组合规则还不够,还需要学习晦涩的用法,以及在实际工作中如何进行组合。简洁和直白来自概念的完整性。每个部分必须反映相同的原理、原则和一致的折衷机制。在语法上,每个部分应使用相同的技巧;在语义上,应具有同样的相似性。因此,易用性实际上需要设计的一致性和概念上的完整性。
贵族专制统治和民主政治
概念的完整性要求设计必须由一个人,或者非常少数互有默契的人员来实现。
而进度压力却要求很多人员来开发系统。有两种方法可以解决这种矛盾。第一种是仔细地区分设计方法和具体实现。第二种是前一章节中所讨论的、一种崭新的组建编程开发团队的方法.
对于非常大型的项目,将设计方法、体系结构方面的工作与具体实现相分离是获得概念完整性的强有力方法。我亲眼目睹了它在 IBM 的 Stretch 计算机和 360 计算机产品线上的巨大成功。但同时我也看到了这种方法在 360 操作系统的开发中,由于缺乏广泛应用所遭受的失败
...
有很多行业和领域中的案例让人相信纪律和规则对行业是有益的。实际上,如同某艺术家的格言所述,“没有规矩,不成方圆。” 最差的建筑往往是那些预算远远超过起始目标的项目。 巴赫曾被要求每周创作一篇形式严格的歌剧,但这似乎并没有被压制他的创造性。并且,我确信如果 Stretch 计算机有更严格的限制,那么该计算机会拥有更好的体系结构。就我个人意见而言,System/360 Model 30 预算上的限制,完全获益于 Model 75 的体系结构。
在等待时,实现人员应该做什么?
几百万元的失误是非常令人惭愧的经验,但同时也是让人记忆深刻的教训。当年我们计划和组织编写 OS/360 外部技术说明的那个夜晚,常常重现在我的脑海。我和体系结构经理、程序实现经理一起制订计划进度,并确认责任分工。
体系结构经理拥有 10 个很好的员工,他声称他们可以书写规格说明,并出色地完成任务。该任务需要 10 个月,比所允许的进度多了 3 个月。
程序实现经理有 150 人。他认为在体系结构队伍的协助下,他们可以准备技术说明,并且能按照时间进度,完成高质量的、切合实际的说明。此外,如果光是由体系结构的团队承担该工作,他的 150 人只能坐在那儿干等 10 个月,无所事事.
当建议由体系结构的团队来编写计算机和编程系统的所有外部技术说明时,编程人员提出了三个反对意见:
该说明中的功能过于繁多,而对实际情况中的成本考虑比较少
结构师获得了所有创造发明的快乐,剥夺了实现人员的创造力
当体系结构的队伍缓慢工作时,很多实现人员只能空闲地坐着等待
概念的完整性的确要求系统只反映唯一的设计理念,用户所见的技术说明来自少数人的思想。实际工作被划分成体系结构、设计实现和物理实现,但这并不意味着该开发模式下的系统需要更长的时间来创建。经验显示恰恰相反,整个系统将会开发得更快,所需要的测试时间将更少。同工作的水平分割相比,垂直划分从根本上大大减少了劳动量,结果是使交流彻底地简化,概念完整性得到大幅提高
- 本文链接: https://halo.cjh.kim/archives/人月神话5-贵族专治民主政治和系统设计
- 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!