打字猴:1.700435283e+09
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
1700435310
1700435311
1700435312
1700435313 在做整数除法时,Fortran会丢弃结果的小数部分,故若I不等于J,除法结果为0;若I等于J(在对角线上),结果就是1。
1700435314
1700435315 在我看来,这有点过于炫技了。在编程时,“乱抖机灵”并非良策。
1700435316
1700435317 用更直截了当和显而易见的方式重写,得到下面这个更清楚的版本:遍历外循环时,内循环将第I行的每个元素设为0,然后外循环再将对角线元素V(I,I)设为1:
1700435318
1700435319 C MAKE V AN IDENTITY MATRIX      DO 14 I = 1,N         DO 12 J = 1,N   12       V(I,J) = 0.0   14    V(I,I) = 1.0
1700435320
1700435321
1700435322
1700435323
1700435324
1700435325 于是我得到编程风格的第一条规则:写明白,别炫技。
1700435326
1700435327 迪克于1976年从贝尔实验室退休,去了加利福尼亚州蒙特雷的美国海军研究生院(Naval Postgraduate School in Monterey,California)任教,直至1998年初逝世,享年82岁。据说,他有一门课被学生称为“汉明论汉明”(Hamming on Hamming),正与本节内容相呼应。
1700435328
1700435329 迪克无时无刻不在深思自己在做什么,为什么要这么做。他常说“算以获识,非算以得数”[6],他甚至有一条(用中文)写着这句话的领带。他很早就认为,电子计算将在贝尔实验室的工作中占到一半比例。同事们都不这么认为,但很快他的预测就成真了。他常说,周五下午宜哲思,所以他每逢这个时间就安坐思考,但也随时欢迎我这样的访客。
1700435330
1700435331 退休后的几年,迪克总结了关于职业生涯成功之道的建议,开设讲座,题为“You and Your Research”(你和你的研究)。你可以在网上找到相关内容。最早一次讲座于1986年3月在Bellcore(即贝尔通信研究院[7])举办,肯·汤普森开车载我一起去听。几十年来,我一直向学生们推荐这一讲座——非常值得阅读记录文本,或者观看视频。
1700435332
[ 上一页 ]  [ :1.700435283e+09 ]  [ 下一页 ]