十年内自学编程

彼得·诺维格

为什么大家都这么着急?

走进任何一家书店,您将了解如何在 24 小时内自学 Java,同时在几天或几小时内提供无休止的变体来教授 C、SQL、Ruby、算法等。亚马逊高级搜索 [标题: 教, 你自己, 小时, 自: 2000 年以来, 并发现了 512 这样的书。前十名中,有九本是编程书籍(另一本是关于簿记的)。类似的结果来自将"自学"替换为"学习"或"小时"与"天"。

结论是,要么人们急于学习编程,要么编程比什么都容易学。Felleisen等人在《如何设计程序》一书中对这种趋势点头,当时他们说"糟糕的编程很容易。白痴可以在21天内学会,即使他们是假人。阿布特鲁斯鹅漫画也有他们采取。

让我们分析一下 24 小时内"C++"标题可能意味着什么:

教导自己:在24小时内,你将没有时间写几个重要的程序,并学习你的成功和失败与他们。您没有时间与经验丰富的程序员合作,并了解生活在一个良好的环境中C++。总之,你将没有时间学习太多。所以这本书只能说是肤浅的熟悉,不能是深刻的理解。正如亚历山大·波普说的,一点学习是危险的事情。

C++:在24小时内,你也许能够学习C++的一些语法(如果你已经知道另一种语言),但你不能学到很多如何使用的语言。简言之,如果你是一个基本程序员,你可以学会用C++语法编写基本风格的程序,但是你不能学习C++实际上是好(和坏)什么。那有什么意义呢?艾伦·佩利斯曾经说过:"一种不影响你编程方式的语言,不值得了解。一个可能的观点是,你必须学习一点点C++(或者更可能,像JavaScript或处理),因为你需要与现有的工具接口来完成一个特定的任务。但是,你并没有学习如何编程;你正在学习完成那个任务

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

十年内自学编程

研究人员(Bloom(1985年)、布莱恩和哈特(1899年)、海耶斯(1989年)、西蒙和蔡斯(1973年))表明,在象棋、音乐创作、电报操作、绘画、钢琴演奏、游泳、网球以及神经心理学和拓扑学研究等许多领域,大约需要10年时间。关键是审议实践:不只是一次又一次地做,而是用一个超出你当前能力的任务来挑战自己,尝试一下,在做之后分析你的表现,并纠正任何错误。然后重复。再重复一遍似乎没有真正的捷径:即使是4岁时音乐神童的莫扎特,也花了13年时间才开始创作世界级的音乐。在另一种类型中,披头士乐队似乎以一连串的#1和1964年埃德·沙利文的时装秀而登上舞台。但是他们自1957年以来一直在利物浦和汉堡打小俱乐部,虽然他们很早就有大众的吸引力,但他们的第一次重大成功,佩珀斯中士,在1967年被释放。

马尔科姆·格拉德威尔已经推广了这个想法,尽管他专注于10,000小时,而不是10年。亨利·卡蒂埃-布雷森(1908-2004)还有另一个指标:"你的前10,000张照片是你们最差的。"(他没想到,使用数码相机,有些人可以在一个星期内达到这个目标。真正的专业知识可能需要一生的时间:塞缪尔·约翰逊(Samuel Johnson,1709-1784)说:"任何部门都只有一生的劳动才能取得卓越成就;它不应该以较低的价格购买。乔瑟 (1340 - 1400) 抱怨道: "莱夫这么短, 工艺这么久, 对勒恩来说。Hippocrates (c. 400BC) 以摘录 "ars longa, vita brevis" 而广为人知, 这是较长语录 "阿尔斯 · 朗加, 维塔 · 布雷维斯, 偶尔练习, 实验腹膜, 胆汁困难" 的一部分, 在英语中渲染为 "生命是短暂的, [the] 工艺长, 机会转瞬即逝, 实验背信弃义, 判断困难" 。当然,没有一个数字可以是最终的答案:似乎不合理地假设所有技能(如编程、棋牌、跳棋和音乐演奏)都需要完全相同的时间来掌握,也不认为所有人都需要完全相同的时间。正如安德斯·爱立信教授所说,"在大多数领域,即使是最有才华的个人也需要多少时间才能达到最高水平,这一点令人瞩目。10,000 小时的数字只是让您感觉到,我们谈论的是每周 10 到 20 小时,有些人会认为这些人是天生的天才人才,仍然需要达到最高水平。

所以你想成为一名程序员

以下是我的编程成功秘诀:

对编程感兴趣,并做一些,因为它很有趣。确保它一直足够有趣,这样你才愿意投入你的十年/10,000小时。

程序。最好的学习就是通过做学习。更技术上来说,"给定领域中个人的最高绩效水平不是作为扩展经验的函数自动实现的,但即使有经验的个人会因为刻意努力提高而提高绩效水平。"(第366)和"最有效的学习需要一个明确界定的任务,为特定个人提供适当的难度级别,提供信息性的反馈,以及重复和更正错误的机会。(第20-21号)《实践认知:日常生活中的思维、数学和文化》一书是这一观点的有趣参考。

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

如果你想的话,在一所大学里工作四年(或者多在研究生院)。这将让您访问一些需要证书的工作,并让您更深入地了解该领域,但如果您不喜欢学校,您可以(有一些奉献精神)获得类似的经验,自己或工作。无论如何,单靠书本学习是不够的。《新黑客词典》的作者埃里克·雷蒙德(Eric Raymond)说:"计算机科学教育不能让任何人成为专家程序员,更不能让任何人成为专家程序员,更不能让任何人成为专家画家。我雇佣过的最好的程序员之一只有高中学位;他制作了很多伟大的软件, 有自己的新闻集团, 并做了足够的股票期权, 以购买自己的夜总会。

与其他程序员一起处理项目。成为某些项目的最佳程序员;是其他人最差的。当你是最好的,你可以测试你的能力,领导一个项目,并激励别人与你的远见。当你是最差的时候,你学习主人做什么,你学习他们不喜欢做什么(因为他们让你为他们做)。

在其他程序员之后处理项目。了解其他人编写的程序。看看当原始程序员不在的时候,需要什么来理解和修复它。考虑如何设计程序,使那些在您之后维护程序的人更容易。

学习至少六种编程语言。包括一种强调类抽象的语言(如Java或C++)、一种强调函数抽象的语言(如Lisp或ML或哈斯克尔)、一种支持句法抽象的语言(如Lisp)、一种支持声明性规范(如Prolog或C++模板)的语言,以及一种强调并行性的语言(如Cljure或 Go)。

请记住,"计算机科学"中存在"计算机"。了解计算机执行指令、从内存中获取单词(有和没有缓存错过)、从磁盘读取连续单词以及查找磁盘上的新位置需要多长时间。(答案在这里。

参与语言标准化工作。它可能是 ANSI C++,也可以决定您的本地编码风格是否具有 2 或 4 个空间缩进级别。无论哪种方式,你都了解别人喜欢的语言,他们感觉有多深,甚至一点点关于他们为什么这样的感觉。

有好感,尽快摆脱语言标准化工作。

想到这一切, 你只要通过书本学习能多远, 就值得怀疑了。在我的第一个孩子出生之前,我读了所有的《如何》一书,仍然觉得自己是一个无知的新手。30 个月后, 当我的第二个孩子到期时, 我回到书本上复习一下吗?不。相反,我依靠我个人的经验,事实证明,这比我有用和放心得多,比专家写的数千页。

弗雷德·布鲁克斯在他的论文《没有银弹》中确定了寻找伟大软件设计师的三部分计划:

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

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

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

这假定有些人已经具备成为伟大设计师所需的素质;工作是正确地哄他们一起。艾伦·佩利斯说得更简洁:"每个人都可以被教导去雕刻:米开朗基罗必须被教导如何不雕刻。因此,这是与伟大的程序员"。佩利斯说,伟大的球员有一些超越他们训练的内部素质。但是质量从何而来呢?是天生的吗?还是他们通过勤奋来发展?正如奥古斯特·古斯托(拉塔图耶虚构的厨师)所说,"任何人都可以做饭,但只有无所畏惧的人才能是伟大的。我认为更多的是愿意把一生中的很大一部分用于审议实践。但也许无所畏惧是总结这一点的一种方式。或者,正如古斯托的批评家安东·埃戈所说:"不是每个人都能成为一个伟大的艺术家,但一个伟大的艺术家可以来自任何地方。

因此,继续购买 Java/Ruby/Javascript/PHP 书籍;你可能会从中得到一些利用。但你不会改变你的生活,或者你作为程序员在24小时或21天内真正的整体专业知识。努力在24个月内不断改进怎么样?现在你开始找个地方了...

引用

布鲁姆,本杰明(Ed.)培养年轻人的人才,巴兰廷,1985年。

布鲁克斯, 弗雷德, 没有银弹, IEEE 电脑, 第 20 卷, 第 4 号, 1987 年, 第 10 - 19 周。

布莱恩, W. l. – 哈特, N. "关于电报语言的研究: 获得习惯的层次。心理学评论, 1899, 8, 345-375

海斯,约翰R.,完全问题解决者劳伦斯·埃鲍姆,1989年。

蔡斯, 威廉 G. & 西蒙, 赫伯特 A. "国际象棋感知" 认知心理学, 1973 年, 4, 55 - 81 。

拉夫,让,实践认知:思维,数学和文化的日常生活,剑桥大学出版社,1988年。

答案

典型 PC 上各种操作的大致计时:

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

从 L1 缓存内存 0 获取。5 纳米秒

分支预测错误 5 纳米秒

从 L2 缓存内存获取 7 nanosec

静音锁/解锁 25 纳米秒

从主内存获取 100 纳米秒

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

从内存 250,000 纳米秒按顺序读取 1MB

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

从磁盘 20,000,000 纳米秒按顺序读取 1MB

将数据包发送到欧洲, 返回 150 毫秒 = 150,000,000 纳米秒

附录:语言选择

有几个人问他们应该先学什么编程语言。没有一个答案,但请考虑以下几点:

用你的朋友。当被问及"我应该使用什么操作系统,Windows,Unix,还是Mac?从朋友那里学习的好处将抵消操作系统之间或编程语言之间的任何内在差异。还要考虑你未来的朋友:如果你继续,你将成为其中一员的程序员社区。您选择的语言是有一个庞大的成长社区还是一个垂死的小社区?是否有书籍、网站和在线论坛可以获得答案?你喜欢那些论坛里的人吗?

保持简单。编程语言(C++ 和 Java)是由经验丰富的程序员团队为专业开发而设计的,他们关注代码的运行时效率。因此,这些语言具有专为这些情况设计的复杂部分。你关心的是学习编程。你不需要这种并发症。您想要一种由单个新程序员设计得易于学习和记忆的语言。

玩。你宁愿学习哪种方式弹钢琴:正常的互动方式,你一点击一个键,或"批"模式,你只听到音符后,你完成了一整首歌?显然,交互式模式使钢琴和编程的学习更加容易。坚持使用交互式模式的语言并使用它。

鉴于这些标准,我对第一种编程语言的建议将是Python或S方案。另一个选择是Javascript,不是因为它是为初学者设计得完美的,而是因为有这么多的在线教程,如Khan学院的教程。但是,你的情况可能会有所不同,还有其他不错的选择。如果你的年龄是一位数,你可能更喜欢爱丽丝或吱吱声或块(年龄较大的学习者也可能喜欢这些)。重要的是你选择并开始。

附录:书籍和其他资源

有几个人问他们应该从哪些书籍和网页中学习。我再说一遍, "单靠书学习是不够的", 但我可以推荐以下内容:

方案:计算机程序的结构和解释(Abelson & Sussman)可能是计算机科学的最佳介绍,它教编程作为理解计算机科学的一种方式。您可以在线查看有关本书的讲座视频,以及完整的文本。这本书很有挑战性,将一些人从另一种方法中去掉。

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

Python: Python 编程: 使用 Python 的 Cs 简介 (Zelle) 是一个很好的介绍。

Python:在一些在线教程Python.org。

奥兹: 计算机编程的概念、技术和模型 (范罗伊和哈里迪) 被一些人视为阿贝尔森和苏斯曼的现代接班人。这是一个通过编程的大想法之旅, 涵盖比亚伯森和苏斯曼更广泛的范围, 而也许更容易阅读和遵循。它使用一种语言,Oz,这是不广为人知,但作为学习其他语言的基础。<

笔记

T. Capey指出,亚马逊上的"完全问题解决者"页面现在有"在21天内自学孟加拉语"和"自学语法和风格"的书籍下"为这个项目购物的顾客也为这些物品购物"部分。我猜看那本书的人很多来自这个页面。感谢罗斯·科恩对希波克拉底的帮助         

翻译

由于以下作者,本页的翻译可在以下位置提供:

阿拉伯语

(穆罕默德·叶海亚)

保加利亚语

(博伊科·班切夫)

中文

(郭晓刚)

克罗地亚语

(特夫尔特科·贝德科维奇)

(费德里科·戈博)

法语

(艾蒂安·博切斯内)

德语

(斯特凡·拉姆)

希伯来语

(埃里克·麦凯恩)

印地语

(维卡什·蒂瓦里)

匈牙利语

(马顿·梅斯蒂扬)

印度尼西亚语

(特里吉托·桑托索)

意大利语

(法比奥·泰西托)

日语

(约莫约莫)

韩语(黄俊)

波斯语

(迈赫迪·阿加里)

波兰语

(库巴·诺瓦克)

葡萄牙语

(奥古斯托·拉德克)

罗马尼亚

(特凡·拉泽尔)

俄语

(康斯坦丁·普蒂辛)

塞尔维亚语

(拉扎尔·科瓦切维奇)

西班牙语

(卡洛斯·鲁埃达)

斯洛伐克语

(扬·瓦克劳耶克)

土耳其语

(阿塞尔·乌卢沙欣)

乌克兰

(奥莱克西·莫尔恰诺夫斯基)

P

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

推荐阅读更多精彩内容

  • 彼得·诺维格 为什么大家都这么着急? 走进任何一家书店,你就会看到如何 自学爪哇 24 小时内 除了无休止的变化提...
    白翎音阅读 211评论 0 0
  • 十年内自学编程 彼得·诺维格 为什么大家都这么着急? 走进任何一家书店,您将了解如何在 24 小时内自学 Java...
    许电彭于晏阅读 780评论 0 0
  • 为什么大家都这么着急? 走进任何一家书店,您将了解如何在 24 小时内自学 Java,同时在几天或几小时内提供无休...
    191123阅读 376评论 0 0
  • 十年内自学编程 彼得·诺维格 为什么大家都这么着急? 走进任何一家书店,你就会看到24小时内自学Java除了提供在...
    月光很亮阅读 198评论 0 1
  • 为什么大家都这么着急? 走进任何一家书店,你就会看到24小时内自学Java除了提供在几天或几个小时内教授C、nSQ...
    未影P阅读 208评论 0 3