一、外科手术队伍
在接手一个大型项目时,该如何分配你的资源?例如OS/360,Exec 8 、TSS 这样的产品。
软件经理很早就认识到这个问题。从人员角度上,他们认为优秀程序员和较差程序员之间的生产率的差异,但实际测量出的差异令人吃惊。
有人曾对一组具有经验的程序员进行测试,发现最好和最差的表现在生产率上平均比例为10:1,在编程速度和空间上具有5:1。为什么开发成本会如此差别巨大?很关键的一个问题是协作沟通问题。Books常常重复这样的观点:需要协作沟通的人员数量影响着开发成本,因为成本的主要组成部分是相互的沟通和交流,以及更正沟通不当所引发的不良结果,如系统调试。
一拥而上的开发方法是高成本、速度缓慢且低效的。例如,在OS/360项目中,当项目进行到顶峰时,有超过1000人在为它工作,其中包含了程序员、文档编制人员、秘书、管理人员、支持小组、操作人员等等,从1963年到1966年,用在设计、编码、文档上话费了大约5000个人年。而用人月进行等量置换,你会发现这尽然需要25年。那么,一个产品在其最初设计的25年后才出现,你还会对其感兴趣吗?
那么如何处理这样的处境呢?
Mills建议大型项目的每个部分由一个团队专门负责,然后由该团队的每一个成员负责该部分中的某个部分。这就像一场外科手术,每个人各司其职,进行专业化分工。
二、贵族专制、民主政治和系统设计
概念完整性
在欧洲大教堂的建设设计上,不同时期、不同建筑师的风格均存在差异,更甚者,后来还加入了个性化的设计元素。例如,美剧《硅谷第五季》你看到设计字体的某某设计师,将自己的署名刻在他为“互利”设计的字体作品上。
对于计算机系统而言,绝大数系统体现出的概念差异和不一致性远远超过了欧洲大教堂。这通常并不是因为它由不同时代的设计师们开发,而是由于设计被分成了若干人完成的若干任务。
那么,让每位设计师独立的完成会有什么问题呢?
在系统设计中,概念完整性是需要给予重要性考虑的因素。为了反映一系列连贯的设计思路,宁可省略一些不规则的特性和改进,也不提倡独立和无法整合的系统,哪怕他们其实包含着许多好的设计。
获取概念完整性
编程的目的是使计算机更加容易使用。虽然计算机为此装备了语言和各种工具,但是使用这些工具是有代价的:会造成用户很难进行选择,并且用户要记住太多的选项和格式。
只有当这些功能说明节约下来的时间,比花费在学习、记忆和搜索手册上的时间要多时,易用性才会得到提高。现代编程系统节省的时间的确超过了花费的时间,但是近年来,随着越来越多复杂功能的添加,节省和花费的比率正在逐渐减小。
由于目标是易用性,功能与理解上复杂程度的比值才是系统设计的最终测试标准。单是功能本身或者简洁都无法成为一个好的设计评判标准。可是你一定常常见到,这样的标准过去一直被用来作为衡量设计人员工作的出色程度。
要表达意见待完成的事情,常常需要对基本元素进行意料不到的复杂组合。而且,仅仅了解基本要素和组合规则还不够,还需要学习惯用的用法,以及在实际工作中如何进行组合。简洁和直白来自概念的完整性。每个部分必须反映相同的原理需求的一致平衡。语法上,每个部分应使用相同的技巧,语义上,应具有同样的相似性。
因此,易用性实际上需要设计的一致性和概念上的完整性。
贵族专制统治和民主政治
首先,我们先来了解一下什么是“系统体系结构”。
系统的体系结构指的是完整和详细的用户接口说明。对于计算机,它是编程手册;对于编译器,它是语言手册;对于控制程序,它是语言和函数调用手册;对于整个系统,它是用户要完成自己全部所需参考的手册的集合。因此,系统的架构师,犹如建筑设计师,是用户的代言人。架构师的工作,是运用专业技术知识来支持用户的真正利益,而不是维护销售人员、制作者所鼓吹的利益。
但是,你要注意,体系结构必须同具体的实现区分开来。体系结构陈述的是发生了什么,而实现描述的是如何实现。就像一盘时钟,它额结构包括表盘、指针、发条按钮等等。当小孩知道了时钟的外表结构,他能很容易地从手表或教堂上的时钟辨认时间。而时钟的实现,描述了表壳中的事物,如动力、精度控制。
但是,你可能也会认为架构师是贵族,他们通过指定制度来告诉你该怎样工作。可是,是否所有的创造性活动都被这些精英单独占有,而实现人员当当只是机器中的齿轮?我的观点很简单,我不会认为只有架构师才有好的创意。新的概念经常来自实现人员或用户。但是,你必须考虑到如果出现很多非常重要但不兼容的构想,就应该抛弃原来的设计,对不同基本概念进行合并,在合并后的系统上重新开始。
而架构师是否是专制的呢?
如果回答“是”呢?如果你想让系统达成概念上的完整性,你必须回答是。因为需要有人来控制这些概念。架构师长期处在解决用户问题上,实现用户的核心地位。所以,有时候我们可以把这种肯定的看法认为是一种善意的专制。
其实,无论回答是与否,纪律和规则是对行业有益的。记住,“没有规矩,不成方圆”。