作者前言
1986 年,在替小公司担任顾问工作十年后,我特地跑到微软公司工作,以取得写作麦金塔应用程序的经验。我加入了微软的 Excel 团队,负责开发这家公司的图形电子表格应用程序。
我不确定之前我预料程序会长什么样子-迷人的或优雅的,我以为。结果我看到的是很普通的程序代码,就像天天看到的那种,跟我以前见过的没什么太大的不同。当然,这套电子表格有个神奇的使用者接口-比起当时任何其它文字模式的电子表格来说,要来得直觉好用多了。但是更让我印象深刻的,是这套产品里头内建的扩充性除错系统。
系统本身碰到错误时会自动警告程序员跟测试者,跟波音七四七客机驾驶舱碰到故障时警告飞行员的警告灯号大同小异-这个除错系统与其说是用来测试系统的,不如说是用来监督系统运作的。这套除错系统没什么新观念,可是这套系统使用的程度与它侦测错误的效率还是给了我很大的冲击──而且在程序员间对程序出错的来龙去脉有着显著的警觉性。
在我去帮助微软其它写出愈来愈多程序臭虫的小组之前,我在麦金塔版的 Excel 部门待了两年。我发现在我专心投住于 Excel 工作的这两年里,微软公司的大小已经扩大了三倍,而在公司快速成长时加入的新开发小组的成员们并不知道许多在老程序员间广为流通的程序写作观念。对于易于出错的程序写作方式,新程序员们不再拥有显著的感触,而认为那是稀松平常的事-那也是我在加入微软之前的那些年里在其它程序写作者间看到的态度。
在我加入其它小组六个月后,我对一伙程序员谈起,应该要有人把写出零错误程序的观念纪录起来,这样才能让新成立的小组了解这些道理。其它程序员看着我,然后说, " 你看来不介意作这件事;为何不就由你来写下这些东西呢?事实上,为何你不把它写成一本书,看看微软的出版部门愿不愿意出这本书呢?再说,这些信息没有半点是我们自己的东西;这样的东西只会让程序写作者更能察觉问题的存在。 "
对这些意见,我没考虑太多,主要是我当时没时间,而且我没写过书-我最多只在 1980 年代的 Hi-Res 杂志上跟人合写过一个程序设计专栏而已,这跟写书并不能相提并论。
不过如你所见,这本书写出来了,而且理由很简单: 1989 年,微软公司取消了一套未公开的产品,只因为满天乱飞的程序臭虫。现在,臭虫满天飞早就不稀奇了-微软公司的几个竞争者也因为臭虫而取消过产品计划。不过这还是微软公司第一次因为这个理由取消推出一个产品,而且这也是一连串臭虫横行的产品中最新的一个,管理阶级终于讲话了, " 够了! " ,它们采取了一系列行动让程序错误发生率回到原先的水准。不过,还是没人负责将这些行动的细节与概念写出来。
那时候,这家公司已经比我刚进去时要大九倍了,而我实在看不出来,如果没有明文规范,公司内的程序写法怎么让程序问题出现率回到当初的水准,尤其当我考虑到写 Windows 跟麦金塔应用程序那渐增的复杂性时。所以,最后我终于决定了,把这本书写出来。微软的出版部门 Microsoft PRess 同意出版这本书。然后这本书就在你眼前了。
我希望你能看这本书来获得乐趣,我已经试着让它既有内容又有趣啰。
感谢词
谢谢 Microsoft Press 帮我完成这本书的各位同仁,特别是从头到尾支持我的那两位。首先我想谢谢 Mike Halvorson ,我的编辑,让我将这项计划以自己的速度进行,并耐心回答我这个第一次写书的人许多问题。我要特别谢谢 Erin O'Connor ,我的打字编辑,给了我这些篇章的早期回馈意见,如果没有他的帮忙,这本书就不会出现了。 Erin 也鼓励我用自己的方式放松心情,当然她对文字中的小笑话的嘲笑也就无伤大雅了。 Jeff Carey 好好校对过了我的构想跟程序代码,而 Kathleen Atkins 给了许多好意见。
我也要感谢我的父亲, Joseph Maguire ,在 1970 年代中期带我见识了第一批微电脑: Atlair , IMSAI 跟 Sol-20. 他对我踏入这个行业有最大的影响。 Evan Rosen ,我从 1981 年到 1983 年在 Valpar International 工作的伙伴,对我有很大的影响,而他的知识与见解也出现在本书中。 Paul Davis ,我过去十年在全国东奔稀跑进行的各项计划里乐于共同合作的工作伙伴,也在显著的地方对我的思想起了定形的影响。
我想感谢那些花时间读过本书草稿,并给了技术性意见的人们: Mark Gerber , Melissa Glerum , Chris Mason , Dave Moore , John Rae-Grant 和 Alex Tilles. 我特别要感谢 Eric Schlegel 与 Paul Davis ,他们不只检阅过本书草稿,之前还帮我敲定了本书的细节。
1992 年十月二十二日,于华盛顿州,西雅图