Contents

读书摘录-编程大师访谈录

Contents

【美】Susan Lammers

第1篇 查尔斯•西蒙尼 2017-04-30 采访者:编程是一种技巧或技能吗? 西蒙尼:什么是编程?人们对此一直各持己见。有人说它是科学,有人说它是艺术,还有人称之为技能或手艺。我认为这三方面兼而有之。我们喜欢说它蕴含大量艺术成分,但是我们都知道它里面更多的是科学。 孩子们在学校里学习数学,高中毕业时,他们会以为数学就是加法和乘法,甚或代数和微积分。其实,算术,即使简单如加法的运算,背后也有令人难以置信的科学理论作支持。 计算机编程背后也有大量科学理论作支持。例如,哥德尔定理的数学证明冗长而复杂,但是如果借用计算机科学的图灵定理,证明起来不费吹灰之力。信息理论和计算机科学其他领域对数学影响巨大,反之亦然。 编程包含有大量科学,同时,它也有点像手艺。实际上,在许多人看来,编程是一项复杂的技能,这跟工具制造很像,需要精雕细琢。我认为,只要将科学、艺术和技能这三者拿捏得恰到好处,你就能取得一些引人瞩目的成绩。 2017-04-30 别人读几段你的源代码,有没有可能断定“这代码是查尔斯·西蒙尼写的”? 西蒙尼:噢,是的,毫无疑问。是不是我本人写的可能很难分辨,但有一点是确定无疑的:只要看了代码,你就能知道它是不是我的团队写的,或者是不是受我的影响写的。这是因为我从1972年起写的代码都遵循特定的命名规范,许多人称之为“匈牙利命名法”。你一眼就能分辨出哪些代码是受我的影响写出来的,包括Microsoft Word、Multiplan和Bravo,以及其他许多遵循这些规范写成的程序。 註: 原来是他 2017-04-30 进入公司第一天,程序员就会拿到几本书。其中一本是数学家乔治·波利亚写的《怎样解题》。(西蒙尼边说边从他办公桌旁的书柜里取出那本书,翻到某一页。)这两页很重要。这本书的其余内容就是基于这两页展开的。这就像一张问题求解的检查单。这是起飞前、起飞和着陆检查单。它不会教你如何飞行,但是如果不照做,即使你已经懂得怎么飞行,也有可能会坠机身亡。 求解问题时,我们遵循以下四个步骤:首先理解问题,然后拟定计划,接着执行计划,最后回顾整个过程。这样的书我们大概有四本,我觉得我们能使程序员比刚加入公司时变得更加优秀。

第2篇 巴特勒•兰普森 2017-04-30 但是我坚持认为,如果你打算在研究生院攻读计算机科学,那么本科学习计算机科学就是犯了大忌。 采访者:为什么? 兰普森:因为从长远来看,你学的内容大部分都没什么价值。你学不到施展聪明才智的新方法,而这些方法对你来说,要比学习如何编写编译器的细枝末节有 用得多,尽管后者可能是你本科念计算机科学时的学习内容。我认为,要是所有计算机科学研究生院联合起来,一致决定不接受本科念计算机科学的毕业生,世界会变得更好。学校应当要求这些人补习一年,学习数学或历史等科目,才能继续攻读计算机科学的研究生。不过,我还没看到有学校这么做的。 2017-04-30 举例来说,鲍勃·斯普劳尔(Bob Sproull)和我花了大量时间设计Interpress项目,那是一种印刷标准。我为此投入了很大精力,原本衷心希望施乐公司接受并促使所有人采纳。相反,他们完全把它搞砸了。结果,参与开发的部分人员离职并创办了Adobe系统公司,开发出一种类似的产品PostScript。很显然,后者成了大家现在都会采用的标准。这种事情很恼人,但是研究实验室的主要产品就是创意。 註: 这不就和盛大研究院一样 2017-04-30 :程序员需要具备什么样的素质才能写出成功的程序? 兰普森:最重要的素质是能够把问题的解决方案组织成容易操控的结构,其中每个组件都可以用简单的方式说明。有时,成功的程序员可以做到这一点,但他们无法解释自己做了什么,因为他们看不到那个结构。有些人之所以成为出色的程序员,是因为他们可以比多数人处理更多的细节。 2017-04-30 你有没有看到20年后每个指尖上都有一台计算机会出现什么问题? 兰普森:我不觉得那有什么问题。显然每只手腕上都会有计算机。计算机的存在是予人帮助,我希望它们会给人们带来正面的影响。 註: 手机

