【CSDN 编者按】Malcolm Gladwell在《离群索居》(Outliers)一书中曾言,要真正节制某件事情,须要10000小时的练习。而本文作者Greg Bulmash拥有40多年的编程履历,写了10000个小时的代码,却没能成为一名高等程序员。为何一万小时定律会失落败呢?他分享了自己的一些意见。或许他的履历能够对你有所帮助,一起来看看吧。 原文链接:https://letmypeoplecode.com/the-truths-and-fallacies-of-10000-hours-for-developers/ 本文由CSDN翻译,转载需注明来源出处。
Malcolm Gladwell在《离群索居》(Outliers)一书中说,要真正节制某件事情,须要10000小时的练习。实在,10000只是一个粗略的数字,而且这句话的含义也被过度简化了。我已经断断续续进行了40多年的编程。可能已经写了10000个小时的代码,但我乃至还未能成为一个精良的程序员,更别提成为大师级的程序员了。
我认为有以下几个缘故原由。首先,在这10000小时中,我紧张学习了4种不同的编程措辞,以及其他一些赞助措辞。我从一种措辞换到另一种措辞时,创造它们有的观点可以互通,有的完备不同。而有趣的是,在这种措辞中没故意义的观点可能用来构建它。
例如,JavaScript没有本地链接列表实现,但如果在V8 GitHub库的src目录下搜索 \公众链表\"大众,会创造有76个commit提到了它。纵然它们在措辞本身中没有用C的链接列表,但会在引擎下利用C的链接列表。
每种措辞都有自己的语法和分外的实现办法,这些是必须要学习的,而不仅仅只是学习其观点。一种措辞的最佳实践办法对付另一种措辞来说可能不是最好的。在编译措辞上我从来没有花过很多韶光,险些总是利用阐明型措辞,如BASIC、PHP、JavaScript、Python。我学习过C#和Java,用Rust做过Hello World,但在Linux中从源码编译对我来说十分困难,以是我常日只是下载源码,按照教程中的指示操作,然后祈祷代码能够运行。
其他的技能
除了学习这些措辞,我还学习了做事器技能和系统架构的基本观点,不是从编程的角度,而是从网络管理员或者说系统管理员的角度。而且无论是建立一个大型网站,在Flash中创建矢量图并将其渲染成位图,还是学习通过AWS办理方案架构师助理认证,我都已经做了很多次。但是很多东西我已经忘却了。我已经学会了这些措辞的框架和库,如JavaScript的React和JQuery以及PHP的Laravel......然后也忘却了许多,由于我为完成一个项目学习了它们,然后就没有再利用它们。
遗忘是常态
纵然写了10000小时的代码,也不虞味着你能够轻易地在不同措辞之间转换。当你真的进行转换的时候,你会创造10000小时没有那样神奇的魔力,由于另一个不可避免的缘故原由:影象衰退。正如我所说的,如果我停滞利用一种措辞,乃至只是停滞利用它的一个功能一段韶光,我就会像忘却 \"大众高中西班牙语 \公众一样忘却它。我在高中时读完了西班牙语3级,在大学时考过了西班牙语4级,并得到了A。而现在,我可能只记得不到10%的内容。
例如,我险些完备忘却了若何利用常规动词连接过去式,更不用说不规则动词了。但是由于我以前练习的足够多,我知道自己的不敷之处,以是我可能比刚开始学习的人更快地规复以前的知识。但可能须要几个月的强化练习才能全部规复。
十年前,我精通PHP,在一个定制的MVC框架中事情(由其他人创建),利用Doxygen来映射类的继续层次,并利用JQuery来构建前真个交互性。但我在7年前没用过PHP了,转而利用Node。现在,我须要花5分钟并且改正了一些语法缺点,才在刚才提到的PHP副本中精确地写出一个Hello World。
<?php$baby = \"大众, Baby!\公众;
echo \"大众Hello World\"大众 . $baby;
?>
去年12月时,我为freeCodeCamp的前端库认证建立了五个React项目,但在那之后,我就没有再编码React项目了。过去了两个月,当我开始准备口试的时候,我以为我就像是React新手。如果我看到自己写的代码,能够很快理解。但是由于很多东西都只是我准备的赞助工具,很多我都忘光了,以是我须要回到文档中去开始一个新的React项目再开始事情。和新手比较,我只是走得更快。
这便是新手和已经入门了的差异。一万个小时可以让你成为一个小提琴大师。但是如果你每隔500小时就换一次乐器,并想要成为全体交响乐团的主角,那你不一定能够更胜一筹。所以为了强化和拓展你的技能,练习不仅要广泛,而且要持续。
逻辑上的抵牾
10000小时是什么样的观点?是5年每周事情40小时,两年安歇1周(假期、病假和休假都在这2周内)。你会创造有的事情招聘时哀求在一个3年的框架内有5年的履历。5年彷佛是成为专家所需的标准韶光。由于对框架的无知和这种简化的标准,就会产生逻辑上的抵牾,一言以蔽之。
事情中的一万个小时≠一万个小时的实践
一个专业的开拓职员,有多少的事情韶光是花在电子邮件和会议上的?又有多少韶光在真正编码和思考编码问题?当我在微软写文档的时候,我的经理说,不管怎么算,你一天中大概只有一半的韶光花在实际的生产事情上。别的的韶光会花在一些琐事上,比如回答电子邮件、开会、进度/状态报告、在IM上回答随机问题或者和别人闲聊......
以是我只有20%的韶光是在写代码,由于其他80%的韶光是在写文档和教程,这意味着我均匀每天只写了一个小时的代码。在利用浏览器中的开拓工具进行调试方面,我曾经是个天才,由于我在这方面履历丰富,还常常为新版本进行更新。但是,虽然当时所有的开拓掌握台的快捷键,我都烂熟于心,但在我离开微软的7年后,我基本上已经把它们忘得一干二净了。
事实上,自从我进入开拓职员关系部后,我每天花了10-20%的韶光写代码,别的的韶光写教程,为会议讲座和网络研讨会制作文件,制订建立和培养开拓职员社区的计策,制订展示新功能的最佳方法,以及处理各种人——产品经理、内部工程师、外部开拓职员、产品营销经理、需求天生和社交媒体经理、状师、公关和公司政策实行者的问题。
一万小时不都用来学习新事物
末了要记住的是,你不会花整整一万个小时学习新东西。如果你在学习小提琴,你可能会花上几百个小时来学习一些低级的作品。在你学习新东西之前,你已经节制了一些低级的东西,并且在反复练习直至完美的过程中,
学到很多,并且将你学到的这些用于学习新事物。以是这一万个小时中的大部分韶光都是强化的。
在编程中,这就像多次编写相同的To Do单页运用程序。前几次你可以参考教程,但终极你必须能够在没有任何参考的情形下写出它。这就像一边看着乐谱一边逐步演奏《欢快颂》,然后记住如何演奏,然后准备在演奏会上演奏。
但是,当你须要在截止日期前交付一个项目时,你有多永劫光来进行强化练习?在许多公司,不会给你供应扩展技能和强化编码的韶光,须要你利用额外的韶光来完成。一些公司会给你10%的韶光或20%的韶光来做独立的项目,但很少有公司希望你把这些韶光花在纯挚的练习上。
新的框架、新的最佳实践方法、新的措辞、新的模式产生的速率不断加快,在这种情形下,仅仅是在新的方面取得合格的成绩,都会像和职业选手一样演奏《欢快颂》的困难。
总结
你须要平衡强化和探索的韶光,特殊是当你每天编码的韶光少于50%的时候。你必须不断地通过练习来进行强化,建立生理肌肉影象,直到你能在睡梦中办理它们。小提琴几百年来都没有本色性的变革,但编程却在不断变革。成为一个特定措辞的大师级程序员意味着要坚持更长的韶光。你不得不在非事情韶光进行强化练习,完成任务,努力成为一个精良的程序员,或者跳槽到另一个能够给你充足韶光练习的公司。
哪怕你5年或者10年后都没有成为大师级的程序员,也没有关系,由于好好地做一万个小时比看起来更难完成。
《新程序员001-004》全面上市,对话天下级大师,宣布中国IT行业创新创造