D&GReview每天一个知识点

每天一个知识点:十年学会编程(译)

2022-01-31  本文已影响0人  Sun东辉

为什么每个人都这么着急?

信步走进任何一家书店,你会看到名为《如何在 24 小时内学会 Java》的书,还有各 种各样类似的书: 在几天内或几小时内学会 C,SQL,Ruby,算法等等,一眼望不到 尽头。我在 Amazon 上做了如下的高级检索 :【标题:教授:自己:小时:从:2000】得到了512 本这样的书。在前十本中有九本是关于编程的书(其它的是关于记账的)。把自学换成 “学” 或者用 "小时" 换成 "天",可以得到了类似的结果。

从上面的搜索结果可以看出来,要么就是人们对计算机技术的学习如饥似渴,要么就是计算机技术实在太简单,不费吹灰之力就能学会。

Felleisen 以及其它人在他们的著作《程序设计方法》一书中明确指出了这种“速成”的趋势,并评论到:“垃圾的编程技术当然非常容易,傻子都能在 21 天之内学会,哪怕他天生就是个白痴。” Abtruse Goose 的漫画中也有类似尝试

让我们分析一下,像一本名为《24 小时内学会 C++》的书意味着什么:

十年学会编程

研究人员(Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973))一系列调查显示,在各个领域内,要想获得专业级别的水平,大约需要 10 年时间的努力。参与此项调查的领域包括:国际象棋,作曲,发报,绘画,钢琴演奏,游泳,网球以及对神经心理学和拓扑学的研究。若要在某一领域内达到专家级的水平,其关键在于“刻意练习”,也就是说,并非是机械地,一遍又一遍地练习,而是要不断地挑战自我,试图超越自身当前的水平,通过不断的尝试挑战,并在尝试的过程中对自身的表现进行分析和总结,汲取经验,改正错误。把这一过程不断重复,才能取得成功。所谓的“捷径”是不存在的,即使对于莫扎特这种天才来说,也没有捷径可走,尽管 4 岁就开始作曲,可是他也花了 13 年的时间,才真正地写出了世界级的作品。再举一个例子,甲壳虫乐队(The Beatles),他们似乎在 1964 年凭借一系列热门单曲和其在艾德沙利文秀(The Ed Sullivan show)上的演出一炮而红,但是你也许不知道,他们早在 1957 年就在利物浦和汉堡两地进行小规模演出了,而在此之前的非正式演出更是不计其数。甲壳虫乐队的主要成名曲《Sgt. Peppers》,则是 1967 年才发行的。

Malcolm Gladwell 推广了这个理念,尽管他的重点在 10000 个小时而不是 10 年。Henri Cartier-Bresson (1908-2004)说过,“你所拍摄的前 10000 张照片都是最糟糕的”。(他没有预料到,有了数码相机后,有些人可以在一周内达到这个数量~)真正的匠人或许需要花费一生的时间。Samuel Johnson (塞缪尔·约翰逊 1709-1784)说:“在任何一个领域要想做到顶尖的水平,势必穷尽一生的精力,否则根本无法企及。” Chaucer (乔叟 1340-1400)也发出过“生命如此短暂,技能如此高深”的感叹。Hippocrates (希波克拉底,约 400BC)因写出这样的句子而被人称颂:“ars longa, vita brevis”,该句是来自于一个更长的引用:”Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile”, 这段话(拉丁文)翻译成英语就是:“生命很短暂,但是技艺却很高深,机遇转瞬即逝,探索难以捉摸,抉择困难重重”。

显然,没有一个确定的值可以作为标准答案:假定所有技能(比如编程,国际象棋,跳棋,音乐)都需要同样的时间来成为专家,或者假定任何人都需要一样的时间,是不合理的。正如 K. Anders Ericsson 教授所指出的那样:“在绝大多数领域,哪怕是最有天分的个人,他们达到最高水平所耗费的时间也是极为显著的。10000 小时这个数字,只是想让你意识到,即便是人们口中的那些最具天赋的个体,想达到最高水平也需要年复一年持续稳定的投入。”

你想当程序员吗?

这是我成功的原因:

明白了这些,你应该就能明白,你在书本中能够得到的知识非常有限。在我第一个孩子出生前, 我读了所有的(关于育儿的)How to 书籍,仍然感觉是个手足无措的新手。30 个月以后,我的第二个孩子出生前,我回头温习这些书了吗? 没有。相反,我根据我的个人经验,发现它比专家写的数千页的书籍更有用和可靠。

Fred Brooks在他的《人月神话》 中定出了一个寻找优秀软件设计者的三步计划:

  1. 尽可能早地,有系统地识别顶级的设计人员。
  2. 为设计人员指派一位职业导师,负责他们技术方面的成长,仔细地为他们规划职业生涯。
  3. 为成长中的设计人员提供相互交流和学习的机会。

此计划假设某些人已经具备了杰出设计者的必要才能; 要做的只是如何恰当地诱导他们。 Alan Perlis 说得更简明扼要:“每个人都能学会雕刻:对米开朗其罗而言, 反倒是告诉他哪些事不能做。同样的道理也适用于优秀的程序员。”

Perlis 认为,伟大的软件开发人员都有一种内在的特质,这种特质往往比他们所接受的训练更重要。但是这些特质是从哪里来的呢?是与生俱来的?还是通过后天勤奋而来?正如 Auguste Gusteau(动画电影《料理鼠王》里的幻象大厨)所说,“谁都能做饭,但只有那些无所畏惧的人才能成为大厨!”我把“将你生命中的大部分时间花在刻意练习上”视作为一种选择!但或许“无所畏惧”才是更关键的。或者,就像是《料理鼠王》里那个与 Gusteau 作对的刻薄的美食评论家 Anton Ego 说的那样:“不是任何人都能成为伟大的艺术家,不过,伟大的艺术家可以来自任何地方。”

所以你大可以买几本 Java/Ruby/Javascript/PHP 的书,从中学到点儿东西。但作为一个程序员,你不会在 21 天内或 24 小时内改变你的人生,或你实际的水平。你尝试过连续 24 个月不懈努力提高自己么?呵呵,如果你做到了,好吧,那么你开始上道了…

原文

上一篇 下一篇

猜你喜欢

热点阅读