第3篇 约翰•沃诺克 2017-05-01 你编程有什么诀窍? 沃诺克:我不知道能不能归结到几点上。我前面提到过一些。不要早作绑定,尽可能推迟决定时间。眼界放宽一些,设计要比你自认为需要的程度更加灵活,因为从长远看你最终会需要这样。快速让某样东西工作起来,然后还能弃之不用。 从小的开始实验而不是大的入手学习。不要一头扎进周期长达两年且中间不出什么成果的开发当中。最好每两个月就要出点成果,这样你才能进行评估、重组和重新开始。程序员经常在一开始时过度定义他们的方法。他们可能会从一个中心构思着手,从第一天就开始编码。然后他们发现自己陷入重围,每件东西都开始膨胀,因为它们依赖于太多其他因素。应当反其道而行之,如果让过程较为宽松,保持一定的自由度,并在最后阶段加快速度,长远来说,你会做出更好的产品。

第4篇 加里•基尔代尔 2017-05-01 你说编程对很多人来说也是一种宗教体验,这是什么意思呢? 基尔代尔:嗯,如果你和一群使用相同编程语言的程序员谈论编程的话,他们几乎可以成为那种编程语言的传教士。他们组成了一个紧密结合的社群,坚持一定的信念,在编程时遵循一定的规则。就像是一个把编程语言当作是圣经的教会。 FORTH是一个很好的例子,它是一种编程语言,对于很多人来说,可能很接近宗教的体验。当FORTH刚出来的时候,其信徒就声称它做任何算法都能快上十倍。这是一个典型的宣言。如果你在这点或其他任何方面有异议,你会发现自己是对牛弹琴,而且你是绝对不会被容许加入“教会”的。我并不想贬低使用这一种语言的人。那是一个非常能给人帮助的团体,所用的也是一种非常有效的语言,但他们没有基于理性去讨论问题,他们是基于信仰的。说过这句话,我可能会收到一千封有关FORTH及人们对其宗教体验的邮件。但是就算我能整天鼓吹LISP的神奇,我也不会把自己归到一个特殊的派别中。 註: 哈哈。php

第5篇 比尔•盖茨 2017-05-01 不,我认为在过了最初的三四年后,就会非常明显地显现出你是否是一个优秀的程序员。刚开始的几年中,你可能会更多地知道怎样去管理大型项目和不同个性的人,但在三四年后,就能很清楚地看出你会成为什么样的程序员了。在微软没有哪个程序员是在平庸了几年之后突然间一鸣惊人的。我和一个人谈谈他的程序,马上就能知道他是否是个好程序员。如果他真的很棒,每个细节他都会脱口而出。 就像下棋的人一样。如果你特别喜欢下棋,会很容易记住10盘棋中的每一步,因为你已置身其中了。其他人看到国际象棋选手或程序员能记住每个细节时,觉得他们像个怪物。其实这很正常。即使到了今天,在我写了微软的BASIC程序10年后,我仍可以在黑板上大段大段写出当时的源代码。 2017-05-01 编程需要非常大量的精力,所以大多数程序员都比较年轻。这就会带来一个问题,因为编程需要很多的训练。在年轻时,目标不是很持久,可能会被这样那样的事分心。但是年轻的程序员应当坚持下去,他们会变得更出色。作为程序员,我认为自己在1975年到1980年之间的提高是最明显的。在1975年,我会说:“嘿,看看,我什么事情都能做。”我真的认为自己可以,因为我读了大量代码,从来没有发现哪段代码是我无法快速读懂的。今天我仍旧认为检验编程能力的最好方法之一就是给程序员一本30来页的代码,看看他阅读和理解的速度有多快

