一份傳世典文:十年編程(Teach Yourself Programming in Ten Years)

一份傳世典文:十年編程(Teach Yourself Programming in Ten Years)

原文:Teach?Yourself?Programming?in?Ten?Years

作者:郭曉剛翻譯:郭曉剛(foosleeper@163.net

最后修訂日期:2004-3-19

2005-01-12增加了新的譯本鏈接。

本中文譯本得到了Peter?Norvig的許可锨推。

為什么每個人都急不可耐动羽?

走進(jìn)任何一家書店母谎,你會看見《Teach?Yourself?Java?in?7?Days》(7天Java無師自通)的旁邊是一長排看不到盡頭的類似書籍,它們要教會你Visual?Basic、Windows栈源、Internet等等募判,而只需要幾天甚至幾小時荡含。我在Amazon.com上進(jìn)行了如下搜索

pubdate:?after?1992?and?title:?days?and?(title:?learn?or?title:?teach?yourself)

(出版日期:1992年后?and?書名:天?and?(書名:學(xué)會?or?書名:無師自通))

我一共得到了248個搜索結(jié)果。前面的78個是計算機(jī)書籍(第79個是《Learn?Bengali?in?30?days》届垫,30天學(xué)會孟加拉語)释液。我把關(guān)鍵詞“days”換成“hours”,得到了非常相似的結(jié)果:這次有253本書装处,頭77本是計算機(jī)書籍妄迁,第78本是《Teach?Yourself?Grammar?and?Style?in?24?Hours》(24小時學(xué)會文法和文體)登淘。頭200本書中黔州,有96%是計算機(jī)書籍阔籽。

結(jié)論是笆制,要么是人們非常急于學(xué)會計算機(jī)项贺,要么就是不知道為什么計算機(jī)驚人地簡單开缎,比任何東西都容易學(xué)會奕删。沒有一本書是要在幾天里教會人們欣賞貝多芬或者量子物理學(xué)完残,甚至怎樣給狗打扮横漏。

讓我們來分析一下像《Learn?Pascal?in?Three?Days》(3天學(xué)會Pascal)這樣的題目到底是什么意思:

學(xué)會:在3天時間里,你不夠時間寫一些有意義的程序扎拣,并從它們的失敗與成功中學(xué)習(xí)二蓝。你不夠時間跟一些有經(jīng)驗的程序員一起工作指厌,你不會知道在那樣的環(huán)境中是什么滋味踩验。簡而言之晰甚,沒有足夠的時間讓你學(xué)到很多東西厕九。所以這些書談?wù)摰闹皇潜砻嫔系木ū庠叮巧钊氲睦斫狻H鏏lexander?Pope(譯注:英國詩人细睡、作家溜徙,1688-1744)所言蠢壹,一知半解是危險的(a?little?learning?is?a?dangerous?thing)。

Pascal:在3天時間里你可以學(xué)會Pascal的語法(如果你已經(jīng)會一門類似的語言)九巡,但你無法學(xué)到多少如何運用這些語法。簡而言之冕广,如果你是,比如說一個Basic程序員撒汉,你可以學(xué)會用Pascal語法寫出Basic風(fēng)格的程序,但你學(xué)不到Pascal真正的優(yōu)點(和缺點)睬辐。那關(guān)鍵在哪里净神?Alan?Perlis(譯注:ACM第一任主席,圖靈獎得主溉委,1922-1990)曾經(jīng)說過:“如果一門語言不能影響你對編程的想法爱榕,那它就不值得去學(xué)”。另一種觀點是藻三,有時候你不得不學(xué)一點Pascal(更可能是Visual?Basic和JavaScript之類)的皮毛,因為你需要接觸現(xiàn)有的工具逗概,用來完成特定的任務(wù)。但此時你不是在學(xué)習(xí)如何編程卿城,你是在學(xué)習(xí)如何完成任務(wù)铅搓。

3天:不幸的是瑟押,這是不夠的,正如下一節(jié)所言星掰。

10年編程無師自通

