代码整洁之道:程序员的职业素养
上QQ阅读APP看书,第一时间看更新

致谢

我的职业生涯中有很多次与他人合作的经历。尽管有很多事情是我个人的梦想与追求,但我几乎总能找到志同道合的人。这一点上,我觉得有点像《星球大战》里的西斯,“身边总会有伴”。

我认为,算得上专业的第一次合作,是在13岁时和John Marchese一起造电脑。我思考,他动手。我指出该焊线的地方,他来焊;我指出该装继电器的地方,他来装。我们乐此不疲地在这上头忙活了数百小时。我们的确鼓捣出了不少看着相当有型的家伙,上面装着继电器、按钮、小灯,甚至还有电传打字机!当然,这些电脑都没法用,但它们看起来真的很棒,我们也确实干得十分卖力。谢谢你,John!

进中学的第一年,我在德语课上认识了Tim Conrad。Tim很聪明。在我们搭档造电脑时,他思考,我动手。他教给了我一些电子学知识,他也是第一个向我介绍PDP-8的人。我们用一些很基础的元器件真的造出了一台可以工作的18位二进制计算器,能够进行加减乘除的运算。那年我们把所有的周末、寒暑假和圣诞假期都投了进去,干得很疯。最终,机器跑得棒极了。谢谢你,Tim!

Tim和我自学了计算机编程,在1968年,这并不是件容易的事,但我们做到了。我们特别找来了有关PDP-8汇编器、FORTRAN、COBOL、PL/1的书。我们如饥似渴地读书,并写了一堆根本没有可能去实际执行的程序,因为当时还没法摸到计算机。但纯粹出于爱好,我们孜孜不倦地写了许多程序。

在中学二年级的课程中,开设了计算机科学的科目。学校有一台ASR-33电传打字机,通过一台110波特的拨号调制解调器,可以连接到伊利诺伊理工学院的Univac 1108分时系统上。学校在那上面有一个账号。Tim和我马上就成了那台机器实际上的操作者,其他人都没法靠近它。

通过调制解调器连接到主机上时,要先拿起电话进行拨号,当听到准备接收调制解调器信号的回答时,按下电传打字机上的“orig”键,发起端的调制解调器就会发出尖锐的啸叫,开始发送信息。这时数据连接已经建立,可以挂断电话。

电话机拨号盘上有锁,只有老师才有钥匙。但这并无大碍,因为我们发现,只要在叉簧开关上拍打出电话号码,就可以拨出电话。我会敲鼓,节奏感很强,反应也快,所以即使电话上了锁,我也可以在10秒内把调制解调器拨通。

计算机实验室里有两台电传打字机,一台在线,另一台离线,两台都被学生们拿来写程序。学生们使用打孔纸带在电传打字机上录入程序,程序内容都打在纸带上。他们用的编程语言是IITran,这种解释型语言相当强大。最后,学生们会把这些纸带放在电传打字机旁的一个篮子里。

课后,Tim和我会拨通计算机(当然是通过敲打叉簧的方式拨通的),把纸带加载到IITran批处理系统里,然后挂断电话。载入速度大概是每秒10个字母吧,这个过程并不快。大概一小时后,我们会回拨电话,接收打印内容,这次仍然是每秒10个字母。电传打字机无法根据学生姓名分页返回结果列表。它只能一页接一页不断地打出返回结果。因此,我们需要用剪刀把返回的打印结果剪开,用夹子把输入纸带和结果列表夹在一起,再放到专门装输出结果的篮子里。

Tim和我成了此道达人。甚至连老师们看到我们在那个房间里也不会来过问。我们其实有点越界了,他们对此也很清楚,因为他们从未要求我们这么做,也从没说我们可以这么做,更没给过我们电话的钥匙。我们悄悄进去,他们默契离开——放手让我们去做。在此,向我的数学老师McDermit先生、Fogel先生和Robien先生一并说声:“谢谢你们!”

做完作业之后,我们就开始玩了。我们会一个程序接一个程序地写着玩,极尽疯狂之能事。我们在电传打字机上编写能够使用ASCII绘制圆形和抛物线的程序。我们编写随机漫步程序和随机文字生成程序。我们将50的阶乘算到最后一位。我们乐此不疲地想出各种编程题目,并努力用程序实现。