第6篇 约翰•佩奇 2017-05-01 从一个计算机程序员转变到运营一个庞大的公司,你觉得困难吗? 佩奇:这个角色转换是一个非常平缓的过程,因为我已经做了二十多年的管理人员,我可以告诉你真相,最难的是从管理者重新变成程序员。在创办公司前,我 在惠普已经习惯于领导很多人了。再回到编程工作时,我被迫完全依靠自己。真是让人一震。事实上这有点儿可怕——我不知道自己是否还能编程。但是,就像骑自行车一样——你永远都不会忘记的,只要一踏脚蹬,车就奔着夕阳去了。 2017-05-01 独自一人编程和一个团队合作编程有什么不同? 佩奇:如果一个产品需要四到五个人开发,那和你自己一个人编程时采取的方法是不同的。我坚信只能由一个人来做产品和高层结构的设计,最多不能超过两个人。所有的设计出于一个头脑,才能够实现和谐与一致。如果试图取悦于所有人,让一个委员会来做设计,你的方向就错了。那绝对是致命的。 所以我在定义阶段会用一个人数非常少的团队来工作,然后如果有必要,再扩大团队来实施编程设计。实施设计方案所需要的队伍越大,就越必须严格地把整个系统划分成可管理的模块,并定义好相互间的接 口。除非一个程序大到必须由两三个人以上来做,否则不必编写很多结构化程序报告,也不用为每个步骤都编写文档。 有些系统,例如设计一个控制航天飞机的程序,需要上百名程序员。那就必须严格地把结构划分成可管理的模块才行。一个小系统的架构可能会过于大,一个大系统的架构可能会过于小——使用的技术必须与问题的规模相匹配。我就是这样做的。 2017-05-01 有些人觉得完成项目真是太过瘾了,他们做完一个项目就接着又做另一个了。这样会把自己累垮的。如果连续开始新的项目,情况会变得很糟。 另外,当你在复杂的程序上艰苦工作时,锻炼身体是很重要的。大部分程序员都缺乏身体锻炼,这样会失去敏锐的思维。往往在连续完成了第二个或第三个工作后,身体就虚弱了,以至于你会产生幻灭感,你会对着镜子说:“上帝啊,看看我,我为什么要这样做呢?

第7篇 C.韦恩•莱特莱夫 2017-05-01 另一方面,非常有意思的是专家系统。我的预测是,在两三年之内,专家系统不必再和人工智能牵扯在一起。这就是人工智能的历史:当某件东西开始变得众所周知时,它就独立出来了。模式识别曾经被当作是人工智能,但现在这是一个独立的领域。这也正是专家系统当下的命运。我认为专家系统在我们产业里将变得非常重要,就像垂直应用一样。 註: 和现在一样

第11篇 雷•奥奇 2017-05-02 我推崇严谨、一致而清晰的结构。另外,我认为软件应该高度模块化和分层,非常灵活地运用大量文件和目录。如果你必须分别构建不同组件,那么接口自然就会更加凸显出来,要求你规范这些接口。 当许多人共同开发一个程序时,在项目早期确立全局的错误处理、参数传递和子程序命名规范(虽然不见得所有人都会同意),显得非常重要。不过,对于代码该怎么注释、大括号怎么用或者代码该怎么缩进,我觉得你绝不应该对别人指手画脚。在修改别人的模块时,你最好还是按照他的惯例编写代码。这是学会与他人共事的必修课。 交流想法的环境应该是开放的。设计会议上允许非常激烈和紧张的讨论。我发现许多优秀设计师往往固执己见,但只要他们觉得是对的,就会毫不客气地坚持,但他们也知道什么时候应该怎么让步。优秀设计师不会有“非此创造”综合征。 2017-05-02 我过去常想,个人时间管理程序应该会非常便利。结果现在却得在公文包里装一台计算机随身携带,打开并启动计算机,就只为了查看我的会面安排,远不及我那口袋大小的通讯记事簿来得方便。我想要一本通讯记事簿,让我的秘书和我可以同时写入,这非常有用,因为我们俩都能便捷地安排我的时间。我希望哪个聪明的家伙能发明这种记事簿。 註: 手机日程管理软件