一些研究者(Hayes多望、Bloom)的研究表明,在許多領(lǐng)域氢烘,都需要大約10?年時間才能培養(yǎng)出專業(yè)技能怀偷,包括國際象棋、作曲威始、繪畫枢纠、鋼琴、游泳黎棠、網(wǎng)球晋渺,以及神經(jīng)心理學(xué)和拓?fù)鋵W(xué)的研究。似乎并不存在真正的捷徑:即使是莫扎特脓斩,他4?歲就顯露出音樂天才木西,在他寫出世界級的音樂之前仍然用了超過13年時間。再看另一種音樂類型的代表--披頭士随静,他們似乎是在1964年的Ed?Sullivan節(jié)目中突然冒頭的八千。但其實他們從1957年就開始表演了,即使他們很早就顯示出了巨大的吸引力燎猛,他們第一次真正的成功之作《Sgt.?Peppers》也要到1967年才發(fā)行恋捆。Samuel?Johnson(譯注:英國詩人)認(rèn)為10?年還是不夠的:“任何領(lǐng)域的卓越成就都只能通過一生的努力來獲得;稍低一點的代價也換不來重绷》型#”(Excellence?in?any?department?can?be?attained?only?by?the?labor?of?a?lifetime;?it?is?not?to?be?purchased?at?a?lesser?price.)?喬叟(譯注:Chaucer,英國詩人昭卓,1340-1400)也抱怨說:“生命如此短暫愤钾,掌握技藝卻要如此長久『蛐眩”(the?lyf?so?short,?the?craft?so?long?to?lerne.)

下面是我在編程這個行當(dāng)里獲得成功的處方:

對編程感興趣能颁,因為樂趣而去編程。確定始終都能保持足夠的樂趣倒淫,以致你能夠?qū)?0年時間投入其中伙菊。

跟其他程序員交談;閱讀其他程序。這比任何書籍或訓(xùn)練課程都更重要占业。

編程绒怨。最好的學(xué)習(xí)是從實踐中學(xué)習(xí)。用更加技術(shù)性的語言來講谦疾,“個體在特定領(lǐng)域最高水平的表現(xiàn)不是作為長期的經(jīng)驗的結(jié)果而自動獲得的南蹂,但即使是非常富有經(jīng)驗的個體也可以通過刻意的努力而提高其表現(xiàn)水平∧罨校”(p.?366)六剥,而且“最有效的學(xué)習(xí)要求為特定個體制定適當(dāng)難度的任務(wù),有意義的反饋峰伙,以及重復(fù)及改正錯誤的機(jī)會疗疟。”(p.?20-21)《Cognition?in?Practice:?Mind,?Mathematics,?and?Culture?in?Everyday?Life》(在實踐中認(rèn)知:心智瞳氓、數(shù)學(xué)和日常生活的文化)是關(guān)于這個觀點的一本有趣的參考書策彤。

如果你愿意,在大學(xué)里花上4年時間(或者再花幾年讀研究生)匣摘。這能讓你獲得一些工作的入門資格店诗,還能讓你對此領(lǐng)域有更深入的理解,但如果你不喜歡進(jìn)學(xué)校音榜,(作出一點犧牲)你在工作中也同樣能獲得類似的經(jīng)驗庞瘸。在任何情況下,單從書本上學(xué)習(xí)都是不夠的赠叼〔聊遥“計算機(jī)科學(xué)的教育不會讓任何人成為內(nèi)行的程序員,正如研究畫筆和顏料不會讓任何人成為內(nèi)行的畫家”嘴办,Eric?Raymond瞬场,《The?New?Hacker's?Dictionary》(新黑客字典)的作者如是說。我曾經(jīng)雇用過的最優(yōu)秀的程序員之一僅有高中學(xué)歷涧郊;但他創(chuàng)造出了許多偉大的軟件泌类,甚至有討論他本人的新聞組,而且股票期權(quán)讓他達(dá)到我無法企及的富有程度(譯注:指Jamie?Zawinski底燎,XEmacs和Netscape?Navigator的作者)。

