总把新桃换旧符
——写在《最后期限》出版之前
上个星期,《最后期限》的编辑给我一个电话,告诉我这本书在本周内就会生产出来了,让我颇感欣慰。从8月以来,心情一直不好,在上海与CSDN网友见面之后也没有什么特别值得高兴的事情,几个月火气都很大,常常在网上网下跟人吵架。最近北京的雪很漂亮,Adams的《人月神话》读得心旷神怡,我的书终于快要出版。在圣诞节之前,心情有了一点亮起来的理由。这篇文章是早就酝酿要写的,直到今天,终于有了一点感觉要写出来。
既然《最后期限》很快就要出版,就先从这本书开始说起吧。总体来说,《最后期限》是一个有趣的故事。因为有趣,所以它可以帮助读者杀时间。但是,除了杀时间之外,能不能对读者的工作有所帮助,我就不敢断定了。对于一本小说,本来也不应该对它有太多的期望;但抱着“没有期望”的心态去读一本小说,或许就有了收获也未可知。
是的,作为读者,你不能(也不该)希望一本小说能对你的工作有多大帮助。你很有可能遇到像卡布福斯那样不知天高地厚的培训讲师,也很可能遇到像贝洛克这样可恶的上司,如果运气好的话还能遇到像“元首”这样英明的老板。不过,当你的项目面临最后期限的挑战时,你无法希望会有那么多优秀的顾问来帮你——这种事情只会发生在小说里。
总之,整本《最后期限》透着一种令人愉悦的快乐氛围。问题尽管很麻烦,总能一个一个地被解决;坏人尽管很嚣张,终于还是被赶走了;最后期限实在太紧迫,但和汤姆·克鲁斯一样,“不可能的任务”最后还是顺利完成了。还有,尽管被工作累得晕头转向,男主角最后还是能抱得美人归。但是,这种快乐的气氛往往会给读者一种不切实际的幻想,让他们以为小说中的故事也能发生在自己身上。如果半年后有读者来骂这本书的话,我猜他一定是因为南柯一梦醒来之后觉得落寞。
Tom DeMarco似乎总有一脸和蔼的笑容,配上银白的头发,形象很不错,就像《最后期限》一样能令人心情舒畅。但是,作为第一代的软件科学家,他写作的态度难免让不明就里的人心里犯嘀咕。《最后期限》这样似是而非的作品不用说,还有那本被称为“无产者的呓语”的Slack,就连最著名的《人件》也透着一种过度乐观和“加料过火的呆伯特式的幽默”。Jacques Lebrun的批评一针见血:
如果你恰好处于作者们设想的位置,并也走在相应的方向上,作为一个殷勤的侍者,它(指《人件》这本书)会为你打开一扇特定的门。但似乎不应指望,它能领你一路回家。[1]
如果有可能的话,在一个星期之内读《人月神话》和《最后期限》这两本书,绝对是一个绝妙的阅读体验。你能看到
Brooks和DeMarco在几乎相同的知识背景下得到的两种截然不同的态度:“人月是神话、银弹无处求”的悲观,和“逢山开路、遇水架桥”的乐观。如果读者再带着项目的紧迫压力希望在这些武林秘籍中找到一些灵丹妙药,被这一阴一阳的两股内力搅和搅和,怕是脑子会被弄晕掉。
或者,你可以把这两本书看成是对“软件的科学”的两种哲学思辩——假如软件工程中的确有科学成分的话。1978年,Tom DeMarco那本名字大得吓死人的书——Structured Analysis and System Specification——出版,看得出当时他对结构化方法和软件工程是很有信心的。但是,当软件从军队、政府广泛地转向民用之后,情况越来越多地转向了《人月神话》所指的方向:软件工程可以解决(很少的)一些问题;某些问题似乎永远都无法解决。于是,
Brooks更加坚定了自己的观点,并相继推出了《没有银弹》和《再论没有银弹》两篇文章,确立了自己的主张:在一个相当小的范围内,软件工程有效;对于相当大的其他范围,软件工程是否有效尚属未知;并且总有些问题无法用软件工程的方法解决,即“没有银弹”。
Brooks的论述,可算是第一次明确地为软件工程科学(假如软件工程的确是科学的话)划界,而不再期望软件工程能够解决一切问题。所以,这种态度可以被称为“科学的悲观”。
而在划界完成之后,DeMarco似乎变得更加乐观了。1995年,他推出了Why Does Software Cost So Much这本书;1997年,《最后期限》;1999年,《人件》;2002年,Slack。从这几本书中,可以看到他的思维已经完全转到了软件工程科学之外的范畴。用他自己的话来概括就是:
优质管理的四大要素:
l 选择正确的人。
l 为他们分配正确的工作。
l 保持他们得到激励。
l 帮助团队凝聚起来并保持凝聚力。[2]
很明显,DeMarco此时所关注的问题是:在系统的、可重复的过程之外,重视对人的关怀,并期望这类“自由”的管理方式能够解决一些问题,从而发现其中的科学原理。对于无法用软件工程的方法解决的问题,他回归到软件开发的最初形态——依靠个人的才华获得成功。这种探索,即使有一定的成果,也无法形成对别人的指导,但毕竟是一种有益的、对于软件哲学的探索。
从事这方面探索的,不仅仅是Tom DeMarco。Pete McBreen在他的Software Craftsmanship中也回归到工业革命之前的手工业时代,一改沿用多年的“工程”的比喻,而改用“工艺”来比喻软件开发,并提出了一整套发展软件工艺的办法。承认科学的范畴狭窄、承认科学并非万能之后,人们开始向科学之外的领域做大胆而谨慎的探索,并且保持冷静的乐观态度,不再把哲学的领悟妄自纳入科学范畴。这是对于科学和哲学的发展都有利的态度。自然科学的大发展,是从消除了“科学”二字头顶的光环之后开始的。软件科学如果能够有发展,必定是在消除了“软件工程能够解决一切问题”的幻想之后。
所以,当你捧起《最后期限》、《人件》、Slack或者Software Craftsmanship这样一本书的时候,实在不应该期望它能够对你的项目有所帮助。达尔文的进化论作为一种形而上学指导时,能够让人对自然产生一种敬畏;但若把它当作一种科学理论抄起来随手乱舞,祸害也是无穷。对于形而上学的探索,读者只能期望它能够激起自己心灵的共鸣,而无法对它有现实的要求。或者可以换个角度来说:当你抛开现实的问题,忘记世俗的压力,用快乐的欣赏眼光去阅读它们时,它们或许能给你一些意想不到的收获。
到此,我想你也应该能对出版社的一些“不实宣传”表示谅解了。没有人能告诉你“这本书不好”或者别的什么东西,因为好与不好本来只是一个唯心的评判。而且,不能分清科学和非科学的人总是那么多,所以至今还有人认为熟读《射雕》就能学会降龙十八掌。作为腰包里钞票的主人,在希望别人帮助你之前,先给自己一双明亮的眼睛,然后给那些理智的乐观者和并不那么理智的乐观者一个宽容的微笑吧。
很快就要过年了。明年的软件工程该换上哪张符,我也不敢妄言。对于那些披上科学外衣的伪科学和那些戴上真理光环的废话,我仍然将给它最严厉的批驳。与此同时,也许我也会去看看那些“软件的哲学”。不过,在此之前,仍然保持着冷静的乐观态度,祝所有人新年快乐吧。
(抱着这样“无所求”的心情和快乐的欣赏眼光,圣诞夜去看了《英雄》,倒也觉得满愉快。虽然张艺谋仍然不懂如何拍出一部让人想看第二遍的电影,但在圣诞夜和三五好友一起花三个小时吃饭看电影,本身就是一件让我开心的事情了。)
透明
2002年12月26日
北京
[1] Jacques Lebrun,《人的问题:关于Peopleware》,《程序员》杂志2002第12期。
[2] Tom DeMarco,《最后期限》,清华大学出版社2002年12月。