第14篇 杰夫•拉斯金 2017-05-03 1979年,苹果公司正致力于开发Lisa。不管你信不信,它最初的目标是开发一款字符界面的机器。我在苹果公司担任高级系统经理,对Lisa很不满。它非常昂贵,我认为苹果公司不够理智,居然以小型机的价格去跟DEC、通用数据公司和IBM比拼。 70年代初,我在斯坦福大学人工智能实验室做访问学者期间,在施乐PARC度过了大量时光。在我看来,施乐PARC在位图屏幕、通用键盘和图形方面的研究真是不可思议。因此,我极力游说,说服苹果公司把Lisa改成位图机器。我把施乐和苹果公司撮合到一起。施乐一度持有苹果公司10%的股票。 我提议开发一款容易使用并融合文字和图形的电脑,售价在1000美元左右。乔布斯认为这想法太疯狂了,这种机器不会有销路,我们绝不要这种玩意。他试图否决这个项目。 因此,我越过乔布斯直接找到当时的董事长迈克·马库拉(Mike Markkula),和他探讨我的想法。幸运的是,马库拉和时任总裁迈克·斯科特(Mike Scott)叮嘱乔布斯别管我。 我招揽了早期成员:巴德·特里伯(Bud Tribble)、布里安·霍华德(Brian Howard)和布雷尔·史密斯(Burrell Smith)。我们搬到另一栋大楼,打造Macintosh及其软件的原型,搭建并让它运行起来。后来,乔布斯接手后,他还编了个故事,把Mac项目称为“海盗行动”。我们并未像他后来说的那样,试图让这个项目远离苹果公司。我们跟苹果公司其他部门的联系十分紧密,我们只是尽量不让乔布斯干预这个项目。在头两年,乔布斯总想着要毙掉这个项目,因为他不明白它到底是怎么回事。 最初的Macintosh设计得既精心又合理。最后,苹果公司所有人都意识到,这是公司继Apple II后推出新产品的希望所在。随后,乔布斯接管了这个项目。他径直走进来,对我说:“我接手Macintosh硬件,你可以负责软件和出版物。”他抛出软件设计,要求Macintosh软件与Lisa保持兼容,并坚持使用鼠标。机器变得更大、更复杂,也昂贵得多。现在它跑起来黏糊糊的。你有没有用过MacWrite?我们这里把它叫做MacWait。又过了几个月,乔布斯对我说:“我来接手软件,你可以负责出版物。”于是我回答:“你也可以接手出版物。”说完便离开了。那是1982年5月。他和马库拉对我说:“请别走。再过一个月,我们会提供一份你无法拒绝的薪酬。”于是我给了他们一个月时间,他们开了一份薪酬,我没接受。 2017-05-03 近期《新闻周刊》上的一篇文章把我逗乐了,他说:“我还有几个不错的设计。”他从来没做过什么设计,他一款产品都没设计过。沃兹(Steve Wozniak)设计了Apple II。肯·罗斯穆勒(Ken Rothmuller)等人设计了Lisa。我和我的团队设计了Macintosh。温德尔·桑德斯(Wendell Sanders)设计了Apple III。乔布斯设计了什么?什么也没有。 註: 哈哈,乔布斯 2017-05-03 人工智能教会了我们大量关于我们自身以及知识的内容。非常廉价的机器上用不了靠谱的人工智能程序,至少目前行不通。 真正的人工智能有点像宗教。从前人们都说天空上面就是天堂和天使。然后你搭乘火箭飞船到了那里,发现并不是那么回事。于是你知道原来的理解有误。一旦你实现了某样东西,它就不再是人工智能。 曾几何时,国际象棋博弈程序一度被认为包含人工智能的成分。当我还在念研究生时,只要学会编写国际象棋博弈程序,你就可以拿到人工智能博士学位。现在你花上29.95美元就能买到国际象棋博弈程序,没有人称之为人工智能。它只是个会下棋的小算法。 首先,有个定义的问题。然后,它变得更加复杂。人们认为程序应该理解自然语言,但我们的话语方式对电脑或别人来说太不精确,无法弄清楚要做什么。这正是我们创造编程语言的原因。只要试过以英文写成的规格为基础开展工作,他们就会知道自己无法借此编写程序,因为它不够精确。因此,如果人类都不能做到这一点,基本上就不可能指望还能让机器做到。当你面对所谓的人工智能程序时,电脑必须已经掌握一个词汇表。比方说,你有5个命令,你想让机器理解与之等价的所有可能的英文表述,但是它理解不了所有等价的英文表述。有人可能会说:“拿个工号。”而英国绅士可能会说:“劳烦你给我们的员工派个数字编号。”这正是搞AI的人试图解决的大麻烦。 人工智能相关的许多承诺都被误解了。人工智能已经教导我们的有关语言的东西是美好的。那么,我是否认为人工智能值得做?绝对是。我是否认为这会转化出很棒的产品?会有一些。我是否认为这会实现你在大众传媒上了解到的承诺?根本不会。我会投很多钱到人工智能领域吗?没门