跟別的程序員一起完成項目弹砚。在一些項目中成為最好的程序員双仍;在其他一些項目中當(dāng)最差的一個。當(dāng)你是最好的程序員時桌吃,你要測試自己領(lǐng)導(dǎo)項目的能力朱沃,并通過你的洞見鼓舞其他人。當(dāng)你是最差的時候,你學(xué)習(xí)高手們在做些什么逗物,以及他們不喜歡做什么(因為他們讓你幫他們做那些事)搬卒。

接手別的程序員完成項目。用心理解別人編寫的程序翎卓∑跹看看在沒有最初的程序員在場的時候理解和修改程序需要些什么。想一想怎樣設(shè)計你的程序才能讓別人接手維護(hù)你的程序時更容易一些失暴。

學(xué)會至少半打編程語言坯门。包括一門支持類抽象(class?abstraction)的語言(如Java或C++),一門支持函數(shù)抽象(functional?abstraction)的語言(如Lisp或ML)逗扒,一門支持句法抽象(syntactic?abstraction)的語言(如Lisp)古戴,一門支持說明性規(guī)約(declarative?specification)的語言(如Prolog或C++模版),一門支持協(xié)程(coroutine)的語言(如Icon或Scheme)矩肩,以及一門支持并行處理(parallelism)的語言(如Sisal)现恼。

