《编程大师访谈录》总结

总结

本书是19位编程大师的访谈录,对于程序员来说肯定是好书,可以看看高手的人生是怎么过的。对于喜欢音乐、视觉艺术、写作的人来说也同样有吸引力,因为这里每一位大师几乎都是多才多艺,有太空旅行的、弹钢琴的、画画的、弹风琴的、弹吉他的、大学教授、演奏家、作家等等。
虽然大师们各有特色,但还是能找出一些共性:务实、谦虚、穿着随意、崇尚自由。

19位大师介绍

  1. 查尔斯·西蒙尼
    Word和Excel等软件开发者、06和09年进行了太空旅行。
  2. 巴特勒·兰普森
    开发过太网局域网和Alto、Dorado个人电脑,DEC公司高级企业顾问工程师、麻省理工学院电气工程与计算机科学系兼职教授。
  3. 约翰·沃诺克
    Adobe公司的联合创始人,PostScript语言开发者,爱好摄影、滑雪、绘画、徒步旅行、收集罕见的科技书籍和印第安人用具等,和妻子开了一家古典风格的旅馆——蓝野猪
  4. 加里·基尔代尔
    CP/M 操作系统与 PL/1 编程语言的开发者。
  5. 比尔·盖茨
    微软创始人你懂的,这就不用介绍了。
  6. 约翰·佩奇
    软件出版公司副总裁,主导开发了 PFS 系列产品。
  7. C·韦恩·莱特莱夫
    dBASE系列产品的开发者。
  8. 丹·布兰克林
    VisiCalc电子表格程序的合作开发者。
  9. 鲍勃·弗兰克斯顿
    VisiCalc电子表格程序的合作开发者,计算机+数学+电气工程学位。
  10. 乔纳森·萨奇
    Lotus 1-2-3电子报表软件的主要开发者,喜欢画画、摄影。
  11. 雷·奥奇
    Symphony 程序的开发者。
  12. 彼得·罗伊森
    T/Maker公司的创始人、T/Maker电子表格程序的开发者、soho一族。
  13. 鲍勃·卡尔
    Framework软件的开发者。
  14. 杰夫·拉斯金
    苹果公司Macintosh项目的发起人、艺术家、职业音乐家,喜欢自行车、射箭。
  15. 安迪·赫兹菲尔德
    Macintosh操作系统的主要开发人员。
  16. 岩谷徹
    吃豆人游戏的缔造者、东京工艺大学的全职讲师,本人是野路子自学计算机、视觉艺术。
  17. 斯科特·金
    Inversion一书的作者、Inversions for the Macintosh程序的开发者,斯坦福大学音乐学士学位、计算机+图形设计博士学位。
  18. 加隆·兰尼尔
    Moondust游戏的开发者、知名的音乐家、古典音乐作曲家、稀有乐器收藏家、视觉艺术家和作家。
  19. 迈克尔·霍利
    卢卡斯影业旗下参与 SoundDroid(音响机器人)程序的开发,钢琴演奏家、风琴演奏家。

大师们的看法

关于编程

查尔斯·西蒙尼:

  • 编程的第一步是想象。就是要在脑海中对来龙去脉有极为清晰的把握。在这个初始阶段,我会使用纸和铅笔。我只是信手涂鸦,并不写代码。我也许会画些方框或箭头,但基本上只是涂鸦,因为真正的想法在我脑海里。我喜欢想象那些有待维护的结构,那些结构代表着我想编码的真实世界。
  • 我认为管理的最佳方法是言传身教,经常复审代码。我们一直坚持开展代码复审。

约翰·沃诺克:

  • 优秀的系统设计不只是工程活动,更是系统不同组件之间的一组折中和平衡。我认为这种折中和平衡才是系统设计最难的地方

比尔·盖茨:

  • 最糟糕的程序是原来的程序员在开始时没有打好基础,而他们也没有再参与到程序的后续开发中。在这类程序上继续工作就会遇到一种我所说的“实验性程序”的情况。程序员对那些程序了解得太少,他们不知道改动之后会影响什么,比如说会不会影响运行速度。他们可能会使用已经存在的代码,他们也有可能并不知道如果修改了代码,会破坏何种依赖关系。于是他们加入了新代码,并在运行之后说:“噢,看哪,它不是那样运行的。”这种处理程序的方法效率非常非常低,但很多项目到了最后却都是这样的。
  • 我所写过的真正优秀的程序都是在开始动手编程前已经花了大量时间去思考的。
  • 今天我仍旧认为检验编程能力的最好方法之一就是给程序员一本30来页的代码,看看他阅读和理解的速度有多快。
  • 成为程序员的最佳途径是编写程序并研究其他人编写的优秀程序。我自己以前就是去翻计算机科学中心的垃圾桶,找出他们的操作系统的程序清单。