两年后,Tim、我们的伙伴Richard Lloyd还有我,被ASC公司聘为程序员。这家公司位于伊利诺伊州莱克布拉夫市。当时Tim和我都只有17岁。我们当时觉得上大学是浪费时间,便决定马上进入职场。在那里我们遇见了Bill Hohri、 Frank Ryder、Big Jim Carlin和John Miller,他们为我们这些年轻人提供了学习专业编程的实战机会。那段经历有得有失。当然,我在其中颇受教益。所以,我想对他们所有人,包括促进和推动这个过程的Richard,说声:“谢谢你们!”

19岁那年我辞职了,并且变得消沉。在那段时间,我在姐夫那里修理割草机,但是我干得实在太糟了,最后他不得不炒了我。谢谢你,Wes!

一年后我又重整旗鼓,进入了Ourboard Marine 公司。那时我已经结婚了,而且正要升级做爸爸。他们最终也炒了我。谢谢你们,John、Ralph还有Tom!

随后我开始在Teradyne工作,在那儿我认识了Russ Ashdown、Ken Finder、Bob Copithorne、Chuck Studee,还有 CK Srithran (现在叫Kris Iyer了)。Ken是我的老板,Chuck和CK是我的搭档。我从他们所有人身上都学到了许多东西。谢谢你们,伙计们!

接着我遇见了Mike Carew。在Teradyne,我们俩成了黄金搭档。我们一起写了好几个系统。“如果你想活儿干得又快又好,就把它交给Bob和Mike!”我们共事的时光充满欢乐。谢谢你,Mike!

Jerry Fitzpatrick也是我在Teradyne时的同事,我们是在玩“龙与地下城”游戏时认识的,但随即迅速结成同盟。我们一起为玩家写了一个可以在Commodore 64家用电脑上运行的“龙与地下城”游戏软件。在Teradyne,我们还一起开始了一个叫“电子接线员”的项目。Jerry和我共事了好几年,并成为我的终生挚友,谢谢你,Jerry!

在Teradyne时,我曾在英国工作过一年。在那儿我和Mike Kergozou搭档,期间所有事情我们几乎都是两人一起筹划的,虽然这些事情大部分与自行车和酒吧分不开。Mike是个十分勤勉的程序员,注重质量和原则(不过,或许他自己可能不会认同这样的评价)。谢谢你,Mike!

1987年从英国回来后,我开始和Jim Newkirk搭档。我们都离开了Teradyne(前后相隔几个月),加入了一家新创公司Clear Communication。我们在那里一起努力拼搏了好几年,却一直没能成就财富梦想。但是,我们还是奋力前行。谢谢你,Jim!

最终我们一起创办了Object Mentor公司。在所有我有幸共事过的人中,Jim是最率直、最严谨和最专注的。他教会我许多事情,内容之多无法在此一一列举。为此,我谨将本书题献给他!

此外,和我搭档过的、合作过的、对我的职业生涯产生过影响的人,还有许许多多,他们是:Lowell Lindstrom、Dave Thomas、Michael Feathers、Bob Koss、Brett Schuchert、Dean Wampler、Pascal Roy、Jeff Langr、James Grenning、Brian Button、 Alan Francis、Mike Hill、Eric Meade、Ron Jeffries、Kent Beck、Martin Fowler、Grady Booch等。还有许多人的名字恕在此无法一一详列。谢谢你们每个人,谢谢大家!

当然,我亲爱的妻子Ann Marie是我最好的人生搭档。我20岁时和Ann结婚,那时她的18岁生日刚过去3天。38年来,她一直是我坚定不移的伴侣,是我的舵,我的帆,也是我的爱与生命。我期待同她携手再走40年。

现在,我的合作伙伴和搭档则是我的孩子们。我和大女儿Angela合作紧密,她是我可爱的小保姆和坚强的助手,她让我在专注前行的同时,不会错过一个约会或是遗忘任何承诺。我和儿子Micah也是业务上的搭档。他创办了8th Light,他的商业头脑远胜于年轻时的我。我们新近的合作事业Clean Coders令人激动!

我的小儿子Justin刚刚开始加入Micah的8th Light。我的小女儿Gina是霍尼韦尔的化学工程师。他们的事业刚刚拉开序幕!

在生命中,我们从孩子们身上收获最多。谢谢你们,我的孩子们!