
28年前,软件业江山甫定,旧弊流毒。久战疆场的技术官僚Brooks博士的举动着实让同行惊讶不已,那的确是一个颇具“形而上学”的意味之举——着手清理困扰软件业的“观念”的门户,把人们从“人月神话”(the Mythical Mab-month)的迷雾中唤醒;只是,这一事件未曾被抒发为科学里程碑式的狂喜尖叫。28年以来,软件业也并没有因为“人月神话”迷雾的散去而步出梦魇般的“焦油坑”(The Tar Pit),无论对于IBM还是对于Microsoft所开发的大型项目无不陷入这个焦油坑之中。 Brooks对于“人月神话”的诘难,在无意之间使经济学家们遭遇了难题:或许对于传统的大型工程而言,最有效的是采用人数以及时间来线性归纳工程开发时的进度,加入足够的人手可以缩短开发进度。作为大型软件项目管理的实践大师,Brooks认为,鉴于软件编程的纯思维的活动属性,人与月不能在软件工程项目中得到转换,并且向落后的项目添加人手会得到相反的效果;在软件开发的过程中,程序员之间的交流尤为重要,这就像造“巴比伦塔”那样,人手的增加,同时也增加了交流的成本,最终导致“塔”的倒掉。“用人月作为衡量一项工作的规模是一个危险和带有欺骗性的神话。” 今天的青年程序员们,往往不敢设想30岁以后的日子,这个行业似乎只属于有明确年龄刻度的年轻人;30多岁的程序员们则试着像Brooks那样去做项目管理,可是时间来不及给他们留下更多的经验。Brooks在世界软件业获得的尊重,还在于他那经典性的经验。在驱走“人月神话”阴霾之后,“形而上”的刀光也随之一闪而过,细密、实用的“Brooks 准则”夺门而入。对于那些思维惯于跳跃在“开与合”、“真与假”之间的程序员们来说,任何不着边际的喋喋不休是极其愚蠢与幼稚的。的确,28年前的那本《人月神话》已经成为程序员心目中的“神品”。据说,在印度,此书是有志于投身软件业青年的必读手册,这也成为了印度软件业领先于中国软件业的细节性成因之一。 继1975年击碎“人月神话”之后,Brooks在1986年发表了那篇极具煽动性的论文《没有银弹》(No Silver Bullet: Essence and Accidents of Software Engineering),其中的观点曾倍受争议:没有任何一种单纯的技术或管理上的进步,能够独立地承诺在十年内大幅度地提高生产率、可靠性和简洁性。到1996年时,Brooks又从容地赢了这一局,而现在是2002年,Brooks的预言的效力还在持续。 除了像Brooks这样的现场大师以外,软件业从来就不缺乏另外意义上的两类人物:心怀高尚的伯纳斯·李与市侩商人比尔·盖茨。前者作为万维网(World Wide Web)的发明人,放弃了专利权的申请,埋名于草野之间,继续他的高尚研究。可是,在日后重新书写软件业发展历史之时,精明的比尔·盖茨与他背后的Microsoft可能更会被更多地提起。伯纳斯·李很可能是软件业历史中的的一个绝响,即使是令无数埋名才俊狂热的“开放源代码运动”,其原始起因也不过是Microsoftt的商业对头出于对抗Microsoft所使出的“怪招”。商业运做与利益驱动的方式会最为有效地保护一个行业的前行,任何对此的偏激指责,都是会显得那么稚嫩,于事无补。 软件学科是商业奶大的时代宠儿,不同于传统的庄严学科,它的成长历史就是一部商业驱动的历史。它所完成的每一步跨越都暗含了商业需求的呼声,软件学从诞生的那一天起就充满了商业的“铜臭”,它拒绝一切看上去不是那么立竿见影的、非实用性的反思--作为一门学科,它缺乏常规的学科反思研究机制,缺乏以学科本身为对象的元研究,这是一般科学形态的基本要素。Brooks所谓“没有银弹”的烦恼只不过是这种本源性缺乏的饥饿表症罢了。 如果庸俗地套用波普尔的“证伪”理论,你会发现,当今的软件业在不断地解决着错误的问题,只是这样毫不停歇的“证伪”并没有带来软件学科的进化。而且,在软件从业人员看来,“解决错误问题”(Solving the wrong problem)实在是软件业不愿背负的一个恶名。程序编写行为的发生、解决方案的形成,是以具体的需求(对象)为面向的。然而,面向需求所生成的错误的解决方案,最终成为程序员必须解决的错误问题;在这里,那些实用的“Brooks 准则”固然能使解决方案的确定少走弯路,同时更具前瞻性,但是这并不能为软件工程的管理带来根本性的优化提高,软件学科自身的方法论元研究的贫穷似乎还没有引起人们更多的关注!正如软件工程一代宗师Michael Jackson所指出的那样,“软件从业人员和方法学大师们只是简单地模仿和照搬其他学科的方法,却将最重要的方面--问题域--给忽略了。” 面向对象(Object-Oriented)的编程思想正在扮演后“人月神话”时代的神话新贵,Brooks把它喻为一颗“铜弹”。人们对于OO的狂热信奉,似乎在说明,由面向过程到面向对象的转换是编程思想“范式”(paradigm)革命的划时代事件,只是这种范式的“革命”并未给整个软件业带来大的改观。
|