约翰·佩奇:

  • 当你在复杂的程序上艰苦工作时,锻炼身体是很重要的。大部分程序员都缺乏身体锻炼,这样会失去敏锐的思维。往往在连续完成了第二个或第三个工作后,身体就虚弱了,以至于你会产生幻灭感,你会对着镜子说:“上帝啊,看看我,我为什么要这样做呢?”
  • 就个人而言,我在早晨的工作状态是最好的。我喜欢很早就起床,那时很安静,适合写程序。我尽可能在上午做那些需要思想高度集中的工作。尽量把会议安排在下午,那时我的精力不如早上了,但我仍能好好地谈话。到了晚上就很累了,无法创造性地解决问题。所以从晚上6时到第二天早上,我会毫无使用价值。

韦恩·莱特莱夫:

  • 改装跑车对我来说是一个令人满足的项目,因为我可以做些什么,让它出现在我的面前。这个项目最糟糕的问题是,我需要的某些零件根本不存在。而在计算机上,如果我半夜里需要什么东西,这个东西目前我还没有,我总可以自己做出来,不管它是什么。最糟糕的情况也不过是需要很长的时间才能做出来。
  • 我的编程人生就是制造工具。即使在10年前,和其他程序员比较时,我发现自己很大程度上喜欢通用化地解决问题,而其他人则更习惯于写程序解决某一特殊需求。他们的程序常常比我的交付得更快,但我的程序则生命期更长。当特殊需求改变时,他们的程序也就完蛋了,每次都需要重新写。我写程序的方式总是让程序能解决一类问题,而不是单独一个。
  • 仅从视觉角度讲,代码不应当在任何地方掉出打印纸的边缘
  • 使得程序变得干净,是走向优雅的一步。
  • 我发现注释可以分为两类:一类是解释显而易见的东西,比无用还糟糕;一类是你需要解释非常复杂、有很多关联性的代码。嗯,我总是力图避免写出复杂的代码。我写程序总是力争把代码写得稳固、清晰、干净,哪怕是需要额外多写五行。我一般认为,你需要写的注释越多,你的程序就越糟糕,肯定是哪里出了什么问题了。好的程序并不需要很多的注释。程序本身就应该是注释。

丹·布兰克林:

  • 仔细观察软件行业销量最大的软件,你会发现,这些软件一般都是由几个人开发的。123其实是两个人编写和设计的,一个全职程序员,一个兼职程序员;VisiCalc也一样。我没记错的话,dBASE最初全是一个人写的。Paradox是两个人开发的。软件就是这么开发出来的。

乔纳森·萨奇

  • 好的程序员是天赋、气质、动机和努力工作的结合。我知道有很多人期望在很短的时间就成为一名好的程序员,但能成功做到这一点的人并不多。成功来自一遍又一遍地做同样的事情,每一次学习一点点,下一次都做得更好一点。我非常幸运,在职业生涯初期,可以做很多涵盖面很广的、有趣的工作。现在人们很难获得广泛全面的工作经验了,因为工作已经被细分了。人们往往在很早就开始专攻某一方面。
  • 我发现,几乎所有的编程都是惊人地相似。有一些基本的算法、循环和条件语句,但最终都会归结为同一过程。

弗兰克斯顿

  • 我曾听人说我的代码很容易接手,我写代码的确是为了让人很容易读懂和接手。

雷·奥奇:

  • 我推崇严谨、一致而清晰的结构。另外,我认为软件应该高度模块化和分层,非常灵活地运用大量文件和目录。如果你必须分别构建不同组件,那么接口自然就会更加凸显出来,要求你规范这些接口。当许多人共同开发一个程序时,在项目早期确立全局的错误处理、参数传递和子程序命名规范(虽然不见得所有人都会同意),显得非常重要。
  • 如果你是硬被拉入编程这一行的,我建议你保持乐观的心态,尽量多编程,同时尽可能参加各种不同的项目。尽可能多把时间花在计算机上,还要学会准确判断自己的职业倦怠状况(burnoutlevel)。要是别人觉得你很古怪,不用放在心上。

