十年自学编程 彼得·诺维格

为什么每个人都这么着急?

走进任何书店,您将看到如何在24小时内自学Java,以及无穷无尽的变体,可以在几天或几小时内教授C,SQL,Ruby,算法等。亚马逊高级搜索[标题:自学,自学,自学,自2000年以来,共发现512本书。在前十名中,有九本是编程书籍(另一本是关于簿记的)。通过将“自学”替换为“学习”或将“小时”替换为“天”,可以得到类似的结果。

结论是要么人们急于学习编程,要么编程比其他任何事物都更容易学习。Felleisen等。 在他们的书《如何设计程序》中对这种趋势表示赞同,当他们说“错误的编程很容易。白痴可以在21天内学习它,即使他们是傻瓜。” Abtruse Goose漫画也受到了欢迎

让我们分析一下“ 24小时自学C ++”这样的标题的 含义:

自学:在24小时内,您将没有时间编写几个重要的程序,并从中学习成功和失败的原因。您将没有时间与经验丰富的程序员一起工作,也不了解在C ++环境中生活的感觉。简而言之,您将没有时间学习很多东西。因此,这本书只能说是肤浅的熟悉,而不是深刻的理解。正如亚历山大·波普(Alexander Pope)所说,学一点东西是危险的。

C ++:在24小时内,您可能可以学习C ++的某些语法(如果您已经知道另一种语言),但是您对如何使用该语言的了解却不多。简而言之,如果您是一名Basic程序员,则可以学习使用C ++语法以Basic风格编写程序,但是您将无法了解C ++的优点(或缺点)。那有什么意义呢? 艾伦·珀利斯(Alan Perlis)曾经说过:“不影响您对编程的思考方式的语言是不值得了解的”。一个可能的观点是,您必须学习一小部分C ++(或更可能是JavaScript或Processing之类的东西),因为您需要与现有工具交互以完成特定任务。但是,那时您不会学习编程。您正在学习完成该任务。

在24小时内:不幸的是,这还不够,如下一节所示。

十年自学编程

研究人员(Bloom(1985)Bryan&Harter(1899)Hayes(1989)Simmon&Chase(1973))显示,在下棋,音乐等众多领域中发展专业知识大约需要十年时间写作,电报操作,绘画,弹钢琴,游泳,网球以及神经心理学和拓扑学研究。关键是商议 练习:不仅要一遍又一遍地做,还要挑战一项超越您当前能力的任务来挑战自己,尝试一下,分析执行前后的表现,并纠正任何错误。然后重复。再重复一次。似乎没有真正的捷径:即使是4岁的音乐天才莫扎特,也花了13年的时间才开始创作世界一流的音乐。在另一种类型中,甲壳虫乐队似乎爆出一连串的#1热门歌曲,并在1964年的埃德·沙利文(Ed Sullivan)演出中露面。但是,自1957年以来,他们一直在利物浦和汉堡的小型俱乐部打球,尽管如此,他们仍然具有巨大的吸引力在早期,他们的第一个重大成功就是Sgt。Peppers于1967年发行。

马尔科姆·格拉德威尔尽管他专注于10,000小时(而不是10年),但他已经推广了这个想法。亨利·卡蒂埃·布雷森(Henri Cartier-Bresson,1908-2004年)还有另一个度量标准:“您的前10,000张照片是最糟糕的。” (他没想到数码相机会在一个星期内达到这一目标。)真正的专业知识可能需要一辈子:塞缪尔·约翰逊(Samuel Johnson(1709-1784))说:“任何部门的出色表现都只能靠他的劳动来实现。一辈子;不要以较低的价格购买。” 乔uc(1340-1400)抱怨说:“ lyf太短了,工艺太长了。” 希波克拉底(约公元前400年)以“ ars longa,vita brevis”的摘录而闻名,它是“ Ars longa,vita brevis,occasio praeceps,experimentum perculosum,iudicium difficile”较长引语的一部分,英语中用“ Life”表示是短, 当然,没有一个数字可以作为最终答案:假设所有技能(例如编程,下棋,下棋和玩音乐)可能都需要完全相同的时间来掌握,这似乎是不合理的,也不会所有人都花费完全相同的时间。正如 K. Anders Ericsson教授所说:“在大多数领域,即使是最有才华的个人也需要多少时间才能达到最高水平。令人难以置信的是,10,000小时的工作时间使您感觉我们正在谈论多年某些人会说,那些天生才华横溢的人每周必须花费10到20个小时才能达到最高水平。”

所以你想成为一名程序员

这是我编程成功的秘诀:

获取感兴趣的节目,并做一些,因为它很有趣。确保它保持足够的乐趣,以便您愿意投入十年/ 10,000小时的时间。

程序。最好的学习是边做边学。从技术上来说,“在一定范围内,个人的最高绩效不会根据扩展经验而自动获得,但是即使是经验丰富的个人,由于有意改进也可以提高绩效水平。 。” (p。366) 和“最有效的学习需要对特定个体具有适当难度级别的明确定义的任务,信息反馈以及重复和纠正错误的机会。” (第20-21页)《实践中的认知:日常生活中的思维,数学和文化》是对此观点的有趣参考。

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

如果需要,可以在大学学习四年(或者在研究生院学习四年)。这将使您能够访问一些需要证书的工作,并且可以使您对该领域有更深入的了解,但是,如果您不喜欢学校,则可以(有一定的奉献精神)独自或在工作中获得类似的经验。 。无论如何,仅靠书籍学习是不够的。《新黑客词典》的作者埃里克·雷蒙德(Eric Raymond)表示:“计算机科学教育不能像学习画笔和颜料那样使任何人成为专家程序员。” 我曾经雇用过的最好的程序员之一只有高中学位。他制作了很多很棒的 软件,并拥有自己的新闻组并且拥有足够的股票期权购买自己的夜店

其他程序员一起从事项目。在某些项目中成为最好的程序员;在其他人身上最糟糕。当您处于最佳状态时,就可以测试自己领导项目的能力,并用自己的远见激发他人的才能。在最坏的情况下,您将学习大师的所作所为,并了解他们不喜欢做的事情(因为他们让您为他们做)。

其他程序员之后从事项目。了解别人编写的程序。看看当原始程序员不在时需要理解和修复它的过程。考虑如何设计您的程序,使那些在您之后维护它们的人更轻松。

学习至少六种编程语言。包括一种强调类抽象的语言(例如Java或C ++),一种强调功能抽象的语言(例如Lisp或ML或Haskell),一种支持语法抽象的语言(例如Lisp),一种支持声明性规范的语言(例如Prolog或C ++模板)。 ,并且强调并行性(例如Clojure或Go)。

请记住,“计算机科学”中有一个“计算机”。知道您的计算机执行一条指令,从内存中获取一个单词(有或没有缓存未命中),从磁盘读取连续的单词以及在磁盘上寻找新位置花了多长时间。(在这里回答。

参与语言 标准化工作。它可以是ANSI C ++委员会,也可以确定您的本地编码样式是否具有2或4个空格缩进级别。无论哪种方式,您都可以了解其他人在某种语言中的喜好,他们的感受有多深,甚至可能很少了解他们为什么如此。

具有良好的意识,可以尽快开始语言标准化工作。

考虑到所有这些,仅通过学习书籍就能获得多大的成绩值得怀疑。在我的第一个孩子出生之前,我阅读了所有“如何做”书,仍然觉得自己是一个笨手笨手的新手。30个月后,当我的第二个孩子到期时,我是否又回到书店复习了?否。相反,我依靠自己的个人经历,事实证明,与专家撰写的成千上万页相比,这对我来说更加有用和令人放心。

弗雷德·布鲁克斯(Fred Brooks)在他的论文《无银子弹》中 确定了一个由三部分组成的计划,以寻找优秀的软件设计师:

尽早系统地确定顶级设计师。

指派职业指导者负责潜在客户的发展,并仔细保存职业档案。

为成长中的设计师提供互动和相互刺激的机会。

假设某些人已经具备成为优秀设计师所需的素质;工作是适当地哄骗他们。 艾伦·佩里斯(Alan Perlis)更简洁地说:“每个人都可以被雕刻而成:米开朗基罗必须被教导如何不做。伟大的程序员也是如此。” 佩利斯(Perlis)说,伟人的内在素质超越了他们的训练。但是质量从何而来?是天生的吗?还是他们通过勤奋发展?正如奥古斯特·古斯托(Ratatouille的虚构厨师 )所说,“任何人都可以做饭,但只有无所畏惧的人才能做得好。” 我将其更多地看作是愿意将一生的大部分时间投入到思考实践中。但也许 无所畏惧是一种总结的方式。或者,正如古斯托(Gusteau)的批评家安东·埃戈(Anton Ego)所说:“并非每个人都能成为一位伟大的艺术家,但是一位伟大的艺术家可以来自任何地方。”

因此,继续购买那本Java / Ruby / Javascript / PHP书;您可能会从中受益匪浅。但是您不会在24小时或21天之内改变自己的生活,也不会改变自己真正的整体专业知识。如何努力在24个月内不断改进?好吧,现在您开始有所建树...

参考文献

本杰明·布鲁姆(ed。),《年轻人的发展才能》,巴兰廷,1985年。

布鲁克斯,弗雷德,《无银子弹》,IEEE计算机,第一卷。20号 1987年第4期,第4页。10-19。

Bryan,WL&Harter,N.“关于电报语言的研究:习性等级的获得。Psychology Review,1899,8,345-375

海耶斯(John Hayes),《完全问题解决者》劳伦斯·艾尔鲍姆(Lawrence Erlbaum),1989年。

Chase,William G.&Simon,Herbert A. “国际象棋的 认知认知心理学,1973,4,55-81。

Lave,Jean,《实践中的认知:日常生活中的思维,数学和文化》,剑桥大学出版社,1988年。

答案典型PC上各种操作的大概时间:

执行典型的指令1 / 1,000,000,000秒= 1纳秒

从L1缓存中获取0.5纳秒

分支预测错误5纳秒

从二级缓存中获取7纳秒

互斥锁锁定/解锁25纳秒

从主内存中获取100纳秒

通过1Gbps网络发送2K字节20,000纳秒

从内存顺序读取1MB250,000纳秒

从新磁盘位置获取(查找)8,000,000纳秒

从磁盘顺序读取1MB20,000,000纳秒

将小包美国发送到欧洲并返回150毫秒= 150,000,000纳秒

附录:语言选择

一些人问他们应该首先学习哪种编程语言。没有答案,但是请考虑以下几点:

使用你的朋友。当被问及“我应该使用哪种操作系统,Windows,Unix或Mac?”时,我的回答通常是:“使用您的朋友使用的任何软件”。从朋友那里学习的好处将抵消操作系统之间或编程语言之间的任何内在差异。还请考虑您的未来朋友:如果继续,您将成为程序员社区的一部分。您选择的语言是一个正在成长的大型社区还是一个濒临灭绝的社区?是否有书籍,网站和在线论坛可提供答案?你喜欢那些论坛里的人吗?

保持简单。诸如C ++和Java之类的编程语言是由经验丰富的程序员组成的大型团队设计的,这些团队关心其代码的运行时效率。结果,这些语言具有针对这些情况设计的复杂部分。您担心要学习编程。您不需要那种麻烦。您需要一种被设计为易于由单个新程序员学习和记住的语言。

玩。您宁愿学习弹钢琴的方式:正常的互动方式,即敲击琴键后便会听到每个音符,也就是“批量”模式,即在整首歌结束后才听到音符。 ?显然,交互模式使钢琴和编程学习变得更加容易。坚持使用交互式模式的语言并使用它。

给定这些条件,我对第一种编程语言的建议是Python或 Scheme。另一个选择是Javascript,不是因为它是为初学者精心设计的,而是因为有很多在线教程供您使用,例如 Khan Academy的教程。但是您的情况可能会有所不同,还有其他不错的选择。如果您的年龄是个位数,则您可能更喜欢 AliceSqueak 或Blockly(年龄较大的学习者可能会喜欢)。重要的是您选择并开始。

附录:书籍和其他资源

有几个人问他们应该从中学到什么书和网页。我重申“仅靠书本学习是不够的”,但我可以推荐以下内容:

方案: 计算机程序的结构和解释(Abelson和Sussman)可能是计算机科学的最好入门,它确实教授编程作为理解计算机科学的一种方式。您可以在本书上在线观看讲座视频,以及在线全文。这本书极具挑战性,将淘汰一些可能通过其他方法成功的人。

方案: 如何设计程序(Felleisen等人是一本有关如何以一种优雅而实用的方式实际设计程序的最佳书籍之一。

Python: Python编程:CS入门(Zelle)是使用Python的不错的入门。

Python:Python.org 上提供了一些在线教程

Oz: 计算机编程的概念,技术和模型(Van Roy和Haridi) 被某些人视为Abelson&Sussman的现代继任者。这是一门编程的大创意,涵盖了比Abelson&Sussman更大的范围,同时也许更易于阅读和遵循。它使用一种不太流行的语言Oz,但它是学习其他语言的基础。<

笔记

T. Capey指出,亚马逊上的“完全解决问题”页面现在在“购买此商品的客户也购买了这些商品”部分下有“ 21天自学孟加拉语”和“自学语法和风格”书。我猜想看那本书的人很大一部分来自此页面。感谢Ross Cohen为希波克拉底提供的帮助。

          翻译

感谢以下作者,该页面的翻译版本为:

阿拉伯文

(Mohamed A. Yahya)

保加利亚文

(Boyko Bantchev)

中文

(郭小刚)

克罗地亚语

(Tvrtko Bedekovic)

世界语

(Federico Gobbo)

法语

(Etienne Beauchesne)

德文

(Stefan Ram)

希伯来语

(埃里克·麦凯恩)

印地语

(Vikash Tiwari)

匈牙利文

(马顿·麦斯蒂安)

印尼文

(Tridjito Santoso)

意大利语

(Fabio Z.Tessitore)

日语

(yomoyomo)

韩文(黄H)

波斯文

(Mehdi Asgari)

波兰文

(Kuba Nowak)

葡萄牙语

(Augusto Radtke)

罗马尼亚语

(ŞtefanLazăr)

俄文

(Konstantin Ptitsyn)

塞尔维亚文

(Lazar Kovacevic)

西班牙文

(Carlos Rueda)

斯洛伐克

(Jan Waclawek)

土耳其文

(ÇağılUluşahin)

乌克兰文

(Oleksii Molchanovskyi)

彼得·诺维格(版权2001—2014)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 2,954评论 1 3
  • width: 65%;border: 1px solid #ddd;outline: 1300px solid #...
    邵胜奥阅读 4,758评论 0 1
  • # 云计算实验 如果说亚马逊的AWS(Amazon Web Service)是一个IaaS平台,为用户提供计算服务...
    哟桑_6481阅读 581评论 0 0
  • 目录 一、数据搜索平台 二、问卷调查工具 三、网址缩短工具 四、二维码处理美化工具 五、图片视频处理工具...
    简小猫阅读 613评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,471评论 16 22