掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
黃小非譯注:本文作者Peter Norvig目前任職于Google,其職位是研究主管(Director of Research). Peter Norvig是享譽(yù)世界的計(jì)算機(jī)科學(xué)家和人工智能專家。他是 AAAI 和 ACM 的會(huì)員,是業(yè)界內(nèi)經(jīng)典書(shū)籍《Artificial Intelligence: A Modern Approach | 人工智能:一種現(xiàn)代方法》的作者之一。在加入Google之前,他曾經(jīng)是NASA(美國(guó)航空航天局)計(jì)算科學(xué)部門(mén)的主要負(fù)責(zé)人,并在南加州大學(xué)以及伯克利大學(xué)任教。以下為譯文。

你們著什么急?
隨意步入一家書(shū)店,滿目都是《7天搞定Java編程》這種速成書(shū)目,同樣的書(shū)籍還包括Visual Basic、Window系統(tǒng)、Internet互聯(lián)網(wǎng)等等,它們都承諾在幾天,甚至幾小時(shí)之內(nèi)就讓你能夠?qū)W會(huì)相關(guān)技術(shù)。我在亞馬遜網(wǎng)站上做了如下的條件檢索:
pubdate: after 1992 and title: days and
(title: learn or title: teach yourself)
出版日期:1992年以后,題目關(guān)鍵字:“天”,“學(xué)會(huì)”或者“自學(xué)”
然后得到了248條搜索結(jié)果。頭78條都是計(jì)算機(jī)類(lèi)書(shū)籍(第79條記錄是《30天學(xué)會(huì)孟加拉語(yǔ)》)。我將“天”關(guān)鍵字換成了“小時(shí)”,不出意外地搜索到了253條記錄,其中頭77條記錄是計(jì)算機(jī)書(shū)籍,第78條的搜索記錄是《24小時(shí)語(yǔ)法和樣式自學(xué)手冊(cè)》。在總共搜索到的頭200條記錄中,有96%是計(jì)算機(jī)書(shū)籍。
從上面的搜索結(jié)果可以看出來(lái),要么就是人們對(duì)計(jì)算機(jī)技術(shù)的學(xué)習(xí)如饑似渴,要么就是計(jì)算機(jī)技術(shù)實(shí)在太簡(jiǎn)單,不費(fèi)吹灰之力就能學(xué)會(huì)。相比于計(jì)算機(jī)技術(shù)書(shū)籍的如此“速成”,在其他領(lǐng)域的書(shū)籍里,你卻很難找到諸如:“三天學(xué)會(huì)貝多芬”,或者“五天搞定量子力學(xué)”,這種速成教材,甚至連《狗狗喂養(yǎng)手冊(cè)》這種寵物指南,都鮮有“幾天搞定”的說(shuō)法。Felleisen et al.在他們的著作《如何設(shè)計(jì)程序》一書(shū)中明確指出了這種“速成”的趨勢(shì),并評(píng)論到:“垃圾的編程技術(shù)當(dāng)然非常容易,***都能在21天之內(nèi)學(xué)會(huì),哪怕他天生就是個(gè)白癡?!?/p>
讓我們來(lái)仔細(xì)看看《3天學(xué)會(huì)C++》這種速成教材實(shí)際上意味著什么:
●學(xué)會(huì):在3天時(shí)間里你幾乎沒(méi)有時(shí)間去寫(xiě)任何有意義的程序,就更不要談什么從編程中獲得經(jīng)驗(yàn)和教訓(xùn)這種事情了。你也不可能有時(shí)間和有經(jīng)驗(yàn)的程序員一起工作和交流,也不會(huì)體驗(yàn)到在真正的C++環(huán)境下工作是什么感覺(jué)。長(zhǎng)話短說(shuō)吧,你就是沒(méi)時(shí)間,也學(xué)不到什么。所以這種書(shū)籍最多也就讓你有個(gè)粗淺的印象,但是絕對(duì)不可能有深入的理解。就像亞歷山大教皇說(shuō)的那樣,“淺嘗輒止是很危險(xiǎn)的”。
●C++: 如果你有其他編程語(yǔ)言的基礎(chǔ),那么3天之內(nèi)你也許可以學(xué)到C++的一些語(yǔ)法,但即使是這樣,你還是無(wú)法了解如何使用該語(yǔ)言編程。簡(jiǎn)言之,如果你之前是一個(gè)Basic程序員,那么經(jīng)過(guò)3天的學(xué)習(xí),你會(huì)成為一個(gè)“能使用C++語(yǔ)法編寫(xiě)B(tài)asic風(fēng)格程序的程序員”,不過(guò)這樣是沒(méi)法發(fā)揮出C++語(yǔ)言本身的優(yōu)勢(shì)的(說(shuō)句不好聽(tīng)的,你連怎么犯C++的典型錯(cuò)誤都不會(huì))。僅僅知道一點(diǎn)語(yǔ)法意味著什么呢?Allan Perlis曾經(jīng)說(shuō)過(guò):“一個(gè)無(wú)法改變你思維方式的編程語(yǔ)言是不值得學(xué)習(xí)的?!?;另一種可能性是,你可以只學(xué)一點(diǎn)點(diǎn)C++知識(shí)(類(lèi)似的,或者一點(diǎn)點(diǎn)JavaScript,或者一點(diǎn)點(diǎn)Flex Script),然后就可以利用現(xiàn)有的工具制作應(yīng)用接口,完成特定的編程任務(wù)了。但是這樣的行為并不意味著你“會(huì)”編程了,你只是會(huì)使用這個(gè)工具完成任務(wù)而已。
●3天:很不幸,3天是遠(yuǎn)遠(yuǎn)不夠的,往下看你就知道了。
[[93531]]
peter norvig
研究人員(Bloom (1985)、 Bryan & Harter (1899,見(jiàn)文后參考書(shū)目)、Hayes (1989)、Simmon & Chase (1973,見(jiàn)文后參考書(shū)目) 的一系列調(diào)查研究顯示,在各個(gè)領(lǐng)域內(nèi),要想獲得專業(yè)級(jí)別的水平,大約需要10年時(shí)間的努力。參與此項(xiàng)調(diào)查的領(lǐng)域包括:國(guó)際象棋,作曲,發(fā)報(bào),繪畫(huà),鋼琴演奏,游泳,網(wǎng)球等。科學(xué)家們從神經(jīng)心理學(xué)和拓?fù)鋵W(xué)的角度對(duì)這些領(lǐng)域進(jìn)行研究,并得出結(jié)論。若要在某一領(lǐng)域內(nèi)達(dá)到專家級(jí)的水平,其關(guān)鍵在于“審慎地重復(fù)”,也就是說(shuō),并非是機(jī)械地,一遍又一遍地練習(xí),而是要不斷地挑戰(zhàn)自我,試圖超越自身當(dāng)前的水平,通過(guò)不斷的嘗試挑戰(zhàn),并在嘗試的過(guò)程中和嘗試之后對(duì)自身的表現(xiàn)進(jìn)行分析和總結(jié),吸取經(jīng)驗(yàn),糾正之前犯過(guò)的各種錯(cuò)誤。把這一“審慎”的過(guò)程不斷重復(fù),才能取得成功。
所謂的“捷徑”是不存在的,即使對(duì)于莫扎特這種天才來(lái)說(shuō),也沒(méi)有捷徑可走,盡管4歲就開(kāi)始作曲,可是他也花了13年的時(shí)間,才真正地寫(xiě)出了***的作品。再舉一個(gè)例子,甲殼蟲(chóng)樂(lè)隊(duì)(The Beatles),他們似乎在1964年憑借一系列熱門(mén)單曲和其在艾德沙利文秀(The Ed Sullivan show)上的演出一炮而紅,但是你也許不知道,他們?cè)缭?957年就在利物浦和漢堡兩地進(jìn)行小規(guī)模演出了,而在此之前的非正式演出更是不計(jì)其數(shù)。甲殼蟲(chóng)樂(lè)隊(duì)的主要成名曲《Sgt. Peppers》,則是1967年才發(fā)行的。Malcolm Gladwell公布了他對(duì)柏林音樂(lè)學(xué)院所作的一項(xiàng)研究的報(bào)告,該研究對(duì)比了一個(gè)班里的學(xué)習(xí)成績(jī)?yōu)樯稀⒅邢氯齻€(gè)檔次的學(xué)生,并逐一詢問(wèn)他們進(jìn)行音樂(lè)練習(xí)的時(shí)間
這三個(gè)檔次中的所有人,大約都是在5歲的時(shí)候開(kāi)始練習(xí)音樂(lè)的,一開(kāi)始的時(shí)候大家練習(xí)音樂(lè)的時(shí)間都差不多,大約一周2到3小時(shí)。但是到了八歲左右,大家的區(qū)別就開(kāi)始體現(xiàn)了。后來(lái)成為班里***的那一部分學(xué)生開(kāi)始比別的學(xué)生練習(xí)得更多,大概每周6到9小時(shí),12歲的時(shí)候每周8小時(shí),14歲的時(shí)候每周16小時(shí),往后則越來(lái)越多,直到20歲左右,他們每周練習(xí)音樂(lè)的時(shí)間已經(jīng)超過(guò)30小時(shí)了。在20歲的年紀(jì),那些精英級(jí)別的演奏家們都有累計(jì)超過(guò)10000小時(shí)的音樂(lè)練習(xí)時(shí)間。相比之下,僅有部分優(yōu)等生能達(dá)到8000小時(shí)的累計(jì)練習(xí)時(shí)間,而那些音樂(lè)教師級(jí)別的學(xué)生,他們的累計(jì)練習(xí)時(shí)間只有4000小時(shí)左右。
所以,也許這個(gè)讓你能達(dá)到專業(yè)等級(jí)的神奇時(shí)間應(yīng)該是10000小時(shí),而不是10年。(Henri Cartier-Bresson (1908-2004)說(shuō)過(guò),“(作為攝影師),你所拍攝的頭10000張照片都是垃圾”,但即使是垃圾作品,他拍一張照片也要花接近一小時(shí)。)Samuel Johnson (1709-1784)認(rèn)為這個(gè)時(shí)間應(yīng)該更長(zhǎng):“在任何一個(gè)領(lǐng)域要想做到極好,勢(shì)必窮盡一生的精力,否則根本無(wú)法企及?!?Chaucer (1340-1400)也發(fā)出過(guò)“生命如此短暫,技能如此高深”的感嘆。Hippocrates (c. 400BC)因?qū)懴铝巳缦碌木渥佣蝗朔Q頌:“ars longa, vita brevis”,該句是來(lái)自于一個(gè)更長(zhǎng)的引用:”Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile”, 這段話翻譯成英語(yǔ)就是:“生命很短暫,但是技藝卻很高深,機(jī)遇轉(zhuǎn)瞬即逝,探索難以捉摸,抉擇困難重重”。這段話是用拉丁文寫(xiě)的。在拉丁文里,ars可以翻譯為“技藝”或者“藝術(shù)”,但是在古希臘文里,ars只能做“技能”的意思,而沒(méi)有“藝術(shù)”的意思。
你想當(dāng)程序員么?
下面是我列舉的程序員成功“食譜”
要掌握上面所說(shuō)的所有內(nèi)容,光靠看書(shū)學(xué)習(xí)應(yīng)該是很難做到的。當(dāng)我的***個(gè)孩子出生的時(shí)候,我?guī)缀蹰喿x了市面上所有的《如何…》指南書(shū)籍,但是我讀完了以后還是覺(jué)得自己是個(gè)菜鳥(niǎo)。30個(gè)月以后,我的第二個(gè)孩子快出生時(shí),我難道還要做一個(gè)書(shū)蟲(chóng)么?不!相反,我此時(shí)更依賴我的個(gè)人經(jīng)驗(yàn),這些經(jīng)驗(yàn)相比于那些上千頁(yè)的書(shū)籍,則更加有效和讓我放心。
Fred Brooks所著的著名的論文《No Silver Bullets| 沒(méi)有銀彈》里向我們揭示了發(fā)現(xiàn)和培養(yǎng)軟件設(shè)計(jì)人才的三步驟:
1.有組織地辨認(rèn)***的軟件設(shè)計(jì)人才,越早越好
2.安排一個(gè)職業(yè)導(dǎo)師,為其職業(yè)前景指點(diǎn)迷津,并謹(jǐn)慎對(duì)待自己的職業(yè)履歷
3.為成長(zhǎng)中的設(shè)計(jì)師們提供機(jī)會(huì),讓他們能夠互相激發(fā)促進(jìn)。
即使一部分人已經(jīng)具備了成為優(yōu)秀軟件設(shè)計(jì)人員的潛質(zhì),也需要經(jīng)歷工作的慢慢琢磨,方可展現(xiàn)才華。Alan Perlis則說(shuō)得更加直接:“任何人都可以被‘教’成一個(gè)雕塑匠,但米開(kāi)朗基羅則被‘教’如何不要成為一個(gè)雕塑匠,因?yàn)樗龅氖堑袼艽髱?,。這個(gè)道理放到編程大師身上同樣管用?!盤(pán)erlis認(rèn)為,偉大的軟件開(kāi)發(fā)人員都有一種內(nèi)在的特質(zhì),這種特質(zhì)往往比他們所接受的訓(xùn)練更重要。但是這些特質(zhì)是從哪里來(lái)的呢?是與生俱來(lái)的?還是通過(guò)后天勤奮而來(lái)?正如Auguste Gusteau(動(dòng)畫(huà)電影《料理鼠王》里的幻象大廚)所說(shuō),“誰(shuí)都能做飯,但只有那些無(wú)所畏懼的人才能成為大廚!”我很情愿地說(shuō),將你生命中的大部分時(shí)間花在審慎地練習(xí)和提高上,這很重要!但是“無(wú)所畏懼”的精神,才是將促使這些練習(xí)成果凝聚成形的途徑?;蛘?,就像是《料理鼠王》里那個(gè)與Gusteau作對(duì)的刻薄的美食評(píng)論家Anton Ego說(shuō)的那樣:“不是任何人都能成為偉大的藝術(shù)家,不過(guò),偉大的藝術(shù)家在成名前可能是任何人?!?/p>
所以盡管去書(shū)店大買(mǎi)Java/Ruby/Javascript/PHP書(shū)籍吧;你也許會(huì)發(fā)現(xiàn)他們真的挺管用。但是這樣做不會(huì)改變你的人生,也不會(huì)讓你在整體經(jīng)驗(yàn)上有什么提高。24小時(shí),幾天,幾周,做一個(gè)真正的程序員?光靠讀書(shū)可讀不出來(lái)。你嘗試過(guò)連續(xù)24個(gè)月不懈努力提高自己么?呵呵,如果你做到了,好吧,那么你開(kāi)始上路了……
參考書(shū)目
Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.
Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.
Bryan, W.L. & Harter, N. “Studies on the telegraphic language: The acquisition of a hierarchy of habits. Psychology Review, 1899, 8, 345-375
Hayes, John R., The Complete Problem Solver Lawrence Erlbaum, 1989.
Chase, William G. & Simon, Herbert A. “Perception in Chess” Cognitive Psychology, 1973, 4, 55-81.
Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.
問(wèn)答
典型PC系統(tǒng)各種操作指令的大概時(shí)間
附錄:如何選擇語(yǔ)言
很多人曾經(jīng)問(wèn)過(guò)我,他們應(yīng)該選擇什么編程語(yǔ)言作為入門(mén)之用?我想這個(gè)問(wèn)題很難有一個(gè)確切的答案,但是下面幾點(diǎn)可以用來(lái)作為選擇的參考。
基于上述的觀點(diǎn),我所推薦的編程入門(mén)語(yǔ)言應(yīng)該是Phyton或者Scheme.但是讀者自身的環(huán)境是非常復(fù)雜多變的,所以你們也許會(huì)其他更好的選擇。如果你的年齡還不到兩位數(shù),那么你們應(yīng)該考慮Alice語(yǔ)言或者Squeak語(yǔ)言(很多成年的初學(xué)者也認(rèn)為他們很有趣)。當(dāng)然,做出選擇并開(kāi)始行動(dòng),這個(gè)最重要。
附錄:書(shū)籍和其他資源
備注
T. Capey指出,Amazon網(wǎng)頁(yè)上那個(gè)Complete Problem Solver頁(yè)面把《21天搞定孟加拉語(yǔ)》以及《21天學(xué)會(huì)語(yǔ)法》這兩本書(shū)移到了“購(gòu)買(mǎi)此書(shū)的用戶還購(gòu)買(mǎi)過(guò)這些產(chǎn)品”這個(gè)區(qū)域內(nèi)。我估計(jì)大部分人就是從這個(gè)區(qū)域看到這本書(shū)的。感謝Ross Cohen的幫助。
***插播一張漫畫(huà):《21天自學(xué)C++》
英文原文:Peter Norvig
譯文鏈接:http://blog.jobbole.com/22905/

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流