2021-01-21

彼得 · 诺维格


为什么每个人都这么匆忙?

走进任何一家书店,你会看到如何在24小时内自学Java,以及提供无尽的变体来教授C、SQL、Ruby、算法,几天或几小时后等等。亚马逊高级搜索 [标题: 教,你自己,小时,从: 2000开始,发现了512本这样的书。前十名中有九本是编程书籍 (另一本是关于记账的)。类似的结果来自于用 “学习” 代替 “自学” 或用 “天” 代替 “小时”。

结论是,要么人们急于学习编程,要么编程比其他任何东西都容易得多。Felleisen等人在他们的《如何设计程序》一书中对这一趋势表示赞同,他们说 “糟糕的编程很容易。白痴可以在21天内学会,即使他们是假人。”Abtruse Goose漫画也有他们的看法。

让我们分析一下像24小时自学C ++ 这样的标题可能意味着什么:

自学: 在24小时内,你将没有时间写几个重要的程序,并从中学习成功和失败。你没有时间和一个有经验的程序员一起工作,也没有时间理解生活在C + + 环境中的感觉。简而言之,您将没有时间学习很多东西。所以这本书只能谈论表面的熟悉,而不是深刻的理解。正如亚历山大 · 波普所说,一点点学习是一件危险的事情。

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

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

十年后自学编程

研究人员 (布鲁姆 (1985) 、布莱恩和哈特 (1899) 、海斯 (1989) 、西蒙·蔡斯 (1973)) 已经证明,在各种领域发展专业知识需要大约十年的时间,包括下棋、音乐创作、电报操作、绘画、钢琴演奏、游泳、网球,以及神经心理学和拓扑研究。关键是深思熟虑的实践: 不仅仅是一次又一次地做这件事,而是用一项超出你目前能力的任务来挑战你自己,尝试它,分析你在做这件事之后的表现,并纠正任何错误。然后重复。再重复一遍。似乎没有真正的捷径可走: 甚至莫扎特,一个4岁的音乐天才,也花了13年多的时间才开始创作世界级的音乐。在另一种类型中,甲壳虫乐队似乎凭借一系列热门歌曲和1964年埃德 · 沙利文秀的亮相而崭露头角。但是自1957年以来,他们一直在利物浦和汉堡打小型俱乐部,虽然他们很早就有了广泛的吸引力,但他们的第一个重大成功是中士。胡椒,于1967年发行。

马尔科姆 · 格拉德威尔推广了这个想法,尽管他专注于10,000小时,而不是10年。亨利 · 卡蒂埃-布列松 (1908-2004) 有另一个指标: “你的前10,000张照片是你最差的。“ (他没想到,有了数码相机,有些人可以在一周内达到那个目标。)真正的专业知识可能需要一生: 塞缪尔 · 约翰逊 (1709-1784) 说: “任何部门的卓越只有通过一生的劳动才能实现; 它不能以较低的价格购买。”乔叟 (1340-1400) 抱怨道: “lyf太短了,飞船太长了。”希波克拉底 (c.公元前400年) 以摘录 “龙舌兰,短梭菌” 而闻名,这是较长的引文 “龙舌兰,短梭菌,大胸草,大胸草,三叶草,艰难梭菌” 的一部分,在英语中,它描述为 “生命短暂,[这] 工艺漫长,机会短暂,实验危险,判断困难。”当然,没有一个数字可以成为最终答案: 假设所有技能 (例如g.,编程、下棋、跳棋和音乐演奏) 都需要完全相同的时间来掌握,也不是所有人都需要完全相同的时间。作为K教授安德斯 · 爱立信 (Anders Ericsson) 表示: “在大多数领域,即使是最有才华的人也需要多少时间才能达到最高水平。10,000小时的数字只是给你一种感觉,我们谈论的是每周10到20小时的年份,有些人会认为这些年份是天生最有才华的人,他们仍然需要最高级别。”

所以你想成为一名程序员

这是我成功编程的秘诀:

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

程序。最好的学习方式是边做边学。更严格地说,“在给定领域中,个人的最大绩效水平不是作为扩展经验的函数自动获得的,但是,由于深思熟虑地努力提高,即使是经验丰富的个人也可以提高绩效水平。“ (第366) 和”最有效的学习需要一个定义明确的任务,为特定的个人提供适当的难度水平、信息反馈以及重复和纠正错误的机会。“(第20-21) 这本书《实践中的认知: 日常生活中的思想、数学和文化》是这一观点的有趣参考。

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

如果你愿意,在大学里呆四年 (或者在研究生院呆四年以上)。这将让你获得一些需要证书的工作,也会让你对这个领域有更深入的了解,但是如果你不喜欢学校,你可以 (有一些奉献精神) 独自或在工作中获得类似的经验。无论如何,仅靠书本学习是不够的。《新黑客词典》的作者埃里克 · 雷蒙德说: “计算机科学教育不能让任何人成为专业程序员,就像学习画笔和颜料可以让某人成为专业画家一样。”我雇佣过的最好的程序员之一只有高中学位; 他制作了很多很棒的软件,有自己的新闻组,并且有足够的股票期权来购买他自己的夜总会。

和其他程序员一起做项目。在一些项目上做最好的程序员; 在其他项目上做最差的。当你是最棒的时候,你可以测试你领导一个项目的能力,并用你的愿景激励他人。当你最糟糕的时候,你知道大师做什么,你知道他们不喜欢做什么 (因为他们让你为他们做)。

在其他程序员之后的项目上工作。理解别人写的程序。看看当原始程序员不在时,需要什么来理解和修复它。想想如何设计你的程序,让那些在你之后维护它们的人更容易。

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

请记住,“计算机科学” 中有一台 “计算机”。了解您的计算机执行指令、从内存中获取单词 (有或没有缓存缺失) 、从磁盘读取连续单词需要多长时间,并寻找磁盘上的新位置。(这里回答。)

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

有良好的意识尽快停止语言标准化工作。

考虑到所有这些,仅仅通过书本学习你能走多远是值得怀疑的。在我的第一个孩子出生之前,我读了所有的《如何读书》,仍然觉得自己是一个无知的新手。30个月后,当我的第二个孩子到期时,我回到书上复习了吗?不。相反,我依靠我的个人经验,结果证明这比专家写的数千页对我来说更有用,更让人放心。

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

尽早系统地识别顶级设计师。

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

为成长中的设计师提供相互交流和激励的机会。

这假设一些人已经具备了成为一名伟大的设计师所必需的品质; 工作就是恰当地哄骗他们。艾伦 · 佩里斯更简洁地说: “每个人都可以被教导去雕刻: 米开朗基罗必须被教导如何不去。伟大的程序员也是如此 ”。佩里斯说伟人有一些超越他们训练的内在品质。但是质量从何而来呢?是先天?还是他们通过勤奋来发展?正如奥古斯特 · 古斯特 (《料理鼠王》中的虚构厨师) 所说,“任何人都会做饭,但只有无所畏惧的人才会很棒。”我认为这更多的是愿意将一生的大部分时间用于协商实践。但也许无所畏惧是总结这一点的一种方式。或者,正如古斯托的评论家安东 · 自我所说: “不是每个人都能成为伟大的艺术家,但是伟大的艺术家可以来自任何地方。”

所以去买那本Java/Ruby/Javascript/PHP的书吧; 你可能会从中得到一些利用。但是你不会在24小时或21天内改变你的生活,或者你作为程序员的真正的整体专业知识。努力工作在24个月内不断提高怎么样?好吧,现在你开始有所进展了……

你可能感兴趣的:(2021-01-21)