`
verge
  • 浏览: 13329 次
  • 性别: Icon_minigender_2
最近访客 更多访客>>
社区版块
存档分类
最新评论

转:为什么每个人都急不可耐?(Teach Yourself Programming in Ten Years)

阅读更多

原文:Teach Yourself Programming in Ten Years
作者:Peter Norvig
翻译:郭晓刚(foosleeper@163.net
最后修订日期:2004-3-19
2005-01-12增加了新的译本链接。

本中文译本得到了Peter Norvig的许可。

为什么每个人都急不可耐?


走进任何一家书店,你会看见《Teach Yourself Java in 7 Days》(7天Java无师自通)的旁边是一长排看不到尽头的类似书籍,它们要教会你Visual Basic、Windows、Internet等等,而只需要几天甚至几小时。我在Amazon.com上进行了如下搜索:
pubdate: after 1992 and title: days and (title: learn or title: teach yourself)
(出版日期:1992年后 and 书名:天 and (书名:学会 or 书名:无师自通))
我一共得到了248个搜索结果。前面的78个是计算机书籍(第79个是《Learn Bengali in 30 days》,30天学会孟加拉语)。我把关键词“days”换成“hours”,得到了非常相似的结果:这次有253本书,头77本是计算机书籍,第78本是《Teach Yourself Grammar and Style in 24 Hours》(24小时学会文法和文体)。头200本书中,有96%是计算机书籍。
结论是,要么是人们非常急于学会计算机,要么就是不知道为什么计算机惊人地简单,比任何东西都容易学会。没有一本书是要在几天里教会人们欣赏贝多芬或者量子物理学,甚至怎样给狗打扮。
让我们来分析一下像《Learn Pascal in Three Days》(3天学会Pascal)这样的题目到底是什么意思:


学会:在3天时间里,你不够时间写一些有意义的程序,并从它们的失败与成功中学习。你不够时间跟一些有经验的程序员一起工作,你不会知道在那样的环境中是什么滋味。简而言之,没有足够的时间让你学到很多东西。所以这些书谈论的只是表面上的精通,而非深入的理解。如Alexander Pope(译注:英国诗人、作家,1688-1744)所言,一知半解是危险的(a little learning is a dangerous thing)。

Pascal:在3天时间里你可以学会Pascal的语法(如果你已经会一门类似的语言),但你无法学到多少如何运用这些语法。简而言之,如果你是,比如说一个Basic程序员,你可以学会用Pascal语法写出Basic风格的程序,但你学不到Pascal真正的优点(和缺点)。那关键在哪里?Alan Perlis(译注:ACM第一任主席,图灵奖得主,1922-1990)曾经说过:“如果一门语言不能影响你对编程的想法,那它就不值得去学”。另一种观点是,有时候你不得不学一点Pascal(更可能是Visual Basic和JavaScript之类)的皮毛,因为你需要接触现有的工具,用来完成特定的任务。但此时你不是在学习如何编程,你是在学习如何完成任务。

3天:不幸的是,这是不够的,正如下一节所言。


10年编程无师自通

一些研究者(Hayes、Bloom)的研究表明,在许多领域,都需要大约10 年时间才能培养出专业技能,包括国际象棋、作曲、绘画、钢琴、游泳、网球,以及神经心理学和拓扑学的研究。似乎并不存在真正的捷径:即使是莫扎特,他4 岁就显露出音乐天才,在他写出世界级的音乐之前仍然用了超过13年时间。再看另一种音乐类型的代表--披头士,他们似乎是在1964年的Ed Sullivan节目中突然冒头的。但其实他们从1957年就开始表演了,即使他们很早就显示出了巨大的吸引力,他们第一次真正的成功之作《Sgt. Peppers》也要到1967年才发行。Samuel Johnson(译注:英国诗人)认为10 年还是不够的:“任何领域的卓越成就都只能通过一生的努力来获得;稍低一点的代价也换不来。”(Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price.) 乔叟(译注:Chaucer,英国诗人,1340-1400)也抱怨说:“生命如此短暂,掌握技艺却要如此长久。”(the lyf so short, the craft so long to lerne.)
下面是我在编程这个行当里获得成功的处方:


对编程感兴趣,因为乐趣而去编程。确定始终都能保持足够的乐趣,以致你能够将10年时间投入其中。

跟其他程序员交谈;阅读其他程序。这比任何书籍或训练课程都更重要。

编程。最好的学习是从实践中学习。用更加技术性的语言来讲,“个体在特定领域最高水平的表现不是作为长期的经验的结果而自动获得的,但即使是非常富有经验的个体也可以通过刻意的努力而提高其表现水平。”(p. 366),而且“最有效的学习要求为特定个体制定适当难度的任务,有意义的反馈,以及重复及改正错误的机会。”(p. 20-21)《Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life》(在实践中认知:心智、数学和日常生活的文化)是关于这个观点的一本有趣的参考书。

如果你愿意,在大学里花上4年时间(或者再花几年读研究生)。这能让你获得一些工作的入门资格,还能让你对此领域有更深入的理解,但如果你不喜欢进学校,(作出一点牺牲)你在工作中也同样能获得类似的经验。在任何情况下,单从书本上学习都是不够的。“计算机科学的教育不会让任何人成为内行的程序员,正如研究画笔和颜料不会让任何人成为内行的画家”,Eric Raymond,《The New Hacker's Dictionary》(新黑客字典)的作者如是说。我曾经雇用过的最优秀的程序员之一仅有高中学历;但他创造出了许多伟大的软件,甚至有讨论他本人的新闻组,而且股票期权让他达到我无法企及的富有程度(译注:指Jamie Zawinski,XEmacs和Netscape Navigator的作者)。

跟别的程序员一起完成项目。在一些项目中成为最好的程序员;在其他一些项目中当最差的一个。当你是最好的程序员时,你要测试自己领导项目的能力,并通过你的洞见鼓舞其他人。当你是最差的时候,你学习高手们在做些什么,以及他们不喜欢做什么(因为他们让你帮他们做那些事)。

接手别的程序员完成项目。用心理解别人编写的程序。看看在没有最初的程序员在场的时候理解和修改程序需要些什么。想一想怎样设计你的程序才能让别人接手维护你的程序时更容易一些。

学会至少半打编程语言。包括一门支持类抽象(class abstraction)的语言(如Java或C++),一门支持函数抽象(functional abstraction)的语言(如Lisp或ML),一门支持句法抽象(syntactic abstraction)的语言(如Lisp),一门支持说明性规约(declarative specification)的语言(如Prolog或C++模版),一门支持协程(coroutine)的语言(如Icon或Scheme),以及一门支持并行处理(parallelism)的语言(如Sisal)。

记住在“计算机科学”这个词组里包含“计算机”这个词。了解你的计算机执行一条指令要多长时间,从内存中取一个word要多长时间(包括缓存命中和未命中的情况),从磁盘上读取连续的数据要多长时间,定位到磁盘上的新位置又要多长时间。(答案在这里。)

尝试参与到一项语言标准化工作中。可以是ANSI C++委员会,也可以是决定自己团队的编码风格到底采用2个空格的缩进还是4个。不论是哪一种,你都可以学到在这门语言中到底人们喜欢些什么,他们有多喜欢,甚至有可能稍微了解为什么他们会有这样的感觉。

拥有尽快从语言标准化工作中抽身的良好判断力。


抱着这些想法,我很怀疑从书上到底能学到多少东西。在我第一个孩子出生前,我读完了所有“怎样……”的书,却仍然感到自己是个茫无头绪的新手。30个月后,我第二个孩子出生的时候,我重新拿起那些书来复习了吗?不。相反,我依靠我自己的经验,结果比专家写的几千页东西更有用更靠得住。
Fred Brooks在他的短文《No Silver Bullets》(没有银弹)中确立了如何发现杰出的软件设计者的三步规划:


尽早系统地识别出最好的设计者群体。

指派一个事业上的导师负责有潜质的对象的发展,小心地帮他保持职业生涯的履历。

让成长中的设计师们有机会互相影响,互相激励。

这实际上是假定了有些人本身就具有成为杰出设计师的必要潜质;要做的只是引导他们前进。Alan Perlis说得更简洁:“每个人都可以被教授如何雕塑;而对米开朗基罗来说,能教给他的倒是怎样能够不去雕塑。杰出的程序员也一样”。
所以尽管去买那些Java书;你很可能会从中找到些用处。但你的生活,或者你作为程序员的真正的专业技术,并不会因此在24小时、24天甚至24个月内发生真正的变化。


参考文献

Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.
Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.
Hayes, John R., Complete Problem Solver, Lawrence Erlbaum, 1989.
Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.



答案

各种操作的计时,2001年夏天在一台典型的1GHz PC上完成:
执行单条指令            1 纳秒 = (1/1,000,000,000) 秒
从L1缓存中取一个word        2 纳秒
从主内存中取一个word        10 纳秒
从连续的磁盘位置中取一个word    200 纳秒
从新的磁盘位置中取一个word(寻址) 8,000,000纳秒 = 8毫秒


脚注

T. Capey指出Amazon上面《Complete Problem Solver》的页面中,《Teach Yourself Bengali in 21 days》和《Teach Yourself Grammar and Style》被列在了“购买此书的顾客还买了以下书籍”栏目里面。我猜其中一大部分察看这两本书的人都是从我这里过去的。


译本

感谢以下作者将本文翻译成其他语言:
日文(Yasushi Murakawa),中文(郭晓刚),繁体中文(Jason Chen),西班牙文(Carlos Rueda),德文(Stefan Ram),法文(P. E. Allary),土耳其文(Çağıl Uluşahin)。


Peter Norvig (Copyright 2001)
分享到:
评论

相关推荐

    经典英语美文短篇.doc

    这篇文档名为"经典英语美文短篇.doc",是一篇以母爱为主题的英语短文,通过描述孩子从出生到十岁之间与母亲互动的场景,展现了母爱的伟大和无私。文章采用简洁的语言,通过一系列日常生活中的小故事,揭示了孩子在...

    小学语文反义词慢条斯理的近义词反义词

    3. 急不可耐:形容非常迫切,无法等待,表现出与"慢条斯理"相反的情绪。 4. 疾步如飞、日行千里、慌慌张张、风风火火、急不可待、石火电光、一马当先、迫在眉睫、手足无措、一日千里、急如星火、手忙脚乱、健步如飞...

    成语试题和答案.doc

    - 【临】:(3) A、没有一样,每个成语中的“临”含义不同,分别是“来到、靠近”(身临其境)、“面对、对着”(居高临下)。 以上内容详细介绍了文档中涉及的成语知识,包括成语的含义、使用场景以及相关的历史...

    2020春六年级语文下册第三单元9那个星期天写作特色新人教版

    这篇文章主要讲述了主人公在一个星期天等待母亲带他出门的经历,期间通过多种手法展现了人物的心理变化。 首先,文章通过“繁笔”手法来深化人物心理的刻画。作者没有直接使用诸如“焦急又兴奋”的词汇来描绘人物...

    山东省济南市八年级下学期第三单元测试语文试卷精选.doc

    4. **错别字纠正**:检测学生的词汇准确度,识别常见的易错字,如“及不可耐”应为“急不可耐”,“精巧绝纶”应为“精巧绝伦”,“莫忠一是”应为“莫衷一是”,“震耳欲聋”正确。 5. **文学常识**:选项题中涉及...

    网站优化方案模板.doc

    拿中国最大的搜索引擎百度为例,它会觉得这个新站毫无目的性,也不能为客户创造价值,就会将这个新站打入冷宫。至于什么时候再能出山,这就很难说了。 因此,这是我们需要极力避免的一种情况。谋定而后动,会节省很...

    初二语文下册第三单元测验试卷【新人教版】.doc

    4. **错别字修正**:检查学生对常见成语和词语的正确书写,例如"及不可耐"应改为"急不可耐","精巧绝纶"应改为"精巧绝伦"等。 5. **文学作品理解**:通过选择题形式,测试学生对《敬畏自然》、《罗布泊,消逝的仙湖...

    (2020年秋季版)七年级道德与法治上册 第五单元 成绩内外 第十三课 成绩之外的收获 关于成功与失败的区别素材 教科版.doc

    这则故事不仅适用于学生的学习,同样适用于我们每一个人在工作、生活中的各种挑战。 故事中的两个徒弟,面对同样的条件,却得到了截然不同的结果。他们共同选择了端午节正午的优质稻米,汲取了高山冰雪初融的清泉,...

    广东省韶关市2020学年九年级语文上学期期中试题 新人教版.doc

    【部分内容】展示了试卷的具体题目,涉及古诗词默写、词语填空、语病修改、句子续写以及阅读理解等多个方面,这些都是语文学习中的基础和重点。 1. 古诗词默写: - "大漠孤烟直,长河落日圆" 出自王维的《使至塞上...

    2016年北京中考满分作文:北京的初雪_900字决战中考2021系列.docx

    1. **生动的描绘**:文章中,作者将初雪比作“急不可耐”的舞蹈者,与大地、天空、树林互动,赋予自然以生命力,使得描述更加生动。 2. **情感共鸣**:作者将雪花与“恋人”相联系,通过比喻和拟人的手法,表达了对...

    1格列佛游记——学习ppt课件

    - “这些人急不可耐地往我周围挤”等句子描绘了小人国臣民对格列佛的好奇与恐惧心理。 - **人物性格**: - 格列佛的性格特征包括善良、宽容等,这些特点让他能够逐渐赢得小人国人民的信任。 - 通过与小人国居民的...

    WordPress 留言回复插件推荐WordPress Thread Comment

    如果你的博客订阅人比较多,那么,留言的放开肯定会非常的多,当留言多到一定程度是,页面的打开速度就会比较较慢,如果页面加载慢的话,可想而知,当访客访问时,就会急不可耐的跳出去,这样的话,我们就会损失很多...

    统编版语文6年级(上)专项训练——课外阅读(含答案).docx

    - 修辞手法:文中运用了拟人化手法,如“新叶急不可耐地从干枝秃条上冒出来,悄然颤动小小的身子”赋予了新叶生命力和情感。 - 描写技巧:作者对新叶的颜色、形态和生长过程进行了细腻的描绘,如“片片澄明透亮,...

    2格列佛游记——学生学习课件

    - **战无不胜**:形容无论做什么都能取得胜利,常用于形容军队或个人的能力出众。 - **近义词**:简朴—朴素、式样—款式、清晰—清楚。 - **反义词**:简朴—奢侈、束缚—自由、清晰—模糊。 ### 三、整体感知 ##...

    山东省德州市2015-2016学年八年级上学期9月月考试题(语文).doc

    【标题】和【描述】提及的文件为一份中学语文月考试题,主要涵盖了语文基础知识的考核,包括字词发音、错别字检查、成语运用、语病辨析、标点符号使用、文学常识以及古诗词默写等。下面将详细阐述这些知识点: 1. *...

    Linux国内使用现状.pdf

    这类用户大多是电脑爱好者或电脑发烧友,他们在1999年受到媒体的炒作影响,纷纷自发购买各种发行版,并急不可耐地将它们安装到自己的机器上。对个人用户来说,安装使用Linux完全是出于好奇,或者是抱着用用看的心态...

    小学五年级上学期语文期末训练题.doc

    - 文章以胡杨树为话题,讲述其在恶劣环境中顽强生存的故事,旨在启示学生学习胡杨的生存智慧,如何在复杂社会中去除负面情绪,吸取有益信息。其中涉及的反义词如“干旱”与“湿润”,“生存”与“灭亡”。学生需要...

    2015语文S版语文三上《好伙伴》ppt课件4

    根据给定文件的信息,我们可以提炼出以下几个主要知识点: ### 一、课文《好伙伴》的主要内容及情感教育 #### 故事概述 - **故事背景**:讲述了主人公马哈多和他的两只好伙伴——一只猎狗与一只乌鸦之间的感人故事...

    《精彩极了和糟糕透了》(修改版_完整版).ppt

    在具体段落中,通过对巴迪的反应和心理状态的描绘,如“腼腆”、“得意扬扬”和“急不可耐”,读者可以感受到他对父母评价的敏感和期待。 文中的一些关键句子,如“赞扬声雨点般落到我身上”,运用了形象生动的比喻...

Global site tag (gtag.js) - Google Analytics