《Programmers at Work》的原文摘录

  • 不,我认为在过了最初的三四年后,就会非常明显地显现出你是否是一个优秀的程序员。刚开始的几年中,你可能会更多地知道怎样去管理大型项目和不同个性的人,但在三四年后,就能很清楚地看出你会成为什么样的程序员了。在微软没有哪个程序员是在平庸了几年之后突然间一鸣惊人的。我和一个人谈谈他的程序,马上就能知道他是否是个好程序员。如果他真的很棒,每个细节他都会脱口而出。 就像下棋的人一样。如果你特别喜欢下棋,会很容易记住10盘棋中的每一步,因为你已置身其中了。其他人看到国际象棋选手或程序员能记住每个细节时,觉得他们像个怪物。其实这很正常。即使到了今天,在我写了微软的BASIC程序10年后,我仍可以在黑板上大段大段写出当时的源代码。 (查看原文)
    黄健宏 5赞 2012-07-26 12:30:38
    —— 引自章节:第五章
  • 在苹果最初几年,全公司只有我一个人拥有计算机科学学位。他们要是知道我其实当过教授和计算机中心主任,有可能不会让我进公司,所以这些我并没有跟其他人提起过。 (查看原文)
    Dexter.Yy 3赞 2012-02-20 02:12:15
    —— 引自第207页
  • 不管你想出什么点子,杰夫·拉斯金总是宣称他更早之前就发现了,伯勒尔最喜欢模仿杰夫的就是这个特点。 杰夫讲话时有点口吃,伯勒尔也精准拿捏到这一点。他一开始会学杰夫双手合十,然后用杰夫的语调轻呼:“我!我!我!我发明了麦金塔!” 然后伯勒尔就会切换成电台广播的声音,假装访谈者反驳:“不对,我以为是伯勒尔发明了麦金塔。” 他又切回杰夫的声音爆出最后的笑点。 “我!我!我!我发明了伯勒尔!” (查看原文)
    Dexter.Yy 3赞 2012-02-20 02:12:15
    —— 引自第207页
  • 最初的Macintosh设计得既精心又合理。最后,苹果公司所有人都意识到,这是公司继APPLE II后的希望所在,随后,乔布斯接管了这个项目。 (查看原文)
    Dexter.Yy 3赞 2012-02-20 02:12:15
    —— 引自第207页
  • 杰夫·拉斯金的麦金塔项目…,在苹果公司不受大家重视,有好几次都被迫终止。1980年夏季苹果内部再次大幅改组后,计划被终止了,但杰夫恳求麦克·斯科特和麦克·马库拉再多给一些时间,所以又多了3个月可以证明他努力的一切。 … 约两个月后,巴德说服伯勒尔以68000处理器代替6809,伯勒尔提出相当杰出的设计,引起乔布斯的注意,乔布斯就接管了项目…… (查看原文)
    Dexter.Yy 3赞 2012-02-20 02:12:15
    —— 引自第207页
  • …。又过了几个月,乔布斯对我说:“我来接手软件,你可以负责出版物。”于是我回答:“你也可以负责出版物。”说完便离开了。那是1982年5月。 (查看原文)
    Dexter.Yy 3赞 2012-02-20 02:12:15
    —— 引自第207页
  • 1981年2月25日星期三,…… 隔天我进办公室,… 当天下午斯科特的秘书就转告我,她已经安排我和乔布斯谈一谈。当时乔布斯已经参与麦金塔一个多月了,而且前一天刚把项目原创者杰夫·拉斯金赶走,…。杰夫抱怨乔布斯的领导后,乔布斯就逼杰夫非得强制休假不可。 (查看原文)
    Dexter.Yy 3赞 2012-02-20 02:12:15
    —— 引自第207页
  • 这家公司如果能取得成功,我将再次影响到数百万人。把这信息传播开来的媒介就是产品。如果公司赚得盆满钵满,大家就会听到我的信息。因此,很遗憾,当下传递信息的方法只能靠赚钱。 如果我想告诉全世界位图屏幕太棒了,不管我写多少文章,没人会理会。施乐公司发表过十几篇文章,有谁在意? 这样的状况无疑令人生厌,但是很遗憾,这就是当下的现实:你赚的钱越多,愿意聆听你的人就越多。…。如果你说某样东西能赚很多钱,无论你说的是真是假,人们都会洗耳恭听。 (查看原文)
    Dexter.Yy 3赞 2012-02-20 02:12:15
    —— 引自第207页
  • 驾驶飞机跟编程项目非常相似;起飞和降落很刺激,驾驶过程可能会非常累人,而飞机可能会随时解体。 (查看原文)
    泥多佛大 1赞 2012-03-13 18:10:46
    —— 引自第14页
  • 人们当初考虑编程语言是什么时,并没有打算用计算机来进行字处理。编程语言是由具有数学思维的人发明的,而字处理是由那些具有商务和办公室思维的人发明的,这是两个不同的世界。不同的人看待同一创意的方式并不一样。 (查看原文)
    泥多佛大 2012-03-14 06:01:57
    —— 引自第264页
  • 沃兹做的项目五花八门。其中一个是用尽Apple II的全部内存来计算数学常数E,精确到小数点后十万位。这个计算非常困难,因为Apple II的内存容量并不大。他必须利用每一寸内存,包括显示屏的内存,来保存这个很长的数字。他拿不到任何中间结果,因为所有内存都用来保存那个数字。这个程序跑一遍用时14天。那14天他就坐在边上,等着程序跑完的那一刻。通常试验到第六天,他的Apple II 就会出现花屏并崩溃。他会从头开始。他做的项目全都这么稀奇古怪。 (查看原文)
    李也奇 1回复 2012-07-18 21:32:34
    —— 引自第234页
  • 功能在某种程度上也可能使产品变得很糟,因为功能越多,用户手册就越厚。而功能只对那些肯花时间去使用它们的人才有用,这不像速度——如果打印页面的速度更快,在屏幕上显示的速度更快,重新计算的速度更快——那么产生的价值是惊人的。 如果能够提供一些简单的命令,程序通过这几个简单的命令就能有效地满足用户的需求,那么结果会好得多。非常好的程序的一个标志是在内部也能遵循简单的理念。如果程序想实现复杂的功能,可以通过简单的内部操作调用代码,而不必从头开始去做一系列复杂的操作。 (查看原文)
    黄健宏 2012-07-26 12:17:13
    —— 引自章节:第五章
  • 没有哪一个优秀的程序员会坐在那里说:“我要赚一大笔钱。”或者说:“我要卖出成百上千个拷贝。”因为这种想法不会对你解决问题带来任何帮助。 一个优秀的程序员想的是:是否应当把整个子例程都重写一遍,这样就能够让4个人而不仅仅是3个人调用了?能让程序快10%吗?是否应当好好想一想这里的常规状况是什么,这样就可以对校验条件进行排序了? 如果是一个优秀的程序员,你会让所有例程互相依赖,这样就不会有什么致命的错误了。这就是为什么必须有精准的判断,愿意备份并修改程序的原因。 (查看原文)
    黄健宏 2012-07-26 12:22:20
    —— 引自章节:第五章
  • 有些人刚一进到项目中就开始坐下来编码,而有些人则在编码之前把所有的过程都想清楚,我认为你会发现那些一开始就坐下来编码的程序员只是在把那些代码当做草稿使用。那些在他们头脑中思考的内容才是最重要的。 你必须得有非常聪明的程序员。一个优秀的程序员会一直不断地思考所开发的程序,无论是开车还是吃饭。不停地思考问题,需要耗费大量的脑力。 (查看原文)
    黄健宏 2012-07-26 12:28:54
    —— 引自章节:第五章
  • 编写程序最重要的部分是设计数据结构。接下来重要的部分是分解各种代码块。在开发到那一步并写出代码之前,你无法敏锐地感知那些公共子例程应该是什么样的。 (查看原文)
    黄健宏 2012-07-26 12:29:32
    —— 引自章节:第五章
  • 编程需要非常大量的精力,所以大多数程序员都比较年轻。这就会带来一个问题,因为编程需要很多的训练。在年轻时,目标不是很持久,可能会被这样那样的事分心。但是年轻的程序员应当坚持下去,他们会变得更出色。 。。。 在1975年,我会说:“嘿,看看,我什么事情都能做。”我真的认为自己可以,因为我读了大量代码,从来没有发现哪段代码是我无法快速读懂的。今天我仍旧认为检验编程能力的最好方法之一就是给程序员一本30来页的代码,看看他阅读和理解的速度有多快。 。。。 你必须只专注于代码,并把代码和你已经编写的程序关联起来。很多人会说:“我要花上好几天来看这些代码。”而一个优秀的程序员则会说:“我把代码带回家,晚上花一个小时就能全部看完。”这种能力的差异是巨大的。 。。。 你要愿意去看别人写的代码,然后写自己的代码,再让其他人复查你的代码。你需要身处这个不可思议的反馈循环当中,让世界级的专家告诉你,你做错了什么。 (查看原文)
    黄健宏 7回复 2012-07-26 12:35:36
    —— 引自章节:第五章
  • 在某些情况下,如果你倒着做事情,之前显得很复杂的问题突然之间会变得非常简单。例如,解析前向引用(forward reference)可能很难。要是倒着扫描,它们就变成了后向引用(backward reference),很容易解析 采访者:你是怎么进入微软的? 西蒙尼:决定离开施乐之后,我开始四处打探。我请鲍勃·麦特卡尔夫(Bob Metcalfe)共进午餐。鲍勃是以太网发明人,3Com公司的董事长和创始人,早我两年离开施乐。他给了我一张名单,上面列有我应该去找的人。名单上比尔·盖茨排在第一位。谁排在第二我记不清了,因为除了比尔·盖茨我没再找过其他人。 西蒙尼:什么是编程?人们对此一直各持己见。有人说它是科学,有人说它是艺术,还有人称之为技能或手艺。我认为这三方面兼而有之。我们喜欢说它蕴含大量艺术成分,但是我们都知道它里面更多的是科学。 编程包含有大量科学,同时,它也有点像手艺。实际上,在许多人看来,编程是一项复杂的技能,这跟工具制造很像,需要精雕细琢。我认为,只要将科学、艺术和技能这三者拿捏得恰到好处,你就能取得一些引人瞩目的成绩。 当你看到那些丑陋的屏幕时,程序员在艺术上的不足便一览无遗 西蒙尼:我觉得代码清单带给人的愉快同整洁的家差不多。你一眼就能分辨出家里是杂乱无章(比如垃圾和没洗的碟子到处乱扔)还是整洁如新。这也许意义不大。因为光是房子整洁说明不了什么,它仍可能藏污纳垢!但是第一印象很重要,它至少反映了程序的某些方面。我敢打赌,我在3米开外就能看出程序拙劣与否。我也许没法保证它很不错,但如果从3米外看起来就很糟,我敢保证这程序写得不用心。如果写得不用心,那它在逻辑上也许就不会优美。 “匈牙利命名法”是一种根据变量的属性自动为其创建名字的命名方法。这跟人们把当裁缝(tailor)的叫做泰勒(Taylor)以及把当铁匠(blacksmith)的叫做史密斯(Smith)非... (查看原文)
    bit3725 2013-01-19 22:06:27
    —— 引自章节:第1篇 查尔斯•西蒙尼
  • 兰普森:就物理学和数学而言,一如其他正统的学科,要想有所成就,必须能够清晰地思考。这就是计算机行业的许多成功人士都来自这些领域的原因所在。而现在人们通常一直待在计算机系,要有所成就会更加困难,因为这是一门非常浅显的学科,无法驱使你全力发挥出自己的聪明才智。 鲍勃·斯普劳尔(Bob Sproull)和我花了大量时间设计Interpress项目,那是一种印刷标准。我为此投入了很大精力,原本衷心希望施乐公司接受并促使所有人采纳。相反,他们完全把它搞砸了。结果,参与开发的部分人员离职并创办了Adobe系统公司,开发出一种类似的产品PostScript。很显然,后者成了大家现在都会采用的标准。这种事情很恼人,但是研究实验室的主要产品就是创意。 通常来说你不会扔掉之前的工作,你会试图把它修补好。这么做后果非常糟糕。首先,你并没有解决问题,只是把它转换成另一个问题,而后者不是你真正应该解决的问题。然后你不断修补程序,直到它解决了另一个问题。这种做法很不符合要求。 有时候,我觉得人们想要达成的目标纯属要求过高。程序员往往会无视如下事实:软件系统构建过程中之所以问题频发,就是因为他们尝试要做的东西实在太难了。他们相信计算机是无所不能的万能引擎。这很容易让人误入歧途,以为组建一支1、5、10、50个或1000个程序员的团队就可以让计算机做任何事情。而这显然不对。 优美的程序就像优美的定理,它会优雅地完成工作。它的结构简单明了。人们会说:“哦,是的。我知道怎么做了。” (查看原文)
    bit3725 2013-01-19 22:32:21
    —— 引自章节:第2篇 巴特勒•兰普森
  • 有一点非常重要,程序员看待一段代码应当像对待一本书的烂章节那样,弃之如敝屣。千万不要过份迷恋一个想法,绝不要固守某样东西以致不能在必要时把它丢掉,这才是程序员应有的态度。 另外,绝不要假设你知道的东西别人不知道。总会有聪明的家伙横空出世,提出更妙的算法,或者想出更简单的方法执行某个任务。这一行的一个诀窍就是尽早认识到这点,迅速采纳并善用之,而不必心存“非我创造不可”的烦恼,非要用自己的方式不可 采访者:你怎么辨别普通程序员和优秀程序员? 沃诺克:很难。面试阶段一般区分不出优秀程序员和差劲的程序员。这就像招揽作家。光从面试来看,你分辨不出某人的写作水平有多好。但是,如果这个人著有多篇获奖小说,你对他的才华就会有更清晰的认识。因此,我们的多数员工都是通过非正式渠道招聘到的。在业内做很长一段时间后,你会认识其中许多人。根据他们在业界的声望,你很容易就能找到自己想找的人。 采访者:你编程有什么诀窍? 沃诺克:我不知道能不能归结到几点上。我前面提到过一些。不要早作绑定,尽可能推迟决定时间。眼界放宽一些,设计要比你自认为需要的程度更加灵活,因为从长远看你最终会需要这样。快速让某样东西工作起来,然后还能弃之不用。 从小的开始实验而不是大的入手学习。不要一头扎进周期长达两年且中间不出什么成果的开发当中。最好每两个月就要出点成果,这样你才能进行评估、重组和重新开始。 程序员经常在一开始时过度定义他们的方法。他们可能会从一个中心构思着手,从第一天就开始编码。然后他们发现自己陷入重围,每件东西都开始膨胀,因为它们依赖于太多其他因素。应当反其道而行之,如果让过程较为宽松,保持一定的自由度,并在最后阶段加快速度,长远来说,你会做出更好的产品。 计算机语言不过就是计算机语言,一旦你学会了几种,其他学起来也就不会太难了。 我坚信好软件出自2到4人的小团队,成员之间互动频繁密集。最好的代码出自这类努力和付... (查看原文)
    bit3725 2013-01-19 22:36:09
    —— 引自章节:第3篇 约翰•沃诺克
  • 采访者:学生在上完你的课后,必须学会的最重要的原则是什么? 基尔代尔:我教的两件事情对学生们的学习来说是非常重要的:解决问题以及如何学习。知道如何学习能够让你顺利通过考试并获得其他的校园生存技能。而如果能学会如何解决问题,你这一生过得应该都会不错。 在确定数据结构之后,我就开始写一些小段的代码,并不断地改善和监测。在编码过程中进行测试可以确保所做的修改是局部的,并且如果有什么问题的话,能够马上发现。 采访者:在编码时,你会写注释吗? 基尔代尔:很少,除了在程序开头的地方写注释外,唯一加注释的地方就是数据结构。我不会对代码本身加注释,因为我觉得正确编写出来的代码本身就是很好的文档了 (查看原文)
    bit3725 2013-01-19 22:38:01
    —— 引自章节:第4篇 加里•基尔代尔
<前页 1 2 后页>