第15篇 安迪•赫兹菲尔德 2017-05-03 有个故事是关于沃兹的。沃兹是公司创始人之一,不用说,他分到了大量股票。有些人一点股票都没有,而有的人却拥有这么多股票,对此他觉得很不公平。于是他拿出自己的股票,宣布只要是在苹果公司工作满一定年限的员工,都可以从他那里买到2500股。沃兹的用意无疑是最好的,但结果这反倒让那些坏心肠的人欢天喜地。事情是这样的,许多不在乎钱财的雇员并没有行使股票购买权,于是那些贪心的家伙就对他们说:“好吧,我给你钱,我来买你的股份。”有些人不再认真工作,反而成了股票买手;他们令人生厌,个性糟糕,是不够格的工程师,毛孔里都滴着贪婪。在一个月内,有个家伙光靠这个捞了几十万美元。这实质上是在窃取沃兹的钱财。但这也是苹果公司上市时发生的故事的一部分。 到了1980年年底,在苹果公司工作不再那么有趣。通常你的头儿是从另一家公司挖过来的,对产品一无所知。最后,迈克·斯科特意识到苹果公司聘请的管理人员都是些眼高手低的家伙,1981年2月,他在一天之内把这些人都给解雇了。工程部门一共有90人,他解雇了其中40人。这一天在苹果历史上被称为“黑色星期三”。人们都惊呆了。 2017-05-03 就在Mac发布之后,Mac团队开始组建管理层的时候,我离开了苹果公司。我跟新来的技术经理有矛盾,他最初是我面试和同意录用的,没想到他是个控制和权力狂。这家伙认为我太傲慢,自以为可以通过考核给我差评打击我。我很震惊。我掏心掏肺地为这家公司卖命,尽我所能做到最好,每天工作15个小时开发这个项目。Macintosh本不该是这样的,但是这家伙却进来把它搞成了这样。因此我不得不选择离开,但是我把自己生命中整整两年献给了Macintosh,它是我最在意的。所以我一直待到Mac发布之后才离开苹果公司,开始自己单干。