yuanjinger / wiki

常见问题总结,概念打磨
0 stars 0 forks source link

用十年教会自己学会编程 #12

Open yuanjinger opened 6 years ago

yuanjinger commented 6 years ago

本文原文为:http://norvig.com/21-days.html

为何每个人都如此匆忙?

随便走进一家书店,你就能看到《24小时学会Java》以及各种万变不离其宗的书籍,形如:在数天或是数小时内学会Visual Basic、Windows系统、互联网等等。我在亚马逊 做了个高级搜索 :

pubdate: after 1992 and title: days and (title: learn or title: teach yourself) [1]

共得到了248个结果。前78个是计算机类图书(第79个是《30天学会孟加拉语 》)。我把搜索中的“days (天)”替换成“hours (小时)”,结果得到了一个相似度惊人的结果:253本书中,前77本都是计算机类图书,紧随其后的第78本是《24小时内教会自己语法与格调 》。而在200名之后,有96%是计算机类图书。

由此可见:要么是人们都在急匆匆的学习计算机,要么就是出于某种原因计算机比其他任何东西都要好学。而没有一本书是关于如何在数日之内学会贝多芬或是量子力学甚至是狗的饲养的。Felleisen等人在《如何设计程序 》中也指出了这一趋势,他们说:“糟糕的编程非常简单,蠢货都能在21天的时间内学会,即便他们就是根木头都可以!”

让我们来分析一下诸如《24小时学会C++ 》这样的标题意味着什么:

十年自学编程

研究员们(Bloom (1985) , Bryan & Harter (1899) , Hayes (1989) , Simmon & Chase (1973) )已经指出在许多领域中想达到精通都需要花费十年左右的时间,这其中包括国际象棋、音乐创作、电报操作、绘画、钢琴演奏、游泳、网球以及对神经心理学或是拓扑学的研究。关键在于用心去练习:并非仅仅是一遍又一遍的单纯重复,而是要去挑战一个刚好高于你目前水平的目标。去尝试,并在做的时候以及完成后分析自己的表现,指出所有的错误。之后重复,再重复……这没有捷径:甚至是莫扎特——4岁时他就是个音乐神童了,但一样是用了13年的时间才创作出世界级的音乐。另一个例子,虽然看上去甲壳虫乐队是在1964年的埃德·沙利文秀上一夜走红的,但其实他们早在1957年就开始在利物浦和汉堡的小俱乐部中演出了,而且虽然很早就受到大众的青睐,但他们第一次重要的成功却是1967年发行的专辑——《Sgt.Peppers》。

MalcolmGladwell公布了一份关于柏林音乐学院学生的研究报告,比较了优等、中等和后进的三类学生并为他们制定了练习时间:三组人从几乎相同的年龄开始练习演奏——大约五岁左右。起初的几年中,每个人都练习几乎相同的时间——每周2到3个小时。但到了八岁左右的时候,真正的差距开始出现了。那些班中最优秀的学生的练习量开始超过其他人:九岁时达到每周6小时,十二岁时每周8小时,十四岁时每周16小时,越来越多。到了二十岁的时候,他们每周的练习时间超过了30小时。二十岁时,在精英演奏者的人生历程中共计练习了10,000小时。相较之下,仅仅是好学生的练习时间只有 8,000小时,而未来的音乐教师仅有4,000小时的练习。所以,或许10,000小时——而不是10年——才是一个神奇的数字。SamuelJohnson(1709-1784)认为这可能要花更长的时间:“要实现任何领域的卓越才能都是需要毕生奋斗的——不会再有更低的代价来获得它了。”而Chaucer(1340-1400)则抱怨“人生短暂,但却有太多技艺要学。”Hippocrates(约公元前400年)因那句“arslonga,vitabrevis”而闻名,全文是“Ars longa, vita brevis,occasiopraeceps,experimentumpericulosum,iudiciumdifficile”,这话用中文[2]表达出来既是“技艺永恒,生命短暂,机会易逝,实验诡诈,抉择艰难”。虽然在拉丁文中“ars”一词既可以表示“艺术”也可以表示“技术”,但在原本的希腊文中“techne”一词则只有“技能”的意思而非“艺术”。

所以你想成为一名程序员

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

这样做的前提是已经假定了某人具有一个伟大设计者所应有的素质,他要做的只是去引导其他人的前进。Alan Perlis 将这些变得更加简洁:“每个人都能学会雕塑:米开朗基罗这样的人反倒需要学习如何不去雕塑。伟大的程序员也是如此。”所以,尽管去买那本Java的教程吧。或许你能从中学到些什么,但你不会因此改变人生,也不会在24小时、24天甚至是24个月之后成为一个真正的程序员。

参考文献: Bloom, Benjamin (编)《在年轻人中培养人才 》, 百龄坛, 1985. Brooks, Fred, 《没有银弹 》, IEEE计算机, vol. 20, no. 4, 1987, p. 10-19. Bryan, W.L.和Harter, N.《电报语言研究:一种习惯上的收获》, 心理学回顾, 1899, 8, 345-375 Hayes, John R., 《完全问题求解 》, Lawrence Erlbaum, 1989. Chase, William G.和Simon, Herbert A.《国际象棋的感知 》, 认知心理学, 1973, 4, 55-81 Lave, Jean, 《实践中认知:日常生活中的思想,数学与文化 》, 剑桥大学出版社, 1988.

附录:语言的选择

许多人都问我应该首先学习哪种编程语言。答案并不唯一,但需要考虑以下几点:

附录:书籍与其他资源

常有人问有哪些书籍或网站可以学习。我重申“仅仅看书是绝对不够的”,但我可以推荐以下这些: