这是人月神话:软体专案管理之道(20周年纪念版)的第十九章:《人月神话》二十年(The Mythical Man-Month after 20 Years),这一本书真的很旧了,但是作者一直要表达的是这里头的概念还是可用的。

但是开场白‘I know no way of judging the future but by the past.- PATRICK HENRY(除了根据过去的经验,我不知道还有什么方法能够预测未来)
You can never plan the future by the past.- EDMUND BURKE(你永远无法凭过去的经验来计划未来)’,所以呢?过去经验不能够预测未来,但是人们又不得不用过去经验来预测未来,这结果有时很顺利,有时我们只能谢天了,有时可能得要怨天,真是世事难料。

这本书的中心理念:概念整体性(conceptual integrity)与架构设计师(architect)

概念整体性  ‘一个井然有序、优雅的软体产品所展现给每一位使用者的,无论是在应用上、在执行这项应用的策略上、在使用者介面指定动作和参数的手法上,都必须是前后连惯的一套心智模式(mental model)。’

架构设计师  ‘将某些不可分割的智能创作交付给产品的架构设计师来完成,产品在任何方面,只要是使用者能感受得到的,都是由他来负责概念上的整体性。’

将架构独立于实作(implementation)和实现(realization)之外

架构设计师工作的再细分

今天我比以往更加坚信不移

第二系统效应:过度设计与频率猜测

为广大的使用者群来进行设计

功能过度膨胀  里头讲到了Word 6.0的速度缓慢,这是事实,但是微软为什么还一直开发Windows 7还不终止,还要继续开发下一代?为什么Office 到了2011年之后,搞不好还有下一代喔,这功能是不是过度膨胀了?

定义使用者群   调查需求似乎是一门科学了,在这里有强烈感觉。

频率  这里头作者看起来倾向于猜测的使用,但是也提到了Jeff Conklin发展的gIBIS,ㄚ琪索性就查了一下gIBIS(graphical Issue Based Information System),中文译作议题导向的资讯系统,它是指一个特定应用
的超文件系统(application-specific hypertext system),它通常会被使用在大型而且复杂的问题讨论上,并且支援团体或小组的互相沟通。看起来是透过沟通的管道在针对问题做解决,我并不清楚这个的应用,但是作者说那是非常有用的,不过还是强调‘错误而明确,也远比模糊不清要好’,看来错也要错得有理才是。

另外The Introduction of The Second-System Effect里有提到第二系统效应,有位学生也提到The Introduction of Plan to Throw One Away里的第二个版本,中文的感觉不会是一样的,但是在英文原文里,可能是一样,所以导致有这个问题的提出,我只能说这个学生看得很认真,作者也承认他很会唬烂。

WIMP介面的成功

所谓的WIMP就是视窗(Windows)、图示(Icon)、选单(Menu)、点选(Pointing)介面,苹果麦金塔是最先实现这个概念的。

透过隐喻来达成概念整体性

命令的表达与双游标的问题

一个卓越的解决方案

进阶使用方式与便利性

逐步从新手转换到进阶使用者

成功地把直接融入当做是强化架构的策略

WIMP的命运:终将落伍   呵呵,这么早就在预言这件事了,但是不知微软为何到现在还一直在升级中?

不要建构出必然失败的系统 — 瀑布模型是错的!

The Introduction of Plan to Throw One Away这一章似乎在现代不怎么适合研读,亏ㄚ琪还花了这么多的时间去读,作者说明这里头用到一个错误的假设,瀑布模型,因为这个模型的根本错误,‘就是假设专案只会从头到尾将过程流过一遍,架构很棒、很好用,实作的设计很正确,而实现阶段的错误也都可以在进行测试的时候加以修正。’这里头错就错在错误是发生在实现阶段,这与实际的状况不符。

2011-05-26_163429

第二个错误,‘就是假设人们可以一次件够出整个系统,能在所有的实作设计、大部分的程式编写、许多的模组测试都完成之后,结合所有的程式片段来进行整合性的系统测试。’

逆流而上是必须的  听这一句话似乎简单,但是相对的也代表要辛苦去做,刻苦铭心的体验是必须的,这时候你还想偷懒吗?看起来要翘脚看报纸是不可能的。

较佳的渐进式开发模型 — 逐步细分精制

建构出首尾相连的骨干系统

Parnas的家族系列产品概念

微软的“每晚重新编译”方案   这不就跟约耳的Knowledge Gained by Daily Builds Are Your Friend,不知道约耳的这个习惯是否来自微软,不过感觉好像。

渐进式开发与快速原型制作  里头提到一种绿野仙踪(Wizard of Oz experiment),看起来是满有趣的,有空再来深入。

关于资讯隐藏,我错,Parnas才对

这在The Introduction of Propositions of the Mythical Man-Month: True or False?已经有分享过,不过这里作者再次强调‘当今惯常以物件导向程式设计(object-oriented programming)来落实的资讯隐藏是提升软体设计层次的唯一方法。’所以我想是由赞同Harlan Mills的主张转向Parnas吧,而Parnas的模组资讯隐藏可说是物件导向程式设计理念的鼻祖。另外一些思想家把Parnas的模组改良成抽象资料型别(abstract data type),以此衍生出多物件。还有就是具威力的继承(inheritance)观念。物件导向程式设计已经在The Introduction of No Silver Bullet – Essence and Accident in Software EngineeringThe Introduction of “No Silver Bullet”Refired分享过,各位可以再看看。

人月有多么像神话?Boehm提出的模型和数据

作者用Barry Boehm的著作Software Engineering Economics来扎实地证实《人月神话》的主张,亦即人力与工时之间的取舍根本不是线性的关系,这里有从维基引用来的资料:

T = k * (SLOC)(1 + x)

For a single software developer, k can be factored out by using more than 1 SLOC data point. In this case, x can be a fraction like 0.1 or 0.25.

  • Note: since man-years are not interchangeable with years, Brooks’ Law applie
    s:

    • Adding programmers to a late project makes it later.
    • Thus this formula is best applied to stable software development teams which have completed multiple projects.

维基里面竟然还有Brooks的定律,哇!

难怪作者再次强调,Brooks定律有多准确?在Abdel-Hamid和Madnick的《Software Project Dynamics: An Integrated Approach》提到Brooks的定律,看来很多人已经把Brooks定律神化了。

Stutzke也有一套简单的模型来印证这个定律。

人就是一切(好吧!几乎是一切)

同意,没意见。

用人的智慧  作者在这里推荐这本书Peopleware: 脑力密集产业的人才管理之道 Peopleware: Productive Projects and Teams, 2nd ed.这一系列的文章分享请见Peopleware: Productive Projects and Teams

专案转移  由作者的经验来看,很少有成功的。

放弃权力的威力

Small Is Beautiful: Economics As If People Mattered

另外这一本Small Is Beautiful: Economics As If People Mattered提出一个组织企业的理论,可以让劳工激发出最多的创意和乐趣,这到是很令人向往去看不是吗?希望有中译本的。

在教宗碧岳十一世的《四十年》通论(Encyclical Quadragesimo Anno)中提到的“辅助功能原则”,看起来小企业有它可以生存的地方,虽然作者也在观察这些被大企业并购的小企业的后续情形,但是我们确实看到很多这样的企业模式在我们的周遭中,而台湾有名的中小企业模式,还会有吗?我很期待…

最大的惊奇是什么?电脑大量普及

微电脑革命改变了每个人使用电脑的方式   过去可能还提到老人加布会用电脑,但是现在ㄚ琪知道的连九十多岁的老人家也会用电脑了,真是令人惊讶。有了电脑很多的创作都大大地改变了,这种创意真的是多到无法细述。

微电脑革命改变了每个人开发软体的方式  WIMP的介面模式真的是一个大影响。

全新的软体产业 – 套装软体

传统软体产业: 

电脑供应商
应用软体使用者
客制化应用软体的开发者
商业套装软体的开发者

套装软体产业

外购与自制 — 套装软体组件

中介程式设计   ‘开发Hypercard stack、Excel范本或MiniCad这类的函式,有时称为中介程式设计(metaprogramming),也就是为套装软体的某一小部份特定的顾客群而新打造出来的一层量身定做的函式。’真没想到ㄚ琪一直没有介入的市场,竟然在这里会被提到,看起来有需要在这个地方成长了,特别是如果要在一般使用套装软体的企业,像是用微软的软体,有了这个专长,真的是可以为以后的工作加分不少。

这才是真正切入本质的行动

所以,需要的是什么?   确认出四个阶层的套装软体使用者:

  • 一般使用者
    中介程式设计师
    外部通能创作者,这个倒是很像ㄚ琪目前的工作形式,这里面有些技术我还没听过,像是拦截命令(intercepted command)、回呼函式(callback)、多载函式(overloaded function)等等。
  • 也是中介程式设计师,运用一个或特别几个应用软体,以之作为更大型系统里的组件,或许以后会有这一类工作的需求。
  • 软体工程的现况与未来

  • 这里头作者把化学工程跟软体工程做比喻,很有趣或许可以拿来做下一步软体工程的预测,但前提你可能得对化学工程了解才行。

  • 这一章很像是多年之后再次review的著作,所以很长,有些ㄚ琪也无法一一详述或了解的,但是总是有些受用真是不错。

  • 在后记里,ㄚ琪一定要引用这一句‘人类的所为其实很渺小,一切都源自于上帝赐予人们充实精神粮食的权利,因而为了狂热,每个人拥有乐于追求的自由,我满心感激’,真的是让人感动,Brooks的谦卑,以及真正了解这所有的一切来自与神,最近又为了赎罪与悔改的能力扩大,我不禁喜悦,这真的很美好。