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
1700435333
1967年夏天,维克·维索斯基(Vic Vyssotsky)(图1-6)坐我对面办公室。他也是极聪明和有天分的程序员。维克和科尔比搭档,负责管理贝尔实验室的Multics研发工作。他会尽量抽空每天与我这个基层实习生谈话。维克逼着我给需要学编程的物理学家和化学家上Fortran课。给非程序员上编程课,原来也颇为有趣。这让我克服了对公众讲话的恐惧,也让我后来能轻松应对各种教学工作。
1700435334
1700435335
1700435336
1700435337
[
上一页 ]
[ :1.700435288e+09 ]
[
下一页 ]