1700435260
1700435261
1700435262
图1-4 道格•麦基尔罗伊,约1981年 (杰拉德•霍尔兹曼供图)
1700435263
1700435264
1700435265
1700435266
1700435268
UNIX传奇:历史与回忆 1.4 办公空间
1700435269
1700435270
有时地理位置决定一切。
1700435271
1700435272
1967年实习时,我的办公室位于2号楼5层8号梯旁。上班第一天,我坐在办公室里(那些连实习生都有自己办公室的好日子啊),琢磨着该做些什么。上午11点,有个年纪略长的家伙出现在门口,说:“嗨,我是Dick。走,吃午饭去。”
1700435273
1700435274
我没听清楚他姓什么。不过我想,行,为什么不呢?那顿午饭怎么吃的我完全不记得了,只记得饭后那位迪克某某就去了其他地方。我沿着走廊找到他办公室门上的名牌,上面写着“Richard[4] Hamming”!这位和善的邻居原来是一位名人。他是纠错码的发明者,也是我选修过的一门数值分析课所用教材的作者。
1700435275
1700435276
我和迪克(图1-5)成了好朋友。他观点鲜明,不惧表达,我觉得这会让一些人不爽,但我乐意与他为伍,而且多年以来他的建议令我获益良多。
1700435277
1700435278
1700435279
1700435280
1700435281
图1-5 迪克•汉明,约1975年,穿着他招牌式的格子正装(维基百科)
1700435282
1700435283
他挂了个部门负责人的头衔,但他的部门却没有员工,这看起来有点儿古怪。他告诉我,他花了很大力气才弄来这个不用负具体责任的职衔。很久以后,当我当上管理十几号员工的部门主管时,我才明白拥有一个不用负具体责任的职衔有多么令人羡慕。
1700435284
1700435285
1968年,他得到通知说自己获得了当年的图灵奖,这个奖现在被看作计算机科学领域的诺贝尔奖。我目睹了他的自嘲式反应:诺贝尔奖当时奖金价值10万美元,而图灵奖奖金价值2 000美元,他说自己得了2%个诺贝尔奖。这是第三届图灵奖,第一、二届分别颁给了艾伦·佩里斯(Alan Perlis)和莫里斯·威尔克斯(Maurice Wilkes),他们两位也是计算领域的先锋人物。迪克因其在数值方法、自动编码系统、错误侦测及错误纠正方面所做的工作而获奖。
1700435286
1700435287
迪克是促使我开始写书的人。写书是一件好事。他对大多数程序员评价甚低,因为他感觉他们没有得到像样的培训。至今他的话仍在我耳边萦绕:
1700435288
1700435289
“我们给他们一本词典和一套语法规则,说:‘孩子,你已经是伟大的程序员了。’”
1700435290
1700435291
他认为,应该像教写作一样教编程。好代码应该与坏代码风格迥异,应该教会程序员如何写出漂亮的、风格优雅的代码。
1700435292
1700435293
对于怎样才能做到这一点,我和他有分歧。但我听取他的意见,于1974年写了我的第一本书《编程格调》(The Elements of Programming Style),合著者是当时坐在我隔壁办公室的P. J.“比尔”·普劳格(P. J. “Bill” Plauger)。我们仿效威廉·斯特伦克(William Strunk)和E. B.怀特(E.B.White)的《风格的要素》(The Elements of Style)[5],展示写得差的代码片段,然后阐述如何对其进行改进。
1700435294
1700435295
《编程格调》这本书中的第一个例子来自迪克给我看的一本书。有一天,他冲进我办公室,手里拿着一本数值分析书,怒斥书中数值的部分写得有多烂。我只瞟到一段可怕的Fortran代码:
1700435296
1700435297
DO 14 I=1,N DO 14 J=1,N14 V(I,J)=(I/J)*(J/I)
1700435298
1700435299
1700435300
1700435301
1700435302
1700435303
若你不是Fortran程序员,请听我解释。这段代码包括了两个嵌套的DO循环,这两个循环都在第14行结束。循环控制的索引变量从最低限步进到最高限,所以外循环I从1步进到N,内循环J也从1步进到N。变量V是个N行N列的数组;I遍历每一行,在每一行中,J遍历每一列。
1700435304
1700435305
这两个循环创建了一个N×N的矩阵,对角线上是1,其他地方都是0,当N等于5时就像下面这样:
1700435306
1700435307
1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1
1700435308
1700435309
[
上一页 ]
[ :1.70043526e+09 ]
[
下一页 ]