記住在“計算機(jī)科學(xué)”這個詞組里包含“計算機(jī)”這個詞。了解你的計算機(jī)執(zhí)行一條指令要多長時間黍檩,從內(nèi)存中取一個word要多長時間(包括緩存命中和未命中的情況)叉袍,從磁盤上讀取連續(xù)的數(shù)據(jù)要多長時間,定位到磁盤上的新位置又要多長時間建炫。(答案在這里畦韭。

嘗試參與到一項語言標(biāo)準(zhǔn)化工作中「氐可以是ANSI?C++委員會艺配,也可以是決定自己團(tuán)隊的編碼風(fēng)格到底采用2個空格的縮進(jìn)還是4個。不論是哪一種衍慎,你都可以學(xué)到在這門語言中到底人們喜歡些什么转唉,他們有多喜歡,甚至有可能稍微了解為什么他們會有這樣的感覺稳捆。

擁有盡快從語言標(biāo)準(zhǔn)化工作中抽身的良好判斷力赠法。

抱著這些想法,我很懷疑從書上到底能學(xué)到多少東西乔夯。在我第一個孩子出生前砖织,我讀完了所有“怎樣……”的書,卻仍然感到自己是個茫無頭緒的新手末荐。30個月后侧纯,我第二個孩子出生的時候,我重新拿起那些書來復(fù)習(xí)了嗎甲脏?不眶熬。相反妹笆,我依靠我自己的經(jīng)驗,結(jié)果比專家寫的幾千頁東西更有用更靠得住娜氏。

Fred?Brooks在他的短文《No?Silver?Bullets》(沒有銀彈)中確立了如何發(fā)現(xiàn)杰出的軟件設(shè)計者的三步規(guī)劃:

盡早系統(tǒng)地識別出最好的設(shè)計者群體拳缠。

指派一個事業(yè)上的導(dǎo)師負(fù)責(zé)有潛質(zhì)的對象的發(fā)展,小心地幫他保持職業(yè)生涯的履歷贸弥。

讓成長中的設(shè)計師們有機(jī)會互相影響窟坐,互相激勵。

這實際上是假定了有些人本身就具有成為杰出設(shè)計師的必要潛質(zhì)茂腥;要做的只是引導(dǎo)他們前進(jìn)狸涌。Alan?Perlis說得更簡潔:“每個人都可以被教授如何雕塑;而對米開朗基羅來說最岗,能教給他的倒是怎樣能夠不去雕塑帕胆。杰出的程序員也一樣”。

所以盡管去買那些Java書般渡;你很可能會從中找到些用處懒豹。但你的生活,或者你作為程序員的真正的專業(yè)技術(shù)驯用,并不會因此在24小時脸秽、24天甚至24個月內(nèi)發(fā)生真正的變化。

參考文獻(xiàn)

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.

Hayes,?John?R.,Complete?Problem?Solver,?Lawrence?Erlbaum,?1989.

Lave,?Jean,Cognition?in?Practice:?Mind,?Mathematics,?and?Culture?in?Everyday?Life,?Cambridge?University?Press,?1988.

答案

各種操作的計時蝴乔,2001年夏天在一臺典型的1GHz?PC上完成:

執(zhí)行單條指令            1?納秒?=?(1/1,000,000,000)?秒

從L1緩存中取一個word        2?納秒

從主內(nèi)存中取一個word        10?納秒

從連續(xù)的磁盤位置中取一個word    200?納秒

從新的磁盤位置中取一個word(尋址) 8,000,000納秒?=?8毫秒

腳注

T.?Capey指出Amazon上面《Complete?Problem?Solver》的頁面中记餐,《Teach?Yourself?Bengali?in?21?days》和《Teach?Yourself?Grammar?and?Style》被列在了“購買此書的顧客還買了以下書籍”欄目里面。我猜其中一大部分察看這兩本書的人都是從我這里過去的薇正。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末片酝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挖腰,更是在濱河造成了極大的恐慌雕沿,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猴仑,死亡現(xiàn)場離奇詭異审轮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)辽俗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進(jìn)店門疾渣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人崖飘,你說我怎么就攤上這事稳衬。” “怎么了坐漏?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我赊琳,道長街夭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任躏筏,我火速辦了婚禮板丽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘趁尼。我一直安慰自己埃碱,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布酥泞。 她就那樣靜靜地躺著砚殿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芝囤。 梳的紋絲不亂的頭發(fā)上似炎,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天,我揣著相機(jī)與錄音悯姊,去河邊找鬼羡藐。 笑死,一個胖子當(dāng)著我的面吹牛悯许,可吹牛的內(nèi)容都是我干的仆嗦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼先壕,長吁一口氣:“原來是場噩夢啊……” “哼瘩扼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起启上,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤邢隧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后冈在,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倒慧,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年包券,在試婚紗的時候發(fā)現(xiàn)自己被綠了纫谅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡溅固,死狀恐怖付秕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侍郭,我是刑警寧澤询吴,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布熊镣,位于F島的核電站若专,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜琉挖,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一驯耻、第九天 我趴在偏房一處隱蔽的房頂上張望泌射。 院中可真熱鬧国裳,春花似錦、人聲如沸盗温。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卖局。三九已至斧蜕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吼驶,已是汗流浹背惩激。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留蟹演,地道東北人风钻。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像酒请,于是被迫代替她去往敵國和親骡技。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 著者: Peter Norvig翻譯: Dai Yuwen http://daiyuwen.freeshell.o...
    828e200a9578閱讀 1,696評論 0 3
  • 本文把程序員所需掌握的關(guān)鍵知識總結(jié)為三大類19個關(guān)鍵概念羞反,然后給出了掌握每個關(guān)鍵概念所需的入門書籍布朦,必讀書籍,以及...
    dle_oxio閱讀 11,087評論 6 244
  • 附錄B 編程的本質(zhì) 編程的本質(zhì) N 尼古拉斯·沃斯(Niklaus Wirth昼窗,1934年2月15日—)是趴,生於于瑞...
    光劍書架上的書閱讀 2,756評論 1 11
  • 任何一個人的心腹,他已經(jīng)超越了澄惊,一個普通員工的職責(zé)范圍唆途,既然是心腹,就相當(dāng)于是領(lǐng)導(dǎo)身體的一部分掸驱,就如領(lǐng)導(dǎo)的耳目肛搬,領(lǐng)...
    智盛心法閱讀 724評論 0 0
  • 夏可以再深一些 等蟬鳴將聒噪舉向樹梢 等飛蚊擠滿無邊的田野 等綠意蔓延 染盡這眼前的一簇藤蔓 繁花開至荼蘼 我有一...
    七笙閱讀 223評論 0 0