Logo

编程大师访谈录

s24509127

ISBN:9787121038150

作者:Susan Lammers

译者:李琳骁 / 吴咏炜 / 张菁

出版社:人民邮电出版社

出版时间:2012-1

评价:☆☆☆

马云拆分阿里的原因。

采访者:小公司在逐渐发展成大公司的过程中会碰到什么问题? 沃诺克:诀窍是学习惠普的做法,把公司当作20家不同的小公司。不断拆分,决不让它发展成庞大的组织,直到没有人嫌它大为止。在工作关系上,员工数量尽量少,工作内容尽可能专,并以项目为导向,这样他们才能达到最佳工作状态。这也是我的目标。

简化问题,最佳方法是拆分问题。和拆分公司有异曲同工之妙。

采访者:你曾在海军研究生院教过课。如果再回去教的话,讲课方式会有不同吗? 基尔代尔:应该不会,因为我现在的编程方式与我当年教课时的编程方式没有任何区别。我最喜欢教的课程是数据结构。它把人带回到了编程的基础,即如何简化问题。编程过程中的部分工作就是解决问题。对于一个复杂问题,不论是设计计算机程序还是建造一座建筑物,解决问题的方式是什么?刚开始你会觉得问题太难解决了,随后你把问题分解成一个一个的小问题。这就是我想教给学生们的。

编程语言和宗教。

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

优秀会更优秀,平庸始终平庸。

采访者:经过多年的经验积累后,编程是否一定会更容易呢? 盖茨:不,我认为在过了最初的三四年后,就会非常明显地显现出你是否是一个优秀的程序员。刚开始的几年中,你可能会更多地知道怎样去管理大型项目和不同个性的人,但在三四年后,就能很清楚地看出你会成为什么样的程序员了。在微软没有哪个程序员是在平庸了几年之后突然间一鸣惊人的。我和一个人谈谈他的程序,马上就能知道他是否是个好程序员。如果他真的很棒,每个细节他都会脱口而出。 就像下棋的人一样。如果你特别喜欢下棋,会很容易记住10盘棋中的每一步,因为你已置身其中了。其他人看到国际象棋选手或程序员能记住每个细节时,觉得他们像个怪物。其实这很正常。即使到了今天,在我写了微软的BASIC程序10年后,我仍可以在黑板上大段大段写出当时的源代码。

向优秀者学习,你也会变得优秀。

采访者:学习计算机科学是成为一名程序员的最佳途径吗? 盖茨:不是,成为程序员的最佳途径是编写程序并研究其他人编写的优秀程序。我自己以前就是去翻计算机科学中心的垃圾桶,找出他们的操作系统的程序清单。 你要愿意去看别人写的代码,然后写自己的代码,再让其他人复查你的代码。你需要身处这个不可思议的反馈循环当中,让世界级的专家告诉你,你做错了什么。你不能让一些小小的个人习性阻碍你获得这些反馈信息。有些世界级的专家会在一些纯属个人偏好的细节上喋喋不休,比如说该怎样注释程序。你必须跳过所有这些东西,因为在某种程度上,他们是试图以自己的形象来塑造程序员,并试图让你按他们的方法行事。而这些可能并没涉及程序的纯质量问题。 如果和一个优秀的程序员聊一聊,你会发现他对他使用的工具非常熟悉,就像一个画家了解他的画具一样。优秀程序员们开发程序的方式都有很多共同之处,这点令人惊奇——他们得到反馈的方式,以及他们是如何精准地进行规范的,哪些是草率成就的,哪些是认真完成的。当你请这些人来看一些代码时,你会发现他们的反应通常是非常非常一致的。

代码层面上拆分,就是在拆分问题。

采访者:你会在程序里写很多注释吗? 莱特莱夫:事实上,不怎么写。在公司里,我因为写的注释不多被人批评过。我发现注释可以分为两类:一类是解释显而易见的东西,比无用还糟糕;一类是你需要解释非常复杂、有很多关联性的代码。嗯,我总是力图避免写出复杂的代码。我写程序总是力争把代码写得稳固、清晰、干净,哪怕是需要额外多写五行。我一般认为,你需要写的注释越多,你的程序就越糟糕,肯定是哪里出了什么问题了。好的程序并不需要很多的注释。程序本身就应该是注释。 模块应当小一些。当一个模块超过一页纸时,就是哪里出问题了。每一模块的顶部的确需要一行注释,用一句话解释一下这个模块是做什么的。如果你无法用一句话解释,一定是哪里出问题了。
comments powered by Disqus