聆听大师们的声音 - 《编程大师访谈录》读后

可以说,执行特定任务就像是从大杂烩中选定菜目,排出一席美味佳肴。你可以左手一份美味右手一盘佳肴,但搁在一起可能味同狗粮。懂得巧妙搭配食材才称得上好厨师。同样,把程序各个部分妥善组合在一起,才是成就优秀计算机程序员之道。

-- 《编程大师访谈录》

图片来源:douban.com
图片来源:douban.com

这个周末,我花了两天时间读完了《编程大师访谈录》。书中收录了对19个传奇程序员的访谈内容,其中不乏大师们对编程的严肃思考和深刻洞见,读来趣味盎然。本文摘录了一组具有代表性的问答,从中可以对大师们对待编程的认识和想法管窥一斑。

请注意,大师们的见解与论断未必全盘正确,不加思考地把他们的观点拿来奉为圭臬是危险的。本书的迷人之处在于,大师们的那些充满冒险性与创造性的想法可以给我们带来深刻的启发。循着这些启发做一番自己的思考,或可得到一二真知。

另外,本书的成书时间是1986年。阅读时,需要把访谈置于当时的环境背景之下,方能透过时空和这些大师进行对话。

对计算机与编程的看法

问:你认为计算机科学真的是科学吗?

查尔斯·西蒙尼:最简单的回答是,它是科学,就跟数学是科学一样。计算机程序可以视作数学对象。

约翰·沃诺克:不见得。比起科学,它更是工程学科。科学就是提出假说,做各种实验,在现实世界中创建模型。计算机却不是这样,它们是关于现实世界模型的自我实现的预言,是极好的信息工具。但是,说到计算机科学,我不知道它试图追求什么样的真理。

约翰·佩奇:我一直在说,计算机科学不是一门真正的科学,因为你没有实际发现有关物质世界的任何东西 -- 但是,这只说对了一半。有时候一个问题的答案一下子豁然开朗了,就好像答案一直都在那里一样,而我发现了它。我仔细检查,发现答案是完美的。怪吧?

问:计算机或编程什么地方吸引你?

受访者对这个问题的回答非常的一致,总结而言,他们都是被“编程”这项任务背后蕴含的创造性和美学特性所吸引。

C·韦恩·莱特莱夫:我喜欢高科技的东西,我喜欢做出一些东西,让它们显示在屏幕上。如果你程序写得好,它可以非常优雅:它就像在歌唱,它制作精良。从工程的角度来看,我享受面对这一切,就像面对一辆漂亮的汽车,一座坚固的桥,或是一栋精美的建筑。它的一切都是那么平衡、那么和谐。

安迪·赫兹菲尔德:这是我能像到的唯一的工作,可以让我身兼工程师和艺术家两种角色。它包含难以置信的、严密的技术元素,这是我所喜欢的,为此你必须一丝不苟,思维缜密。另一方面,它有极具创造性的一面,唯一真正的限制就是你的想象力。这两种元素的联姻使得编程独一无二。你必须既当艺术家又当科学家,我喜欢这一点。我喜欢在编程工作的核心中创造魔法把戏。

问:你认为编程是艺术、科学、技能、手艺,还是......?

查尔斯·西蒙尼:什么是编程,人们对此一直各持己见。有人说它是科学,有人说它是艺术,还有人称之为技能或手艺。我认为这三方面兼而有之。我们喜欢说它蕴含大量艺术成分,但是我们都知道它里面更多的是科学。我认为,只要将科学、艺术和技能这三者拿捏得恰到好处,你就能取得一些引人瞩目的成绩。最优算法的知识当属科学,结构的想象则是艺术。这些算法的细节,以及编写高效代码实现这些结构的转换,是编程像手艺活的一面。

彼得·罗伊森:我当然认为这是艺术。我认为任何做得好的事情都可以成为艺术,因为任何工作都可以加上一定的品味或艺术天赋来完成。在我自己的工作中,我不但关心代码做什么,也关心它看起来如何。我经常重新整理代码,就为了让它看起来更漂亮。

加隆·兰尼尔:嗯,计算机本身没有什么特性。它们是空的,就像一张白纸。因为他们的思想完全是空的,所以他们的特性完全有人来决定,其程度超过任何其他人类活动的领域。...... 我更多地把编程看作是艺术。上周末我在一个电视节目上和彼得·德奇交谈,他说编程是一种手艺。然后,还有些人认为编程是数学。这完全取决于个人的不同看法。

从美学的角度看程序

问:你认为什么样的代码清单或算法结构在审美上是优美或悦人的?

