这是人月神话:软体专案管理之道(20周年纪念版)的第四章:专制、民主与系统设计,在The Introduction of The Surgical Team有提到概念整体性的问题,文章之前展示兰斯主教座堂跟其他教堂的不同处,来说明系统设计应该保有概念整体性(conceptual integrity)。
达成概念整体性
‘只有当功能增强所节省下来的时间超过学习、记忆和查阅手册所耗费的时间,电脑的使用便利性(ease of use)才会提升,以现代软体工程来说,这方面的确是获益大于所付出的成本,但最近几年,似乎是复杂的功能越加越多,而获益成本比(ratio of gain to cost)却随之越低。’这真的是如此,电子产品功能太多不见得是好事,我妹的朋友就因此把新买的HTC手机让给我用,因为他连电脑都不太会用,导致他买了智慧型手机之后,竟然不会用,有时人会为赶流行买下新奇的东西,但是如果不够便利使用的话,很快地在垃圾桶中找到它。
‘由于目的是使用便利性,所以功能概念复杂度比(ratio of function to conceptual complexity)才是系统设计的最终测试标准,好的设计既不可单独偏重功能性,也不可偏重简单性。’
这个功能概念复杂度比术语看起来就很复杂,我不知是否有计算公式可以计算,但是正如作者说的,就是要兼顾功能性、便利性、简单性(simplicity),所以简单地讲就是要直接(straightforwardness),就像我从我妹朋友拿来这只HTC Touch Diamond来说好了,它的外观很炫很酷,操作也很像Windows,就手机的功能使用来说也很多,可以就简单性来说,我觉得比不上Nokia的,使用也不够直接,常常一个功能不知到哪找,害我去日本还不能导航,迷路浪费了不少时间,真是令人呕!
专制与民主
‘要达成概念整体性,换句话说,这意味设计必须出自于一个人的想法,或是极少数人的一致决定。
然而,时程的压力却迫使系统的开发工作必须由更多人来一起合作,有两个技术可以用来解决这两难的问题。第一个是小心地把工作切分成架构(architecture)与实作(implementation)两部份,第二个就是上一章所提到的外科手术团队。…这里的架构指的是使用者介面完整而详细的规格。…实作是讲如何具体实现(realization)’,比如最近我接了一个案子,一个部门的主管要我将别的部门的交接簿拿来用,请我帮他做,但是我因为另一个部门的伺服器环境的不同,不想照抄他的程式码,而且我也不想破坏这个主管原有的习惯性,所以我照抄他的架构,也就是介面的部份,但是我在实作时,已经把他把所有的程式语言都改掉了,但是使用者却感觉不出差异来,接着我就可以继续扩展我的程式功能,如此我才可以继续在这一家公司待下去。
这里所说的专制与民主,就好像架构与实作,看起来好像要专制一点,而架构因此看起来就比较重要,所以相形之下架构设计师好像比较伟大,但是作者还是有反驳,说‘实作上的设计工作跟制定外部规格(external specification)相比,不见得就是没有创意的工作,只是发挥创意的类型不同罢了’,看到让ㄚ琪好像稍微宽心一点了,看起来还是有挥洒的空间。而且实际上,‘产品的成本效能比(cost-performance ratio)是非常仰赖实作人员才能够提升的,这跟使用便利性得仰赖架构设计师的道理一样的。’
约束对艺术而言是件好事 (discipline is good for art)这个不知是哪里的典故,但是dejavu这样说‘当我们常常在抱怨,生活有太多的限制,使我们无法充分的发挥专长时,是否有想过。出名的艺术家,总是在严苛的环境中,制作了永垂不朽的名作。过去的我曾经天真的以为,不朽的生命可以为世界带来进步。但慢慢地,我体悟到,一个人的成就不在于生命的长短。反而容易因为生命的无止尽,使得我们终日怠惰、荒废。印象中曾经有一个(或许不止一个)漫画家,将未来(人类拥有几乎无止尽的生命)描绘成一个地狱,因为生命可以随意制造,所以人类再也不尊重生命了。 ’这样子的想法对比于‘形式就是解放(form is liberating)’,看起来也是对比的,善与恶、对与错、黑与白这种对比的概念,一定让人很头痛,就连孔子讲得中庸,我看就更难了,所以怎样拿捏,我看到这里,还没搞清楚,所以就继续看吧!
在架构完成之前,实作人员要做些什么?
看起来好像没事可做,因为如果架构没有先完成,由实作人员来先做专案那么会发生很多灾难,虽然实作人员一定会有反对的理由,因为这样会少赚很多薪水,但是这些理由,作者都一一地解释并不成为问题,另外实作人员也不用怕没事做,其实事情还是很多的,要怎么做,就端赖领导者的能力吧。
最后作者做这样的结论,‘要达成概念整体性,真的是有赖于让系统反映出单一的理念,使用者介面的规格必须出于少数人的构想。虽然将人力切分为架构设计、实作和实现三部份,但并不意味这么做就会花掉更多的时间,由经验可知刚好相反,整个系统的设计不但进行更快,而且花在测试的时间会比较少。效果是,垂直分工将大幅减轻水平分工所产生的负担,其结果也将大幅简化沟通,并且增进概念整体性。’