安迪·赫兹菲尔德:

  • 编程是我能想到的唯一工作,可以让我身兼工程师和艺术家两种角色。它包含难以置信的、严密的技术元素,这是我所喜欢的,为此你必须一丝不苟,思维缜密。另一方面,它有极具创造性的一面,唯一真正的限制就是你的想象力。这两种元素的联姻使得编程独一无二。你必须既当艺术家又当科学家,我喜欢这一点。我喜欢在编程工作的核心中创造魔法把戏。看到魔法把戏——你的程序的核心——第一次正确工作时,那将是编写程序最激动人心的时刻。
  • 在我看来,只有设计者和实现者是同一拨人,才能把工作做好。写代码的人就是设计代码的人。

岩谷徹:

  • 你必须洞察人们的心灵,并拥有足够的创造力,想象出别人想不到或者无法想象的东西。你必须逼迫自己做些不同寻常的事,追求与众不同。你还必须有能力想象并给出组成游戏的图像,你不应该屈从于脑海里一开始浮现的简单想法。说到底,你必须乐于给人们带去快乐。这是成为优秀游戏设计师的基础,也是成就优秀游戏设计的必由之路。

关于艺术

查尔斯·西蒙尼:

  • 最优算法的知识当属科学,结构的想象则是艺术。这些算法的细节,以及编写高效代码实现这些结构的转换,是编程像手艺活的一面。从技术上讲,这就是所谓维护结构的不变性。编写代码以维护不变性是相对简单的技艺,不过这需要非常用心并辅之以大量训练才能练就。

巴特勒·兰普森:

  • 能被视为纯艺术的程序少之又少。程序应当实现某种功能,而艺术性只是其中一部分。不过,在我说编程是艺术时,意思跟说数学是艺术差不多——人们通常也不会把数学列为艺术。

加里·基尔代尔:

  • 它当然有艺术的成分在里面。但很多的编程是发明和实现。这很像一个木匠,在脑海里有他要做的柜子的样子。他要努力解决设计和施工的问题,直到柜子成型。我编程所做的差不多也是这样。编程也有科学成分在里面,不

韦恩·莱特莱夫:

  • 我认为编程有科学的成分,也有艺术的成分。计算机越人性化,里面的艺术成分就越多。游戏开发人员主要处理的是屏幕上的艺术形式,他们是在用高科技的产品来表达那种艺术。这种情况就跟你要做雕塑也得懂得黏土的化学组成一样。不过,你只需要学习几分钟黏土的知识就可以开始进行雕塑,而要胜任计算机上的工作则需要很长时间。不仅是时间,还需要热情。

鲍勃·弗兰克斯顿:

  • 在工程方面,如果做错了,会很容易看出来,因为有些东西会出问题。但好的工程和好的艺术并没有差别。它易于理解吗?便于维护吗?是否简单?是否有不必要的复杂性?如何理解它?在这个意义上,艺术和工程是相似的。当然,在纯艺术领域,很少需要操作测试,所以出点问题也不容易发现。工程领域比较实际,因为需要让某些东西可以工作。但它是不是工作一次就散架了?是不是为了修复一个bug会产生出更多的bug?一般来说,越是优秀的工程师,生产的机器就越有艺术的美感,也越有可能正常运转。
  • 在音乐和其他艺术形式中,我们会试图遵循一定的规范,但同时我们也会在某些方面突破这些规范。在音乐中有很多规则,你需要知道什么时候突破它们,什么时候遵循它们,就好像编程一样。教人写作的时候,可以告诉他从列提纲开始,这样可以使文章更有组织和条理。在编程领域,有很多关于组织和条理方面的技术可以教。如果你是一名雕塑家,你最好懂得重心在哪里,或者至少对重心有点感觉,否则,当作品倒下来的时候是有可能砸死人的。在艺术领域,你会问自己别人如何感知你的作品。你会尝试建立一种特定的感性印象。我认为很多艺术家对主题的看法差异会很大,就像许多程序员一样。在交流的时候,不管是写作还是编程,你所表达的内容必须能被对方理解。如果连你自己都无法把程序解释清楚,那么计算机能够正确运行的可能性就很小。

彼得·罗伊森:

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