这是一道非常主观的问题,不过受访者的回答都提到了同一个元素,那就是“结构的简单、清晰与一致”。

查尔斯·西蒙尼:我觉得代码清单带给人的愉快同整洁的家差不多。你一眼就能分辨出家里是杂乱无章还是整洁如新。我敢打赌,我在3米开外就能看出程序拙劣与否。我也许没法保证它很不错,但如果从3米外看起来就很糟,我敢保证这程序写得不用心。如果写得不用心,那它在逻辑上也许就不会优美。

加里·基尔代尔:当一个程序干净整洁、结构良好、前后一致时,它就是美丽的。我不能拿程序和蒙娜丽莎来比,但程序的简单和优雅确实是美的。不同程序的风格差异是耐人寻味的,很像是艺术评论家眼中达.芬奇的蒙娜丽莎和凡高画作之间的差异。我特别喜欢 LISP 编程语言,它是如此赏心悦目。在 LIST 语言中有一个被称作 M 的简明表达式。用 M 表达式写的算法非常美,你几乎想把它装裱起来挂载墙上。

关于方法论

** 问:程序员需要具备什么样的素质才能写出成功的程序?**

鲍勃·弗兰克斯顿:优秀的人一般需要满足两个因素:正好具备这个知识领域所需要的心智,并且在能力上又不是太愚钝。这样的组合很罕见,但并非不可思议。......一个优秀的程序员必须喜欢编程,对它感兴趣,这样他才会努力多学一点。优秀的程序员还要对美学有感觉,并且有相应的负罪感,能够敏锐地意识到什么时候违反了程序的美感。负罪感迫使他更加努力地去改进程序,使程序更加符合美感。

乔纳森·萨奇:天赋、气质、动机和努力工作的结合。我知道有很多人期望在很短的时间就成为一名好的程序员,但能成功做到这一点的人并不多。成功来自一遍又一遍地做同样的事情,每一次学习一点点,下一次都做得更好一点点。

问:你编程的过程是什么样的?

加里·基尔代尔:我遵循非常明确的、适合自己的流程。我会先画数据结构,然后花很长时间思考数据结构。在开始编程前,我会一直思考整个程序的流程。

比尔·盖茨:我喜欢在坐下来编写代码之前先把整个设计方案构想清楚。而在完成代码后,我喜欢回去把它从头到尾再全部重写一遍。

彼得·罗伊森:我是个非常“自底向上”的程序员。我不为整体战略伤脑筋,因为除非完成了所有的细节,否则我从来看不清全貌。

问:团队合作编程对项目有什么影响?

受访者在这个问题上又达成了一致:开发团队应该尽可能精简。

约翰·佩奇:如果一个产品需要四到五个人开发,那和你自己一个人编程时采取的方法是不同的。我坚信只能有一个人来做产品和高层结构的设计,最多不能超过两个人。所有的设计出于一个头脑,才能够实现和谐与一致。如果试图取悦所有人,让一个委员会来做设计,你的方向就错了。那绝对是致命的。

C·韦恩·莱特莱夫:不论是单枪匹马还是在一个非常小的团队里,我都能工作得很好。当团队超过6个人时,那就完全失控了。

关于其他兴趣

问:不编程的时候,你都做些什么?还有其他兴趣爱好吗?

查尔斯·西蒙尼:还有其他不少有意思的事情,我也乐此不疲。我对埃及象形文字略知一二。学习其他语言、旅行和观察世界都是很不错的活动。我还持有私人旋翼飞机飞行员执照。

加里·基尔代尔:我会间歇性的短期休假,因为我也很喜欢享受生活。这时我会外出,开飞机只是为了从工作中脱身出来。

约翰·佩奇:我是个飞行员。我正在盖一座房子,我弹吉他,喜欢游泳,不是为了游泳而游泳,而是为了锻炼身体。

杰夫·拉斯金:五花八门。我是个典型的发明家。我做过大量不同领域的项目。例如,我有一家公司制作无线电遥控模型飞机。另外我正在做一个钢琴方面的新设计。...... 我正在开发一款数控铣床。

令人惊讶的是,多个受访者对驾驶飞机(或者遥控模型飞机)有着极大的兴趣。对此,约翰·佩奇表达了自己的看法:

约翰·佩奇:一个原因是那些相当成功的程序员是有财力开飞机的。还有一个原因是,飞行对工程师来说是一个煅炼,因为它涉及操纵复杂的事物,这是工程师喜欢做的。程序员也喜欢驯服复杂的东西,而开飞机是非常复杂的,所以掌控飞机是很有趣的。最后,开飞机像编程。一名优秀的飞行员要给乘客提供完美、平稳的航行体验,而优秀的程序员给客户提供的是在计算机上完美、无需费脑的经历。

