远方有多远,请你告诉我!

十年自学编程

Posted on By 赵赵赵小白

原文链接

下面的翻译来自谷歌翻译,意思可能不太对,但应该不会影响理解。

为什么每个人都如此匆忙?
走进任何书店,你会看到如何在24小时内自学Java,以及在几天或几小时内教授C,SQL,Ruby,算法等的无穷无尽的变化。亚马逊高级搜索[ 标题:教,自己,小时,自2000年以来发现了512本这样的书。在前十名中,有九本是编程书籍(另一本是关于簿记)。类似的结果来自于将“自学”替换为“学习”或“小时”替换为“天”。
结论是,要么人们都急于学习编程,要么编程在某种程度上比其他任何东西都更容易学习。Felleisen 等。 在他们的“ 如何设计程序 ” 一书中,当他们说“糟糕的编程很容易。白痴可以在21天内学习它,即使它们是傻瓜 ”时,也要对这一趋势表示赞同。Abtruse Goose漫画也有他们的看法。

让我们来分析24小时内教你自己C ++的标题是什么 意思:

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

C ++:在24小时内你可以学习一些C ++的语法(如果你已经知道另一种语言),但是你无法学到如何使用这门语言。简而言之,如果你是一个Basic程序员,你可以学习使用C ++语法编写基本风格的程序,但是你无法了解C ++实际上是好(和坏)的。那有什么意义呢? Alan Perlis曾经说过:“一种不影响编程方式的语言,不值得知道”。一个可能的观点是,您必须学习一点C ++(或者更有可能是像JavaScript或Processing这样的东西),因为您需要与现有工具进行交互以完成特定任务。但是你不会学习如何编程; 你正在学习完成这项任务。 在24小时内:不幸的是,这还不够,如下一节所示。

十年教你自己编程
研究人员(Bloom(1985),Bryan&Harter(1899),Hayes(1989),Simmon&Chase(1973))表明,在任何一个领域,包括象棋,音乐,开发专业知识大约需要十年时间。作文,电报操作,绘画,钢琴演奏,游泳,网球以及神经心理学和拓扑学研究。关键是审议 练习:不仅仅是一次又一次地做,而是用一项超出你现有能力的任务挑战自己,尝试它,分析你在执行它的过程中的表现,并纠正任何错误。然后重复一遍 然后重复一遍。似乎没有真正的捷径:即使莫扎特在4岁时成为一名音乐天才,在他开始制作世界级音乐之前还需要13年。在另一种类型中,甲壳虫乐队似乎在1964年以一系列#1热门歌曲和Ed Sullivan节目出现在舞台上。但自1957年以来,他们一直在利物浦和汉堡演奏小型俱乐部,虽然他们有大众吸引力早期,他们的第一次重大成功,中士。Peppers,于1967年发布。
马尔科姆格拉德威尔虽然他专注于10,000小时而不是10年,但已经普及了这个想法。Henri Cartier-Bresson(1908-2004)有另一个指标:“你的前10,000张照片是你最糟糕的。” (他没想到有了数码相机,有些人可以在一周内达到这个标准。)真正的专业知识可能需要一辈子:塞缪尔约翰逊(1709-1784)说“任何部门的卓越只能通过劳动力来实现一生;不能以较低的价格购买。“ 乔((1340-1400)抱怨说,“莱夫这么矮,工艺如此之长。” 希波克拉底(约公元前400年)以摘录“ars longa,vita brevis”而闻名,这是较长的引文“Ars longa,vita brevis,occasio praeceps,experimentalum periculosum,iudicium difficile”的一部分,在英文中称为“Life”是短, 当然,没有任何一个数字可以作为最终答案:假设所有技能(例如,编程,国际象棋,跳棋和音乐播放)都需要完全相同的掌握时间似乎是不合理的,也不是所有人都会花费相同的时间。正如 K. Anders Ericsson教授所说:“在大多数领域,即使是最有才能的人为了达到最高水平的表现而需要多少时间也是值得注意的.10万小时的数字让你感觉我们正在谈论多年每周10到20个小时,有些人会争辩说,最天才的人才仍然需要达到最高水平。“

所以你想成为一名程序员
这是我编程成功的秘诀:

获取感兴趣的节目,并做一些,因为它很有趣。确保它保持足够的乐趣,以便您愿意投入十年/ 10,000小时。
计划。最好的学习方式是边做边学。更具技术性地说,“特定领域中个人的最高绩效水平不能作为扩展经验的函数自动获得,但即使是经验丰富的个人,由于经过深思熟虑的努力,也可以提高绩效水平。 “。(第366页) 和“最有效的学习需要明确定义的任务,并为特定的个人提供适当的难度级别,提供信息反馈,以及重复和纠正错误的机会。” (第20-21页)“ 实践中的认知:日常生活中的心灵,数学和文化”一书是这一观点的有趣参考。
与其他程序员交谈 ; 阅读其他程序。这比任何书籍或培训课程都重要。
如果你愿意,可以在大学学习四年(或者在研究生院学习更多)。这将使您能够访问一些需要凭据的工作,这将使您更深入地了解该领域,但如果您不喜欢上学,您可以(通过一些奉献)获得与您自己或工作相似的经历。无论如何,单靠书本学习是不够的。“计算机科学教育不能让任何人成为专业程序员而不仅仅是研究画笔和颜料可以使某人成为专家画家”,“新黑客词典”的作者Eric Raymond说。我雇用的最好的程序员之一只有高中学位; 他制作了很多很棒的 软件,有自己的新闻组,并在股票期权足够购买他自己的夜总会。
与其他程序员一起完成项目。成为一些项目中最好的程序员; 在其他一些人身上是最糟糕的。当您处于最佳状态时,您可以测试自己领导项目的能力,并通过您的愿景激励他人。当你最糟糕的时候,你会了解大师的所作所为,并了解他们不喜欢做什么(因为他们会让你为他们做的)。
在其他程序员之后开展项目工作。理解别人写的程序。当原始程序员不在时,看看理解和修复它需要什么。考虑如何设计您的程序,以便让那些在您之后维护它们的人更容易。
学习至少六种编程语言。包括一种强调类抽象的语言(如Java或C ++),一种强调函数抽象的语言(如Lisp或ML或Haskell),一种支持语法抽象的语言(如Lisp),一种支持声明性规范(如Prolog或C ++模板) ,以及强调并行性的(如Clojure或Go)。
请记住,“计算机科学” 中有一台 “计算机”。知道计算机执行指令需要多长时间,从内存中获取一个字(有和没有缓存未命中),从磁盘读取连续的字,并寻找磁盘上的新位置。(这里的答案。) 参与语言 标准化工作。它可能是ANSI C ++委员会,或者它可能决定你的本地编码风格是否有2或4个空格缩进级别。无论哪种方式,你都会了解其他人喜欢某种语言,他们有多深刻的感受,甚至可能会有一些关于他们为何如此感受到的。

有充分理由尽快摆脱语言标准化工作.
考虑到所有这一点,你可以通过书本学习获得多大的成功。在我的第一个孩子出生之前,我阅读了所有的How To书籍,仍然感觉像一个无知的新手。30个月后,当我的第二个孩子到期时,我是否回到书本上进行复习?没有。相反,我依靠我的个人经验,这对我来说比专家写的数千页更有用和令人放心。
弗雷德布鲁克斯在他的文章No Silver Bullet中 找到了一个由三部分组成的计划来寻找优秀的软件设计师:

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

指派一名职业导师负责潜在客户的发展并谨慎地保留职业档案。
为成长中的设计师提供互动和互相激励的机会。
这假设有些人已经拥有成为优秀设计师所需的品质; 工作就是要适当地哄他们。 Alan Perlis更加简洁地说:“每个人都可以被教导雕塑:米开朗基罗将不得不被教导如何不去。所以这是伟大的程序员”。玻璃市说,伟大的内在品质超越了他们的训练。但质量来自哪里?它天生吗?或者他们是否通过勤奋发展?正如奥古斯特古斯托(料理鼠王中的虚构厨师 )所说,“任何人都可以做饭,但只有无所畏惧才能做得很好。” 我更多地想到将一个人的大部分时间用于审议实践的意愿。但也许 无所畏惧是一种总结的方式。或者,正如古斯特的评论家安东·伊戈所说:“不是每个人都能成为伟大的艺术家,但伟大的艺术家可以来自任何地方。”

所以继续购买Java / Ruby / Javascript / PHP书籍; 你可能会得到一些用处。但是,您不会在24小时或21天内改变您的生活或作为程序员的真正整体专业知识。如何努力不断改进超过24个月?好吧,现在你开始到了某个地方……