第1章代码勇士 代码勇士第1章戴夫·卡特勒(Dave Cutler)是在逆境中长大的。他很小的时候就学会了照顾自己,坚持己见,以及如何寻找方法跨过前进道路上的障碍。 戴夫(Dave)是David的昵称。--译者注他1942年3月13日出生于密歇根州首府兰辛。兰辛是一座汽车城,许多生产汽车以及汽车零件的制造商都在这里安家。卡特勒的父亲叫尼尔(Neil),他几乎一生都在兰辛的奥斯莫比(Oldsmobile)工厂工作,先是在工厂的运输部门工作,后来成为工厂的看门人。 尼尔·卡特勒是一个聪明而且严谨的人,不过他很安静而且没有什么野心。他自小就一直被风湿病折磨着,这也使得他由于太虚弱而不能参加运动。他的视力也很差,使他不能很好地享受户外活动的乐趣。一种苦楚萦绕着他。他不喜欢交际;从某些方面看来,就像一个隐士。在家的时候,他情绪无常,脾气很不好,容易发怒。他喜欢喝酒。 尼尔的妻子叫阿丽塔(Arleta),她抚养着他们的孩子戴夫和戴夫的姐姐邦妮(Bonnie),他们住在离兰辛八英里的迪维特(De Witt)小镇,他们就住在尼尔父母的楼上。迪维特小镇大约有一千人口,四周都是农田,居民大部分是退了休的农民,他们离开农场搬到镇上来住。当戴夫八岁的时候,卡特勒一家从小镇搬出,到了一处有四十英亩大小的开阔地带。这块土地不适合种田,而且还没有房子。尼尔自己修建了一座小小的房子。那时,阿丽塔已经又生了两个孩子。这个家庭一起在一个大屋子里生活。阿丽塔修建了一个大花园,他们还在这块土地上种了葡萄树。上千颗树在那里扎根生长。 从十岁开始,戴夫·卡特勒就寻找机会挣钱。放暑假的时候,他把大部分时间都用来为周围的农民干活,包括修建牲口棚以及做一些零散的工作。有一个暑假,他在一所化肥工厂工作。还有一年,他和一个小伙伴一起捡旧报纸,积攒了整整一拖车后卖给废品回收站。 在十几岁的时候,卡特勒被拉去参加体育比赛。因为毕业班上只有34个同学,他所在的小高中硬让他“服役”。他参加了跑步、棒球、橄榄球和篮球项目。在篮球队中,他是副队长,在橄榄球队中,他是四分卫。在一场比赛中,他两次触地得分,其中一次得分几乎穿越全场。他跑得非常快。 当地的报纸把卡特勒看作一个明星,记载了他的成绩。尼尔几乎从不看他儿子的比赛。在他儿子大学三年级时,有一次,所有队员的父亲都被邀请观看一场比赛,当然尼尔也去了,不过他说他不喜欢运动,阿丽塔怀疑她的丈夫是因为嫉妒故意不去看比赛。 父子之间的关系并不亲密。甚至还在高中的时候,卡特勒就从家里搬出去过一段时间,先和棒球教练一家生活,后来又和邦妮住在一起。在学校里,卡特勒不用太努力就学得很好。到1960年6月毕业时,卡特勒对自己的前途很有把握。在他体内的某个地方生长着被傲慢包裹着的信心和一种信念,他相信他无论干什么都能成为最棒的。其他人也被他这种乐观向上的心态所感染。在他高中的年鉴中,同学们在他的照片下,用了这样一句话来描述他的特质:“只有他自己才可能与他匹敌。” 高中毕业时,位于密歇根的一所很小的学院愿意招收卡特勒,同意给他体育和学术方面的多项奖学金。卡特勒接受了。这个学院的名字叫奥利维特(Olivet)。在大一学年,他打的是四分卫,他在场上喊叫和指挥自己的队友就像一个职业球员一般。他传球的技术很棒,而且奔跑的速度很快,百米速度在11秒以内。他那时大概5尺9寸高,175磅重,两条腿又粗又壮。他的教练斯图·帕塞尔(Stu Parsell)把他称为是“万里挑一的好球员”,并对他的闪避能力感到非常吃惊。卡特勒是一个“诡计多端”的球员,他承认他喜欢从别人身边跑过去。 在比赛中间休息时,卡特勒会让大家聚到一起,听他排兵布阵。他不允许别人有不同意见,对队友的失误会大声斥责,并且告诉他们:“这里是我的地盘,既然加入进来了,那么就闭上嘴巴。”当有人捣乱时,他说:“我真想揍他们,告诉他们要做什么……离开这里做他们的工作。” 在帕塞尔教练看来,卡特勒知道他不能光靠运动的技巧,还需要队友的配合。“他很聪明,知道凭自己一个人的力量是赢不了比赛的,”帕塞尔继续说道,“他拉拢其他的选手跟着他,他们都很拥护他。”卡特勒总是通过自己的模范带头来领导别人,而且“知道他想要的是什么”,因此队友们很响应他的号召。 卡特勒的体育天才在他大二那年达到了巅峰。在过去的几年中,奥利维特彗星队(Olivet Comets)连续失败了21场,长期受压抑的他们在1961年的秋天终于爆发了。在卡特勒这个“舵手”的带领下,这支队伍在前8场比赛中都赢了。然而,在最后一场比赛中,灾难降临了。当比赛进行到一半的时候,卡特勒在中场抢断,滚到右边,准备开始他的四分卫冲刺。在这个赛季,他已经使用这种方法得过分。这一次,他身边一片空旷,卡特勒沿着边线倾斜着身躯全力奔跑,刚好经过他们队的座椅,因为距离很近,帕塞尔教练几乎能抓到他。接下来,一个后卫朝他猛冲过来,分身挡住了卡特勒的去路。卡特勒想从他的身上跳过去,但是他的身体与这个后卫的身体成十字形撞到了一起。他重重地摔到了地上,他的腿断了,他的这个赛季结束了。 在下一个赛季时,卡特勒想返回比赛,但是在开赛前一天的晚上,医生告诉他,如果他上场的话,他的腿就有可能永远都不会好了。卡特勒无奈退出了比赛。 橄榄球生涯结束后,卡特勒把所有精力都放在了学习上。他数学很棒,想过要学理科,但是最后还是决定学工科。在他1965年1月毕业时,有人让他到通用汽车公司做计算机编程的工作。和其他大公司一样,通用汽车公司也开始在20世纪50年代末期把它的业务记录从纸上转移到计算机里。但是卡特勒并不渴望加入通用汽车公司。他对电脑一窍不通,在他的印象里,计算机似乎很危险,甚至不吉祥。在20世纪60年代中期,许多人对计算机都有这种反乌托邦的看法。对这些咯吱咯吱咀嚼数字的机器,人们还抱着怀疑的态度,有的时候还很反感,因为他们有控制人类的倾向。计算机似乎总是要人类来服从它们的意志,强迫人们除了服从电脑的命令外做不了什么。 这使计算机的名声很不好,也让人们对为计算机编程这样的工作没有好感。几乎没有人愿意说自己是个程序员,如果有人真的这样承认,那么人们会觉得他很奇怪。在卡特勒从奥利维特学院毕业前几年,最顶尖的程序员在荷兰,有一个物理学家在他的结婚证上注明自己是程序员。令他沮丧的是,官方人员以没有这样的工作拒绝了他的结婚申请。 卡特勒对程序员工作持着一种非常墨守成规的看法,他很在意一份工作是否能给他带来自尊和地位。对于一个出身相对贫穷并决心依靠自己的力量攀登经济高峰、不向权势低头的年轻人来说,编程“似乎是种非常缺乏创造力并且枯燥的工作”。那些做程序员工作的人遵循着“一套固定不变的规则”,不是能规划自己蓝图的领导者。 他不想搭上软件的边,直接拒绝了通用汽车公司。相反他进了杜邦公司。他很快就适应了这个稳健繁荣的化学巨人。他留着短发和军人那样的胡须。他第一个想到的就是要挣钱;他和一个在大学里认识的女人结了婚,而且已经是一个孩子的父亲了。 杜邦公司把卡特勒安排到一个帮客户寻找材料用途的部门工作。他接手的第一个工作是为一种新的方法建模,斯科特纸业(Scott Paper)打算用这种方法来制作泡沫保温棉,用在夹克衫和其他外套上。这个模型非常复杂,需要使用电脑来创建。于是卡特勒只好放下了所有的事情去了一所由IBM开办的学校,在那里他可以学到怎样给IBM电脑编程序。 卡特勒在学校里呆了一周。他感觉到自己的锐气第一次受挫了。编程“是最奇怪的事情,因为你过去习惯了做一些事情,而且你觉得你做的是对的”,后来他说:“但实际上错了。你只是没有注意到它是不对的。电脑对差不多正确是没有一点宽慰和原谅的。差不多就意味着你还是错的。” 即使对于很有经验的程序员来说,他们也会发现他们的工作是非常枯燥无趣的。当然,在那时,还没有人自己拥有电脑。通常是十几个程序员共同分享一台大型计算机。这种大型计算机的大小足以把整个房间塞满,它能够成批地把很多工作一下子处理完。在批处理任务中,程序员把指令打到穿孔卡片上,向队列中增加一个栈,然后等待结果。因为这种大型计算机很贵,所以批处理任务的日程安排是非常严格的。很多时候,要花好几个小时甚至更长的时间才知道一个程序的命运。如果失败了,单单去纠正穿孔错误就可能要花上程序员一整天的时间。 卡特勒回到了杜邦公司决定在程序上有所成就。这个工作激起了他的兴趣,因为在程序世界里,他是那个环境的控制者。他还发现他有一种神奇的能力,可以一下子把七零八落的不同程序片段都记在脑子里。他开始渴望编程。他没有耐性排队等待杜邦公司的电脑设备,所以他在半夜工作,那时用计算机很便宜而且他能够不慌不忙地汇编和修正他的卡片。“几乎没有任何人在那儿,”他回忆说,“出错误的时候我可以再试一次,在我想用的时候就用,不想用的时候就不用。” 相对于整夜编程来说,做泡沫保温棉并没有让卡特勒晚上睡不着。不到一年的时间,他已经被电脑的魅力深深地吸引了。在电脑上找到解决问题的最佳方法之后,他很快就对问题失去了兴趣,而疯狂地爱上了电脑。事实上,卡特勒找到了人生目标。“我真正想要的是在电脑上工作,而不是用它们来解决问题。” 于是,卡特勒开始寻找一个需要编程的新工作,他找到了杜邦公司的另一个部门,这个部门需要有人来帮助维护Univac制造的中央电脑。20世纪50年代时,Univac生产的电脑在处理数据方面是最好的,但是到了20世纪60年代后期,这个公司开始走下坡路了。杜邦公司叫卡特勒提高那些使用多年了的Univac电脑的可靠性,这意味着要调整机器的操作系统。在那之前,卡特勒甚至从来没有考虑过操作系统。不过,公司的电脑专家看起来知道的也不是很多,于是他全身心地投入研究。 可以把计算机程序大致分为两类。应用程序,简称为“应用”(apps),是软件世界中看得到的一部分。它一类包括被普通用户使用的程序。举例来说,应用软件可以跟踪定单或者存货,检索名字和电话号码,准备要打印的文档或者控制时事通讯的设计。 另一方面,操作系统也是软件世界中看不到的一部分。它们是计算机的心脏,在背后跳动。表面看起来似乎所有的事情都是应用软件做的,但是事实上很多任务都是操作系统做的,比如打开文件、关闭文件、为要储存的信息建立目录、指挥计算机的输入、输出、存储和网络设备。 在数字计算机逐步成形的年代里,也就是在第二次世界大战之后,在设计者们眼里,无论是操作系统还是应用软件都是以后再考虑的事情。和由程序组成的“软件”不同,由电子电路组成的“硬件”太难了,以至于工程师们不敢想像何时能完成它。硬件中,最重要的一类是真正将执行送给计算机的指令的电路系统,也就是处理器。第二类设备用于数据输入输出的。第三类设备用来储存信息。第四类设备允许把信息通过专门的电缆或者电话线发给另一台计算机。 通常,只有在硬件到位后才考虑软件问题。因此,设计计算机时并不知道以后运行什么软件,程序员只能做电脑硬件允许做的事情。艾兹格·迪科斯彻(E. W. Dijkstra)是计算机编程方面的着名理论家,他曾经概括了在计算机形成时期人们对编写代码的普遍态度。他这样说:可怜的程序员是什么处境呢?说句实话,他们很难被注意到。首先,起初的计算机太大了,你根本就不能移动它们,除此之外,它们需要太多维护工作,以至于很自然地,机器是在哪里开发的,人们在哪里使用它。其次,程序员做的是(某种程度上来说)根本看不见的工作,没有什么魅力。你可以把机器展示给参观者们,那比几页代码的吸引力要大几个数量级。但最重要的是,程序员自己对所做工作的看法也很平常:他工作的意义来源于计算机这种超棒的机器的存在。因为这种机器是独一无二的,所以他知道他的编程只在本地有意义。因为机器只会使用不长一段时间,所以他知道他的编码的延续价值很少或者没有。编程工作表面上看起来很简单。只是写个请求给电脑。这种请求应该是以电脑能够明白的方式表达的。而且,这种方式只有特定的电脑能够明白。同样的请求,完全以同样的方式编写,送给有着不同设计和电路的计算机,就会变得莫名其妙。 除了成为特定计算机的奴隶外,最早的计算机程序是很简陋的。在第二次世界大战之前,当时的计算机主要是机械的,很多时候,程序的价值和人工反转开关、重新安排线路或切换齿轮的价值差不多。在20世纪30年代,要让那个时代最强大的机械电脑--微分分析仪(Differential Analyzer)--去解决一个新的问题,准备工作就要花很多天。十年之后,要让早期的数字计算机去解决一个比较难的问题,仍然要花几天时间做设置工作。 更灵活一些的机器从打孔卡片或者纸带上面读取用户的请求,不过卡片或者纸带还是手工反馈给机器的。这种初级的编程方式迫切需要改进。 在1944年发生了突破,约翰·冯·诺依曼(John von Neumann)是出生在匈牙利的数学家,居住在美国,他提出了存储程序的概念。这个概念与这个领域中的其他人的想法很相似,但是冯·诺依曼最清楚地看到了它的意义。使用存储程序,送给计算机执行的指令可以保存在机器自己的内存中,像对待数据一样。这将大大提高启动一个程序的速度,而且可以很容易地修改程序,或者从一个程序切换到另一个程序。 随着存储程序的概念在初生的计算机文化中的广泛传播,编程变得越来越引人注目,很快吸引了一些拥护者。不过这是很艰难的一件事。数字计算机有两种状态,开或者关,所以它只能对只包含1(开)和0(关)的二进制的消息做出响应。程序中的所有元素最终必须使用这两个数字表示出来,这样使得即使普通的数学运算也很容易变得很复杂,令人眼花缭乱。正如一个观察家所说的,在20世纪40年代后期,为计算机编程是“令人发疯一般地困难”。 不久以后,程序员们找到了更简单的方法来产生二进制串。他们首先设计了特殊的打字机,可以自动输出二进制代码。后来,他们转移到更友好的“汇编”语言,用字符和符号来代表1和0。使用汇编写程序是一大进步,但是还需要严格遵循晦涩的计算机指令集。程序员必须深刻理解指令集才能写出高效的汇编代码。而且,不同型号的计算机使用的指令集是不同的,取决于它们的微处理器是如何设计的。这意味着一旦某种计算机废弃不用了,那么程序员费尽力气学会的这种汇编语言知识就会变得一钱不值了。 到20世纪50年代,严重依赖计算机的各种机构开始意识到了软件是令人头痛的事,而且是代价很高的,其中最主要的机构就是美国军方的三大分支。站在计算机领域前沿的程序员们开始寻找方法,以便可以更简单地编写出高效的程序。在1951年,格蕾丝·莫里·赫伯(Grace Murray Hopper),美国海军军械储备局的一名数学家,构思出了一种名为编译器的程序,它可以把程序员的指令翻译成二进制串,也就是最终控制计算机的机器语言。从理论上来说,编译器正是可以把程序员从硬件的限制和使大脑麻木的二进制代码中解放出来的东西。 赫伯的成果催生了无数人的努力,来降低编写代码的难度。或许,最主要的当属IBM开发的称为公式翻译器(Formula Translation)的编译器,也就是Fortran。它包含了三十二条指令,诸如PUNCH(打孔)、READ DRUM(读取磁鼓)和IF DIVIDE CHECK(除法检查),它们来源于计算机硬件需要的二进制术语。截止到20世纪50年代后期,Fortran产生了巨大的影响。“现在,任何人只要具有好的逻辑思维和愿望就可以学习计算机编程”。一个计算机历史学家曾经这样写道:“你不再必须是熟悉计算机内部原理和汇编语言的专家。使用Fortran的简单命令,你可以让计算机听从你的吩咐,而且编译器会自动地把你的指令翻译为高效的机器代码。” 尽管Fortran让程序员使用同一套指令来为任意数量的计算机编程,但是要在不同的机器上运行Fortran程序,经常还需要修改。而且,Fortran是针对科学计算和工程问题的。于是针对其他目标的其他语言出现了,比如面向商业的通用语言(Common BusinessOriented Language, Cobol)。没过多久,便有很多种语言可供程序员选择了。而且,很多时候他们的职业路线就是由他们所选择和学习的最好的编程语言所决定的。 赫伯深信克服因为计算机语言激增而导致的困难将成为未来最大的技术挑战之一。“对我来说,编程不仅是一种重要的实践技术,”她在1961发表的一次讲演中说,“它还需要在基础知识方面做巨大的投入。”有些出乎意料的是,她担心最大的前进障碍会来自程序员自己。就像转变到一种新的宗教信仰一样,他们经常表现出思想保守,掩盖了他们的狂热。“程序员是非常古怪的一个群体,”她观察发现。 他们成长得非常迅速,在很短时间内就变得很专业,而且很快就感染上了一定程度的抵制改变的毛病。有一个程序员,我听说他差点和客户吵起来,因为他不想修改他的系统,他几次走进我的办公室说:“我们一直是使用这种方法来做事的。”正是因为这个原因,现在我在我的办公室里挂了一个逆时针方向走动的钟。 在20世纪60年代初期,IBM尝试在软件领域掀起一场革命,能让同一个程序在任意数量的计算机上运行。IBM计划开发一系列机器,这些机器覆盖了大多数市场,它们是由一个操作系统控制的。这个耗资五亿美元开发的System/360产品线取得了巨大的成功。但是它的产生过程是很痛苦的,主要是因为创建软件的难度和成本被大大低估了。第一台360硬件是在1964年问世的,直到五年后它的所有软件才能够很好地运行。到那时,IBM在编写软件方面所花的钱已经差不多与设计硬件一样多。这使IBM公司的经理们非常吃惊,也非常生动地显示出了“影响计算机科技进步的最大障碍”和管理大型软件项目的问题。 在杜邦公司,戴夫·卡特勒发现自己陷入了驯化计算机这项重大任务的第一线。操作系统的不断标准化大大提高了计算机的实用性。但是编写应用软件的主要压力还是落在了计算机购买者自己的身上。这产生了一种没有想到的效应,那就是使很多大公司成为孕育程序员的基地。杜邦让卡特勒创建一个程序来分析实验室里的实验数据。这个工作很需要技巧,因为需要两台计算机一前一后一起工作。一台接收数据,将数据放入到一个文件然后发送到第二台机器,第二台机器分析数据并把结果发送给研究人员。 人们希望这个程序是所谓的“实时”系统,它能使计算机接收到信息后立即做出回应,而不是几个小时或者几天后才给出结果。第一个实时系统是在风轮计算机上创建出来的,供空军和海军跟踪敌人的飞行器,并指导美国的攻击机命中目标。 实时程序是非常有价值的一种创新。对于像杜邦这样努力寻找新材料及其用途的公司来说,快速响应的帮助比延迟响应要大很多很多。杜邦想让卡特勒的程序运行在从数字设备公司(DEC)购买的小型计算机上。DEC是十年前由风轮计算机的一个工程师创立的,DEC是小型计算机领域升起的一颗新星,它大胆打破传统。在过去,计算机设计者们提倡可以让许多工作共享运算能力的大型主机。小型计算机的价格经常低于十万美元,这第一次让人们可能分配一台计算机专门做单一的工作,比如跟踪零件的轨迹,实验数据或者机器工具的操作。 尽管有用,但是像DEC的PDP这样的小型机通常只配备很少的软件。购买者不得不自己设计他们需要的软件。在接下来的几年中,卡特勒编写出了实时程序和其他一些PDP软件,成为一位为DEC计算机设计代码的专家。 但是,卡特勒开始厌倦杜邦了。他想要到一家计算机公司工作,于是他选择了DEC。因为钻了IBM产品线的一个空子,DEC不仅成长得非常迅速,而且摒弃了传统的商业模式。它没有征购土地建设办公场地,而是把波斯顿(Boston)郊外的一个废弃工厂改造为员工的办公室,这家工厂位于马萨诸塞州(Massachusetts)的梅那特(Maynard)。DEC也没有坚持IBM青睐的从上到下的管理方式,相反,DEC允许工程师实践他们自己的想法,即使冒着重复别人的风险。 卡特勒很渴望为DEC的计算机编写软件--他如此渴望,以至于和DEC销售人员的一次偶遇促使了他到这家公司去参加工作面试。随着硬件的不断发展,DEC很需要编写代码的强人。卡特勒刚好满足了这一需要。于是在1971年,卡特勒接受了DEC的工作,搬到了马萨诸塞州,这一年他二十九岁。 卡特勒很快就博得了DEC的青睐。没过多久,他就成为这家公司的软件之星,并让他去带领一个开发代码的团队。他完完全全被工作所吸引了。那时,他的第一次婚姻已经破裂了,第二次正朝着浅滩行驶。正像他自己所承认的,他根本不是会照顾家的男人。当他终于和第二个妻子散伙后,他发誓再也不会结婚。“结婚是一个错误,你只能犯两次错,”他说。 卡特勒是一流的程序员。他全身心地投入,沉迷其中,争强好斗。他有非常坚强的意志和信心。他投入非常大的精力来注意细节。而且,他在设计和编写代码时不断地追求更好。“大多数人学会如何把一件事做得很漂亮以后,便一生一直做这个,”一个同事观察发现:“他不是卡特勒。卡特勒会从自己的成功中学习。下一次,他会做得更好。所以每次,他都上升到一个新的高度。”这一点是很令人吃惊的,因为在科技方面取得成功的很多人也没有这样的特质。而且,他非常地投入--除了分配到他手中的软件任务外,他对其他任何脑力劳动都没有热情--这是很有好处的:“对可能干扰他的任何人和事,他不仅置之不理,而且还会对其进行攻击和诋毁。” 卡特勒骂人的功夫也炉火纯青。反复无常而且脾气倔犟,他可能根本不顾及脸面,大喊大叫,根本不顾及最起码的礼貌。他发脾气时,嘴里动不动就冒出一连串污言秽语。每次新的爆发都把他的形象又磨砺一番。陌生人是最受不了的。有一次,一位女工程师在放满打印机的房间里第一次遇到卡特勒,卡特勒正在那里往外抠卡在打印机里的碎纸。这位女工程师以期待的眼神看了卡特勒一眼,这时正好卡特勒也抬眼看见了她。于是,卡特勒咆哮起来了:“你就是那个把打印机搞垮的混蛋吗?” 尽管他的态度没有给任何人留下好印象,卡特勒还是赢得了称赞,因为他在为DEC的DPD11计算机构建实时操作系统的工作中起到了关键作用。他出色地完成了一项非常讲究技巧的任务,可以把程序缩减得更小。这是至关紧要的,因为程序越小,它便运行得越快,消耗的内存也越少。卡特勒用了一种很简单的方式来表达他希望代码更紧凑的愿望,在他的办公桌上放了一个橡皮戳,上面刻着:“大小就是目标”(Size Is The Goal)。当他觉得程序员要增加的功能会大大增加内存需求时,他就会使用这个戳盖在驳回备忘录上。这个戳让程序员们对增加代码更加谨慎,同时也提供了一个笑料。很快,很多男员工的房间里都出现了一句刺眼的短语:“大腿就是目标”(Thighs Is The Goal)。 对于他的同事来说,卡特勒是一位英雄,一个不能用平常规则来评判的超人。“他让你感觉你是他的一位同伴,一起成就伟大的同伴,而且你再也不会有更好的和更值得信赖的同盟,”一个同事这样说。卡特勒希望所有人都表现得很完美。为了传达紧急的消息,他会把大家召集到一起。他喜欢奚落他的伙计们,但是为了改善他们的代码质量,他会不遗余力。有时,他甚至捡起被扔到垃圾桶里的代码,用红笔纠正了上面的错误后还给代码的作者。 卡特勒不仅很严厉和冷酷无情,他还要求他的团队要绝对诚实。“如果你对他花言巧语放烟雾弹,或者你试图欺骗他,那么他会对你残忍无情,”一个同事说,“他不会只是让你自杀,他会攻击,而且他不会忘记。” 他也很吝啬表扬别人。罗杰·海恩(Roger Heinen)是卡特勒很喜欢的一名程序员,他经常渴望他的导师可以对他说句好话。“当你做过头和犯错误时,他会立刻批评你,”海恩说。在经历了这样的一次打击后,海恩想知道卡特勒是不是还很看重他。因为太害怕而不敢问,他把手伸进办公桌里,取出一张字条,那是卡特勒一段时间以前写给他的。纸条写得很简单:“罗杰,你真的把工作做得很好。谢谢,戴夫。” 一个强有力的贵人让卡特勒有可能在DEC红了起来。在早期,卡特勒对待编码的认真态度和积极主动的领导风格吸引了戈登·贝尔(Gordon Bell)的注意,戈登·贝尔是DEC的最高工程官员,也是大多数重要计算机产品的设计者。贝尔是很少见的既有技术天赋,又有策划才能的人,他在1960年加入DEC,当时他二十六岁,刚从MIT毕业。在接下来的十五年中,他“领导、论证、思考并建立了很多计算机策略,这些策略把DEC变成IBM的最强大的挑战者”。 工程师们很喜欢贝尔,喜欢他的温和活泼。他关心的问题非常广泛,这种广度既让人高兴,又让人生气。他的思想会到处漫游,以至于那些真正想和他谈话的人要努力把他隔离起来,防止他的注意力转移。“要和戈登交谈,你必须把他带到小汽车里,行驶而且不让他打开收音机,”一个人说。 在1975年初,贝尔觉得DEC正在失去前进的动力,尽管财务报表还很不错。当时,PDP11计算机已经面世五年了,而且IBM正准备引入它的第一款真正的小型机。贝尔觉得DEC需要大大改进机器来在IBM面前保持领先地位。经过了整整一个冬天,贝尔构思出了一个新的计算机产品线,通过这个产品线他认为会让DEC继续走在竞争对手的前面,而且同时也会让那些已经在PDP11上投了很多钱的客户满意。这个新的产品线叫Vax,会运行一个新的操作系统,被称为VMS,VMS会允许用户既可以运行新的程序,又可以运行为PDP11编写的旧程序。“向后兼容”意味着Vax一问世后,就可以在上面运行许多现存的程序,而不是要等待程序员编写出新的程序,这样的事情以前经常发生。同时,Vax的设计是“可调整的”(scalable),这意味着同一个软件可以在不同配置的Vax计算机上运行。用户可以在保留他们熟悉的软件的前提下,切换到更高配置的Vax。 这一切表明Vax会成为计算机历史上的一道分水岭。在组建团队时,贝尔挑选了DEC中最聪明的工程师。他要卡特勒来领导创建VMS操作系统的团队,在贝尔心中,卡特勒是DEC的一流程序员。 把卡特勒和其他四个高级工程师召集到一起后,贝尔在1975年4月1日开始了Vax项目。这个小组开了很多激烈的会议来反复推敲设计概念。“他们开始时很安静,先花十五分钟简要介绍议题,接下来就不可避免地进入到了大声争论,表面看来一片混乱,而且像是很敌视对方。但不知什么原因,他们总是能高调地结束,工程师们面带微笑鱼贯而行走出会议室。” 贝尔帮助卡特勒,不让他受到那些爱管闲事的局外人的干扰。“我不会容忍任何人插进来影响戴夫做事,”他说。即便如此,VMS项目还是让卡特勒承受了巨大的压力。这种压力体现出来了。有一段时间,早晨当他从床上爬起来时,会感到头晕眼花,甚至不能把身体站直。化验表明他的血压非常高。他立刻开始吃药来把血压降下来。作为一种预防措施,DEC让VMS团队中的其他经理也检查了血压。做检查的护士说,卡特勒的血压是见到过的最高值。 经常受卡特勒唇枪舌剑之苦的同事们不由自主地会拿卡特勒的健康问题来奚落他。在异常激烈的争论中,一个同事开玩笑说悬而未决的等待令他痛苦不堪。还不如卡特勒的心脏受了伤害,那样他们就可以不再为这个项目忧虑了。“难道你就不能一下子把这个项目做完了事?”他解释说。 很清楚,这个时候卡特勒需要有人来帮助他开发VMS软件。这个团队很小--最多时只有十个人--而且卡特勒是高级程序员。但是卡特勒不会求人帮忙。他从来不做那样的事。有一句他很喜欢的话:“当把所有事情说一遍然后再做完时,要说的话比要做的事多得多。” 当卡特勒忙着做事时,这个项目的总经理(被卡特勒戏称为“老板”的男人)打算雇用一个高级程序员来帮助卡特勒把VMS软件弄成样子。当卡特勒离开一周去休假时,这个老板面试了最好的候选人,并在卡特勒回来时雇用了他。卡特勒不觉得他需要一个签名代码的人,但是实际情况证明,这个人在技术方面也是胜任的。卡特勒默认了这个帮助,什么也没有说代表了他的感谢。
观止-微软创建NT和未来的夺命狂奔——第1章 代码勇士
书名: 观止-微软创建NT和未来的夺命狂奔
作者: G·Pascal Zachary
出版社: 机械工业出版社
原作名: Showstopper!: The Breakneck Race to Create Windows NT and the Next Generation at Microsoft
副标题: 微软创建NT和未来的夺命狂奔
译者: 张银奎
出版年: 2009
页数: 203
定价: 42.00元
装帧: 平装
ISBN: 9787111265306