对未来的预想

问:你认为未来计算机在社会中会扮演什么角色?

本书成书于上世纪80年代,这给了我们一个绝佳的机会通过今天的视角来审视书中人物对未来的设想与预言。

丹·布兰克林:我觉得将来的个人计算机会跟台式机有所不同,现在的电脑就像是放在你办公桌上的电话。未来的个人电脑应该更像是个记事本。我的记事本随身携带,为什么它就不能是电脑呢?嗯,这不同于我们现在熟知的个人电脑。计算机技术会用在各种各样的全新场合,比如用作记事本。

鲍勃·弗兰克斯顿:我认为现在的这种计算机会消失。计算机会变成智能代理或家用电器。个人计算机最终将销声匿迹。当然这个过程是逐渐的。有一个阶段会有很多针对个人计算机使用者的应用,但这决不是进化的终点。虽然人们还无法准确预言计算机究竟会怎么发展,但谁会喜欢在桌子中间放这个一个大盒子呢?

彼得·罗伊森:对于整个行业或者整个世界,我都不那么关心。对于世界,我的关心程度只限于我希望世界是安宁的,我也希望尽我能尽的本分让世界安宁。


附录 - 受访者名单:

  • 查尔斯·西蒙尼 - Microsoft Word 和 Microsoft Excel 等著名软件的领导开发者。值得一提的是,西蒙尼曾于2006年和2009年两度进行太空旅行。另外,著名的匈牙利命名法也与他有关。
  • 巴特勒·兰普森 - 曾担任 DEC 公司高级企业顾问工程师,1995年进入微软并一直工作至今。另外,兰普森自1987年开始一直担任麻省理工学院电气工程与计算机科学希兼职教授。
  • 约翰·沃诺克 - Adobe 公司的联合创始人,PostScript 语言的开发者。
  • 加里·基尔代尔 - CP/M 操作系统与 PL/1 编程语言的开发者。
  • 比尔·盖茨 - 这位不用介绍了吧。
  • 约翰·佩奇 - 软件出版公司副总裁,主导开发了 PFS 系列产品。
  • C·韦恩·莱特莱夫 - dBASE 系列产品的开发者,曾为 NASA 的“海盗”号火星探测器的着陆支持软件编写数据管理程序 MFILE。
  • 丹·布兰克林 - VisiCalc 电子表格程序的合作开发者。
  • 鲍勃·弗兰克斯顿 - VisiCalc 电子表格程序的合作开发者。
  • 乔纳森·萨奇 - 取得非凡成功的 Lotus 1-2-3 电子报表软件的主要开发者。
  • 雷·奥奇 - 曾在莲花公司与乔纳森.萨奇共事过,后加入微软。是 Symphony 程序的开发者。
  • 彼得·罗伊森 - T/Maker 公司的创始人以及 T/Maker 电子表格程序的开发者。
  • 鲍勃·卡尔 - Framework 套件的开发者。
  • 杰夫·拉斯金 - 苹果电脑公司 Macintosh 项目的发起人。
  • 安迪·赫兹菲尔德 - Macintosh 操作系统的主要开发人员。2015年上映的电影《史蒂夫·乔布斯》中有不少关于他的戏份。
  • 岩谷徹 - 吃豆人游戏的缔造者。
  • 斯科特·金 - Inversion 一书的作者以及 Inversions for the Macintosh 程序的开发者。
  • 加隆·兰尼尔 - Moondust 游戏的开发者,亦是虚拟现实领域的拓荒者。
  • 迈克尔·霍利 - 层在卢卡斯影业旗下参与 SoundDroid(音响机器人)程序的开发工作。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及...
    dle_oxio阅读 11,075评论 6 244
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,424评论 25 707
  • 天儿才蒙蒙亮,老李就起来上山拾柴火,先找个露水不重的平地把麻绳叠起两道来摆着,再慢悠悠的背着手绕着山往上走,遇到人...
    刘非之阅读 834评论 1 3
  • @醒了吧,来来来,听听滴滴答答的雨声。 ​​
    汪小鹤阅读 242评论 0 0
  • 今天是一个与众不同的日子,因为我们班里邀请来一位帅帅的爸爸,他是丁子琳同学的爸比,一位出色的机长!他给学生们...
    1046db56ec40阅读 966评论 0 0