杰夫·拉斯金

  • 音乐、艺术和计算机不能相提并论。但我确实一直努力做那些能让人们快乐的事情。我喜欢当音乐家的一个原因是,世界上的音乐家很少干什么坏事。如果你是物理学家,可能发明会爆炸的东西。但音乐家绝不可能干这事。艺术家可以创作政治宣传海报,但对音乐家来说,所创作的通常是中立的东西。我一直热衷于做那些会让人们快乐的事情。
  • 我不做视觉艺术,但我还是个音乐家,尽管演奏的机会并不多。现在经营公司,我没有充足的时间来练习。偶尔,我会受邀在朋友的婚礼上演奏。我也是靠到酒吧和夜总会演奏才读完研究生的。在宾夕法尼亚州立大学,每周三晚上我会为老电影做钢琴伴奏。我家里有一架9英尺长(约2.75米)的三角钢琴。我喜欢弹奏巴赫和莫扎特。

斯科特·金

  • 很多音乐家不讨厌编程,能够编程的音乐家比能够编程的其他艺术家要多得多。音乐家,至少是受过古典音乐训练的,都习惯用抽象乐谱来工作,他们已经习惯了这一间接的过程。这不仅仅是乐谱不同于音乐,而且在他们头脑里的概念也是不同的。他们先在头脑中有了音乐,然后再用乐谱把音乐写出来。

加隆·兰尼尔:

  • 很多懂计算机和数学的人也懂音乐。音乐和编程语言相似,也有一套相当复杂的记号,即乐谱。还不止这些,乐器本身更像我所要做的事情。因为,使用我的编程语言,你在程序运行时与其进行交互,而不是事先规定它该做什么,然后期望运行结果是正确的。这更像演奏乐器而不像读乐谱。
  • 计算机本身没有什么特性。它们是空的,就像一张白纸。因为它们的思想完全是空的,所以它们的特性完全由人来决定,其程度超过任何其他人类活动的领域。这就是我把我的语言设计成可以具有那么多种不同形式的原因——它必须满足不同的人的需要。我更多地把编程看作是艺术。

迈克尔·霍利:

  • 我认为把计算机和艺术媒介放到一起,会让人对艺术和技术都感到耳目一新。
  • 在高中和我的贝尔实验室经历之后,我去了耶鲁,修了音乐和计算机科学的双学位。我大部分时间都花在弹钢琴上,那有时候比摆弄计算机更有趣。不过,跟计算机科学相比,靠钢琴谋生可是非常痛苦的

关于计算机、科学

巴特勒·兰普森:

  • 就物理学和数学而言,一如其他正统的学科,要想有所成就,必须能够清晰地思考。这就是计算机行业的许多成功人士都来自这些领域的原因所在。而现在人们通常一直待在计算机系,要有所成就会更加困难,因为这是一门非常浅显的学科,无法驱使你全力发挥出自己的聪明才智。
  • 通过数学,你学会逻辑推理。你还会学到如何证明,以及怎么处理抽象要素。通过物理学等实验科学或人文学科,你学会如何应用这些抽象在现实中建立联系。
  • 学习数学。学会思考。阅读。写作。这些东西会更有持久的价值。学习如何证明定理:过去几个世纪累积下来的大量证据表明,这项技能可以运用到其他许多事情上。只学BASIC编程实在不靠谱。

约翰·沃诺克:

  • 我上了大学,一直念到硕士,因此接受了扎实良好的通识教育。我相信在数学、英语和基础科学方面拥有坚实的基础极为重要。然后,等到读研时,可以尽管放手去学习计算机知识。如果你真想取得成功,先适应社会其他领域,然后再进入计算机行业,这才是更为可取的成功之道。

比尔·盖茨:

  • 计算机科学正在飞速发展,但它不像数学,数学天才在300年来一直在不断地丰富着数学理论,而人们愿意投身到计算机领域却不过是最近20年的事情。一些卓越的人加入到计算机科学领域并做出了贡献。和以前相比,编程现在已经是非常主流的工作了。人们在很小的时候就开始接触计算机,这有助于改变计算机科学领域的思维方式。很多优秀的程序员在他们十几岁时就开始编程了,在那个年纪思考问题的方法也许会更灵活一些。在过去,人们认为单单成为优秀程序员是不够的,你还得去管理别人或处理其他事情。幸运的是,这种情况正在改变,现在人们认识到计算机是一门科学,是值得坚持下去并教授给其他人的。
  • 数学对计算机科学有着很大的影响。大多数优秀的程序员都有一定的数学背景,因为它有助于学习证明定理过程中的纯正性,在证明定理的时候不能做模糊的陈述,只能做精准的陈述。在数学中,不仅要建立完整的特征描述,而且要以很不明显的方式把定理结合起来。你常常会去证明一个问题是可以在更短的时间内解决的。数学与编程有很直接的联系,因为我是这么看待这个问题的,所以我的这种观点可能比别人更强烈一些。我认为两者之间有着天然的联系。

