The Introduction of The Second-System Effect

这是人月神话:软体专案管理之道(20周年纪念版)的第五章:第二系统效应,这一章有个开场白:‘加一点点,加一点点,最后变成一大坨。’,隔页有个注解说这是‘聚沙成塔,滴水成河’,但是我看到‘坨’并没有很好的感觉说,所以用来比做聚沙成塔之类的谚语好像也并不怎么洽当,好了,废话少说了!

前面几章一直在讨论架构与实作的问题,这一章还是继续在这个方面讨论,主题就是‘有什么规范可以避免架构设计师的创造热情过了头?’,从两个方面来规范,第一,与实作人员互动的规范,这里有一个比喻,就是盖房子的建筑师与成包商的关系跟架构设计师与实作人员的关系很类似,我就直接引用书中的要点,作为要让系统成功的关键:

  • 记住实作人员有发挥创意完成实作的责任,所以架构设计师只能建议,不能命令。
    在建议时,永远只提出一个能够符合规格的实作方式,同时也接受其他能够达到目标的方案。
    默默地,私底下提出建议。
    准备为提出的建议付出丧失信任的代价。

第二,就是自律–第二系统效应,也就是本章的主题,这里讨论到架构设计师设计的第一个系统跟第二个系统两者之间,差异最大的就是,第一个系统总是创意非常节制的,而第二个系统则是创意最多,但也最危险的一个系统,喔,我终于了解了,如果照生小孩来看,老大看起来总是最能完成交代生儿育女的第一责任,如果继续有了老二,我总感觉老二,真的很危险,像我妹就有点这样的迹象,至于老三、老四…,我想就已经不是那么重要了,所以过度设计的现象会发生,这时我们会看到一大坨的恶心感觉吧!

这边用很多失败的例子来讨论,IBM 704IBM 709,还有一堆设计1410-7010磁碟作业系统、Stretch作业系统、Project Mercury即时系统、给7090用的IBSYS作业系统的人员共同开发这个第二系统-OS/360,这个系统被举了几个例子,让我们可以印象深刻地觉得这是第二系统,从连结编辑器(linkage editor)、TESTRAN除错工具、不需重新编译的整批除错的落伍概念以及排程器(scheduler)。

说了这么多的历史案例,你可以像听魏征建议那样的采用作者的建议吗?一个源自于教会很早就有的理念-自律(self-discipline)是很重要的,而这又得让我们学习避免贪欲,懂得节制,看来不是这么简单,在这里你‘可以提醒自己避免设计出不相干的功能,或是做出违反原先假设与目的的功能’。想想永生的目的,我们就可以设计出我们简单的生活方式,这一句真的是今天所学到的一个重要原则啊!

好了,对架构设计师给个规范,‘为每一项小功能赋予价值(value):功能x要值回票价的话,所耗用的记忆体至少要小于m位元组,且耗用的时间至少要小于n微秒。’

另一个给专案经理的规范就是‘坚持采用具有至少两个以上的系统设计经验的架构设计老手,对一些特别的诱惑保持清醒,也可以藉由询问自己一些适当的问题,来确保正确的概念与目标以贯彻到设计的细节之中。’

终于让我可以在一般的书籍中体会到学习永生的理念,原来系统也是要这样做,确认目的,避免大而无当的功能,方为高招!