丹·布兰克林:

  • 部分是科学,部分是技能。科学里描述的某些内容也可能很有用,比如电源设计等。但编程也有手艺的成分,见习训练是编程的必经之路。通过见习训练,你可以掌握技能。有些事情,说到底就是熟能生巧。因此,它更像是一门艺术或手艺。编程和当精算师不同,它更多的是标准化的手艺。

弗兰克斯顿

  • 计算机科学这个词用得有点过度了。我更喜欢用软件工程、计算机工程或信息工程。因为工程没有那么绝对,所以我更愿意把一些事情看作工程。当然,编程是带有科学成分的。我认为计算是一个比较窄的概念。很多科学主要是理解交互关系的复杂性。但对编程本身而言,我觉得更多是工程规范。

鲍勃·卡尔:

  • 编程是手艺和科学是两者的结合。我非常确定地做出这一论断。当然,软件中有一些是科学性很强、有根有据的规则,它们对于软件开发是至关重要的。但优秀的软件并不止于此。比如说,如果你看看那个产生了Framework软件设计的决策树的草稿,会看到我花了很长时间在那儿思考、写写画画——许多的潜意识活动。这就是艺术所在。在艺术上,你无法阐明如何达到最终结果。从艺术的角度来看,最好的软件来自于直觉的范畴。

其他精辟语录

鲍勃·卡尔:

  • 如果现在给我两个选择,一个是拿一半的钱做我喜欢做的事,一个是拿两倍的钱做别人让我做的事,我会选择低收入和自由。当在工作上很快乐时,我并不需要开一辆保时捷,因为那并不是生活的重要组成部分。做自己喜欢的工作则是我生活的一个重大组成部分。

彼得·罗伊森:

  • 我对成功的理解是,白天可以做自己喜欢的事情,月末可以付得起账单。这样的成功不难获得。
  • 大机构并没有创造环境来鼓励员工进行创造性的思考。员工做到了要求做的事情,就可以得到报偿,多做也没有用。没有动力的话,给程序员提要求的人拿不出引人入胜的项目,而程序员也不会花时间去思考解决问题的有趣方式。

杰夫·拉斯金:

  • 当下的现实:你赚的钱越多,愿意聆听你的人就越多。如果你的话没被《财富》、《福布斯》或《华尔街日报》引用过,就没有人会理睬。如果你说某样东西能赚很多钱,无论你说的是真是假,人们都会洗耳恭听。
  • 在苹果公司,挣到不少钱又没什么改变的人屈指可数,布里安·霍华德便是其中一个。他这人很棒。我不清楚他身家有多少,不过他仍然开着10年前我以75美元卖给他的那辆车。
  • 周围其他人开的都是保时捷928或奔驰,而我从未想过要开什么豪车。但是他们非常想让我开辆体面的车。于是我找我兄弟商量,他给我支了一招。他对我说:“一辆全新奔驰或保时捷的价钱,完全可以买辆车况极佳的二手劳斯莱斯。这样就不会有人再抱怨你开的车不够体面,而你也不用完全照别人的想法行事。”于是我买了辆二手劳斯莱斯。说来也真逗,公司里有些人之前从来不跟我说话,但是在我换车之后,他们突然开始笑脸相迎,乐意跟我搭话。不管怎么说,换车之后,我还真感受到了不少我们所享有的民主。当我驶入加油站时,他们会一拥而上,开始悉心擦拭车窗,并尊称我“先生”。我可以把车停在餐厅门口的禁泊区,他们会说“先生”,“谢谢您”,“我们很高兴您把车停在大门口,这样所有人都能看到有位劳斯莱斯车主大驾光临”。另外,驶入麦当劳免下车购买通道时也很有意思。劳斯莱斯让我看尽世间人情百态。

岩谷徹:

  • 让人悲伤要比让人快乐更加困难。讲几个笑话也许很快就能把大家逗笑,但要让人们落泪却需要创造特别的情境,需要的时间也更长。
posted @ 2021-09-08 15:19  雪山飞猪  阅读(474)  评论(0编辑  收藏  举报