為什么大家都這么著急茸苇?
走進(jìn)任何一家書(shū)店传藏,你就會(huì)看到24小時(shí)內(nèi)自學(xué)Java除了提供在幾天或幾個(gè)小時(shí)內(nèi)教授C具垫、nSQL抡草、Ruby腿短、算法等的無(wú)休止的變體之外。亞馬遜高級(jí)搜索標(biāo)題:教書(shū)凝颇,自學(xué)垫蛆,小時(shí)數(shù)宁赤,自2000年起找到512本這樣的書(shū)舀透。在前十名中,有九本是編程書(shū)(另一本是關(guān)于簿記的)决左。類(lèi)似的結(jié)果來(lái)自于將“自學(xué)”改為“學(xué)習(xí)”愕够,或?qū)ⅰ靶r(shí)”替換為“天”走贪。
結(jié)論是,要么人們急于學(xué)習(xí)nAbout編程惑芭,要么編程在某種程度上比其他任何東西都容易得多坠狡。納費(fèi)萊森等人他們?cè)跁?shū)中對(duì)這一趨勢(shì)表示贊同。如何設(shè)計(jì)程序當(dāng)他們說(shuō)“糟糕的編程很容易”的時(shí)候遂跟。白癡可以在21天逃沿,即使他們是假人』盟“瘋狂的鵝漫畫(huà)也有他們的觀點(diǎn).
讓我們分析一下標(biāo)題是什么樣子的24小時(shí)內(nèi)自學(xué)C++可能意味著:
自學(xué):在24小時(shí)內(nèi)凯亮,您將沒(méi)有時(shí)間編寫(xiě)幾個(gè)重要的程序,并從您的成功和失敗與nnr學(xué)習(xí)哄尔。您將沒(méi)有時(shí)間與有經(jīng)驗(yàn)的程序員一起工作假消,也不了解在C++環(huán)境中生活是什么感覺(jué)×虢樱總之富拗,你沒(méi)有時(shí)間學(xué)到很多東西。因此鸣戴,這本書(shū)只能談?wù)撘环N膚淺的熟悉啃沪,而不是一種深刻的理解。正如亞歷山大·波普所說(shuō)窄锅,很少學(xué)習(xí)是一件危險(xiǎn)的事情谅阿。
C++:在24小時(shí)內(nèi),您可能能夠?qū)W習(xí)nc++的一些語(yǔ)法(如果您已經(jīng)知道另一種語(yǔ)言)酬滤,但是對(duì)于如何使用該語(yǔ)言您不太了解。簡(jiǎn)而言之寓涨,如果您是nBasic程序員盯串,您可以學(xué)習(xí)使用C++語(yǔ)法以nBasic的風(fēng)格編寫(xiě)程序,但是您無(wú)法了解C++實(shí)際上是好的(和不好的)什么戒良。那有什么意義体捏?艾倫·恩佩利斯曾經(jīng)說(shuō)過(guò):“一種不影響你對(duì)編程的思考方式的語(yǔ)言是不值得知道的”。一個(gè)可能的問(wèn)題是糯崎,您必須學(xué)習(xí)一點(diǎn)C++(或者更有可能是一些類(lèi)似于JavaScript或處理的東西)几缭,因?yàn)槟枰cn現(xiàn)有工具接口來(lái)完成特定的任務(wù)。但是你不是在學(xué)習(xí)如何編程沃呢,而是在學(xué)習(xí)如何完成這個(gè)任務(wù)年栓。
在24小時(shí)內(nèi):不幸的是,正如下一節(jié)所示薄霜,這還不夠某抓。
十年內(nèi)自學(xué)編程
研究人員(布魯姆·n(1985), 布賴(lài)恩和哈特(1899年), Hayes n(1989), Simmon&Chase(1973年))已經(jīng)證明纸兔,在各種領(lǐng)域,包括國(guó)際象棋否副、音樂(lè)創(chuàng)作汉矿、電報(bào)操作、繪畫(huà)备禀、鋼琴演奏洲拇、游泳、網(wǎng)球以及神經(jīng)心理學(xué)和拓?fù)鋵W(xué)的研究曲尸,都需要大約十年的時(shí)間才能發(fā)展出專(zhuān)業(yè)知識(shí)赋续。關(guān)鍵是審議練習(xí):不只是一次又一次地去做,而是挑戰(zhàn)自己--一項(xiàng)超出你當(dāng)前能力范圍的任務(wù)队腐,嘗試它蚕捉,分析你在做的時(shí)候和之后的表現(xiàn),并糾正錯(cuò)誤柴淘。那就重復(fù)一遍迫淹。再重復(fù)一遍。似乎沒(méi)有真正的捷徑:即使是莫扎特为严,他在4歲時(shí)是一個(gè)音樂(lè)天才敛熬,在他開(kāi)始創(chuàng)作世界一流的音樂(lè)之前,花費(fèi)了13多年的時(shí)間第股。在另一種流派中应民,披頭士樂(lè)隊(duì)似乎突然出現(xiàn)在現(xiàn)場(chǎng),出現(xiàn)在1964年的埃德·沙利文秀上夕吻。但是他們從1957年起就一直在利物浦和漢堡打小俱樂(lè)部诲锹,雖然他們很早就有了群眾的吸引力,這是他們第一個(gè)偉大的成功涉馅,胡椒中士于1967年獲釋归园。
馬爾科姆·格拉德威爾雖然他專(zhuān)注于10,000小時(shí),而不是10年稚矿,但他推廣了這一理念庸诱。NHenriCartier-Bresson(1908-2004)有另一個(gè)指標(biāo):“你的前10,000張照片是你最差的∥畲В”(他沒(méi)有預(yù)料到桥爽,使用數(shù)碼相機(jī),一些人可以在一周內(nèi)達(dá)到這一目標(biāo)昧识。)真正的專(zhuān)業(yè)知識(shí)可能需要一生的時(shí)間:nsamel johnson(1709-1784)說(shuō):“任何部門(mén)的卓越只有通過(guò)一生的勞動(dòng)才能達(dá)到钠四,而不是以更低的價(jià)格購(gòu)買(mǎi)」蚶悖”喬叟(1340-1400)抱怨道:“賴(lài)夫太短了形导,工藝太長(zhǎng)了环疼。”Hippocrates(公元前400年)以摘錄“Ars Longa朵耕,nvita brevis”而聞名炫隶,這是較長(zhǎng)的引語(yǔ)“Ars Longa,vita nbrevis阎曹,equo o precep伪阶,試驗(yàn)性周膜,niudicium n荊棘”的一部分处嫌,在英語(yǔ)中栅贴,這段摘錄被描述為“生命短暫,工藝短暫熏迹,機(jī)會(huì)飛逝檐薯,實(shí)驗(yàn)變化無(wú)常,判斷困難”注暗。當(dāng)然坛缕,沒(méi)有一個(gè)數(shù)字是最終的答案:假設(shè)所有技能(例如編程、下棋捆昏、跳棋和音樂(lè)演奏)都需要完全相同的時(shí)間來(lái)掌握赚楚,也不認(rèn)為所有的人都需要完全相同的時(shí)間,這似乎是不合理的骗卜。作為非教授宠页。K.安德斯·愛(ài)立信他說(shuō):“在大多數(shù)領(lǐng)域,即使是最沒(méi)有天賦的人也需要多少時(shí)間才能達(dá)到最高水平寇仓,這是很值得注意的举户。1萬(wàn)小時(shí)的時(shí)間讓你感覺(jué)到,我們談?wù)摰氖敲恐?0到20小時(shí)的時(shí)間遍烦,有些人會(huì)認(rèn)為俭嘁,那些天生最有天賦的人仍然需要達(dá)到最高水平∪橛洌”
所以你想成為一名程序員
下面是我編程成功的秘訣:
到達(dá)感興趣在編程中,并做一些屯远,因?yàn)樗怯腥さ穆Α4_保它保持足夠的樂(lè)趣,這樣你就會(huì)愿意投入你的十年/10,000小時(shí)慨丐。
程序坡脐。最好的學(xué)習(xí)方式是邊做邊學(xué)。更嚴(yán)格地說(shuō)房揭,“在特定領(lǐng)域中备闲,個(gè)人的最高性能水平并不是隨著經(jīng)驗(yàn)的擴(kuò)展而自動(dòng)達(dá)到的晌端,但是,即使是經(jīng)驗(yàn)豐富的個(gè)人恬砂,也可以通過(guò)刻意改進(jìn)的努力來(lái)提高nPerformance的水平咧纠。”(第366頁(yè))“最有效的學(xué)習(xí)需要一個(gè)明確的任務(wù)泻骤,對(duì)于特定的個(gè)體來(lái)說(shuō)漆羔,有一個(gè)不合適的難度水平,信息反饋狱掂,以及重復(fù)和糾正錯(cuò)誤的機(jī)會(huì)演痒。”(第20-21頁(yè))書(shū) 實(shí)踐中的認(rèn)知:日常生活中的思維趋惨、數(shù)學(xué)與文化是這個(gè)觀點(diǎn)的有趣的參考鸟顺。
與人交談其他程序員;閱讀其他程序器虾。這比任何書(shū)籍或培訓(xùn)課程都更重要讯嫂。
如果你愿意,把四年學(xué)院(或更多在一所研究所)曾撤。這會(huì)讓你獲得一些需要國(guó)家職業(yè)證書(shū)的工作端姚,也會(huì)讓你對(duì)這個(gè)領(lǐng)域有更深入的了解,但如果你不喜歡上學(xué)挤悉,你可以(用一些奉獻(xiàn)精神)獨(dú)自或在工作中獲得類(lèi)似的經(jīng)驗(yàn)渐裸。無(wú)論如何,單靠書(shū)本學(xué)習(xí)是不夠的装悲』杈椋“計(jì)算機(jī)科學(xué)教育不能使任何人成為專(zhuān)業(yè)程序員,就像研究畫(huà)筆和顏料可以使某人成為專(zhuān)業(yè)畫(huà)家一樣”埃里克·雷蒙德(Eric Raymond)說(shuō)诀诊《床常“新黑客詞典”。我雇的最好的程序員之一只有高中學(xué)位属瓣,他產(chǎn)生了很多太棒了 軟件载迄,有他自己的新聞組,并有足夠的股票期權(quán)購(gòu)買(mǎi)他自己的股票抡蛙。夜總會(huì).
研究項(xiàng)目其他程序員护昧。做最好的程序員,不做某些項(xiàng)目粗截;在其他項(xiàng)目上做最差的程序員惋耙。當(dāng)你是最好的,你可以測(cè)試你的能力,領(lǐng)導(dǎo)一個(gè)項(xiàng)目绽榛,并以你的遠(yuǎn)見(jiàn)鼓舞他人湿酸。當(dāng)你是最壞的時(shí)候,你學(xué)會(huì)了主人做什么灭美,你學(xué)會(huì)了他們不喜歡做的事情(因?yàn)樗麄儾蛔屇銥樗麄冏?推溃。
研究項(xiàng)目后其他程序員。理解別人寫(xiě)的程序冲粤∶滥看看當(dāng)最初的程序員不在的時(shí)候,需要做些什么來(lái)理解和修復(fù)它梯捕。想一想如何設(shè)計(jì)你的程序厢呵,讓那些在你之后維護(hù)它們的人更容易。
至少學(xué)半打編程語(yǔ)言傀顾。包括一種強(qiáng)調(diào)類(lèi)抽象(比如Java或C++)襟铭、一種強(qiáng)調(diào)函數(shù)抽象(比如Lisp、ML或Haskell)短曾、一種支持語(yǔ)法抽象(比如Lisp)寒砖、一種支持聲明性規(guī)范(比如Prolog或C++nTemplate)、以及一種強(qiáng)調(diào)并行性(比如Clojure或Go)的nlanguage嫉拐。
請(qǐng)記住哩都,有一個(gè)“電腦在“計(jì)算機(jī)科學(xué)”中。知道您的計(jì)算機(jī)執(zhí)行指令婉徘、從內(nèi)存中獲取一個(gè)單詞(有或沒(méi)有緩存錯(cuò)誤)漠嵌、從磁盤(pán)中讀取連續(xù)單詞以及在磁盤(pán)上尋找一個(gè)新位置需要多長(zhǎng)時(shí)間。答案在這里盖呼。)
卷入一種語(yǔ)言標(biāo)準(zhǔn)化努力儒鹿。它可能是ANSI C++委員會(huì),也可能是nn決定您的本地編碼樣式是否有2或4個(gè)空格縮進(jìn)級(jí)別几晤。不管是哪種方式约炎,你都會(huì)了解到其他人在一種語(yǔ)言中喜歡什么,他們有多深的感覺(jué)蟹瘾,也許還有一點(diǎn)圾浅,他們?yōu)槭裁磿?huì)有這種感覺(jué)。
有很好的判斷力下語(yǔ)言標(biāo)準(zhǔn)化工作越快越好憾朴。
考慮到所有這些狸捕,通過(guò)nbook學(xué)習(xí)你能走多遠(yuǎn),這是值得懷疑的伊脓。在我的第一個(gè)孩子出生之前府寒,我讀了所有的如何還覺(jué)得自己是個(gè)無(wú)知的新手。30個(gè)月后报腔,當(dāng)我的第二個(gè)孩子即將出生的時(shí)候株搔,我是否回到書(shū)本上去做復(fù)習(xí)?沒(méi)有纯蛾。相反纤房,我依靠的是我的個(gè)人經(jīng)驗(yàn),事實(shí)證明翻诉,比起成千上萬(wàn)頁(yè)的專(zhuān)家撰寫(xiě)的文章炮姨,這些經(jīng)驗(yàn)對(duì)我來(lái)說(shuō)更有用,也更讓我放心碰煌。
弗雷德·布魯克斯舒岸,在他的文章中沒(méi)有銀彈為尋找優(yōu)秀的nsoft設(shè)計(jì)人員確定了三部分計(jì)劃:
系統(tǒng)地盡早確定頂級(jí)設(shè)計(jì)師。
指派一位職業(yè)導(dǎo)師負(fù)責(zé)前景的發(fā)展芦圾,并仔細(xì)保存一份職業(yè)檔案蛾派。
為不斷成長(zhǎng)的設(shè)計(jì)師提供互動(dòng)和相互激勵(lì)的機(jī)會(huì)。
這假設(shè)有些人已經(jīng)具備了成為一名偉大設(shè)計(jì)師所必需的素質(zhì)个少;工作就是適當(dāng)?shù)睾逅麄儓?jiān)持下去洪乍。艾倫·恩佩利斯更簡(jiǎn)潔地說(shuō):“每個(gè)人都可以被教導(dǎo)雕刻:nMichelangelo將不得不被教導(dǎo)如何不這樣做。偉大的程序員也是如此夜焦】前模”佩利斯說(shuō)偉大的球員有一些超越訓(xùn)練的內(nèi)在素質(zhì)。但是質(zhì)量是從哪里來(lái)的呢茫经?是天生的嗎巷波?或者他們是通過(guò)勤奮來(lái)發(fā)展它的呢?作為奧古斯特·古斯托(小說(shuō)中的廚師)拉塔托維爾)說(shuō):“任何人都會(huì)做飯科平,但只有無(wú)畏的人才能做得好褥紫。”我認(rèn)為它更多的是愿意把一個(gè)人一生中的大部分時(shí)間花在深思熟慮的實(shí)踐上瞪慧。但也許無(wú)畏是總結(jié)這一點(diǎn)的一種方式髓考。或者弃酌,正如古斯托的批評(píng)家南頓·艾格所說(shuō):“不是每個(gè)人都能成為偉大的藝術(shù)家氨菇,但偉大的藝術(shù)家可以來(lái)自任何地方〖讼妫”
因此查蓉,繼續(xù)購(gòu)買(mǎi)Java/Ruby/Javascript/PHP書(shū)籍;您可能會(huì)從中得到一些使用榜贴。但你不會(huì)在24小時(shí)或21天內(nèi)改變你的生活豌研,也不會(huì)改變你作為程序員的真正專(zhuān)業(yè)知識(shí)妹田。為什么要努力工作,在24個(gè)月內(nèi)不斷提高呢鹃共?現(xiàn)在你開(kāi)始有進(jìn)展了..鬼佣。
參考文獻(xiàn)
布盧姆,本杰明(編輯)培養(yǎng)青年人才霜浴,巴蘭汀晶衷,1985年。
布魯克斯弗雷德沒(méi)有銀子彈阴孟,IEEE Computer晌纫,第20卷,第4號(hào)永丝,1987年锹漱,第10-19頁(yè)。
Bryan慕嚷,W.L.&Harter凌蔬,N.“關(guān)于電報(bào)語(yǔ)言的研究:n.養(yǎng)成一種習(xí)慣的等級(jí)制度。心理學(xué)評(píng)論, 1899, 8, 345-375
海斯闯冷,約翰·R.完全問(wèn)題求解器Lawrence Erlbaum砂心,1989年。
放大圖片作者:William G.&Simon蛇耀,Herbert A.“國(guó)際象棋中的知覺(jué)” 認(rèn)知心理學(xué), 1973, 4, 55-81.
拉維簡(jiǎn)實(shí)踐中的認(rèn)知:日常生活中的思維辩诞、數(shù)學(xué)與文化,劍橋大學(xué)出版社纺涤,1988年译暂。
答案
典型PC上各種操作的大致時(shí)間:
執(zhí)行典型指令 1/1 000 000 000秒=1納塞克
從L1高速緩存存儲(chǔ)器中提取 0.5納米
分支誤判 5納米級(jí)
從L2緩存存儲(chǔ)器中提取 7納米
互斥鎖/解鎖 25納米
從主存儲(chǔ)器中取出 100納米
在1 Gbps網(wǎng)絡(luò)上發(fā)送2K字節(jié) 20 000納塞克
從內(nèi)存中順序讀取1MB 25萬(wàn)納塞克
從新磁盤(pán)位置獲取(查找) 8,000,000納塞c
從磁盤(pán)順序讀取1MB 20,000,000納塞c
把美國(guó)包裹寄回歐洲 150毫秒=150 000 000納塞克
附錄:語(yǔ)言選擇
有幾個(gè)人問(wèn)他們應(yīng)該先學(xué)哪種編程語(yǔ)言。沒(méi)有一個(gè)答案撩炊,但請(qǐng)考慮以下幾點(diǎn):
利用你的朋友外永。當(dāng)被問(wèn)到“ni應(yīng)該使用什么操作系統(tǒng)、Windows拧咳、Unix還是Mac伯顶?”時(shí),我的回答通常是:“使用朋友使用的任何東西骆膝〖礼茫”從您的nFriends學(xué)習(xí)中獲得的優(yōu)勢(shì)將抵消操作系統(tǒng)之間或編程語(yǔ)言之間的任何內(nèi)在差異。還要考慮你未來(lái)的朋友:如果你不繼續(xù)的話阅签,你會(huì)成為程序員社區(qū)的一部分掐暮。你所選擇的語(yǔ)言是一個(gè)成長(zhǎng)中的大社區(qū),還是一個(gè)即將消亡的小群體政钟?是否有書(shū)籍路克、網(wǎng)站和在線論壇可以獲得答案樟结?你喜歡那些論壇上的人嗎?
保持簡(jiǎn)單精算。像C++NANDJava這樣的編程語(yǔ)言是為專(zhuān)業(yè)開(kāi)發(fā)而設(shè)計(jì)的狭吼,由大量的有經(jīng)驗(yàn)的程序員組成,他們關(guān)心nnd代碼的運(yùn)行時(shí)效率殖妇。因此,這些語(yǔ)言具有為這些情況設(shè)計(jì)的復(fù)雜部分破花。你關(guān)心的是學(xué)習(xí)編程谦趣。你不需要那種并發(fā)癥。你想要一種設(shè)計(jì)成易于學(xué)習(xí)和記住的語(yǔ)言座每,而不是一個(gè)新的程序員前鹅。
玩。你更愿意學(xué)習(xí)彈鋼琴的哪一種方式:非常規(guī)的互動(dòng)方式峭梳,在你一按下鍵就能聽(tīng)到每個(gè)音符舰绘,而不是“分批”模式,即你只在完成整首歌之后才能聽(tīng)到音符葱椭?交互模式使鋼琴和編程更容易學(xué)習(xí)捂寿。堅(jiān)持一種互動(dòng)的語(yǔ)言,并使用它孵运。
考慮到這些標(biāo)準(zhǔn)秦陋,我對(duì)第一種編程語(yǔ)言的建議是:Python或方案。另一個(gè)選擇是Javascript治笨,不是因?yàn)樗鼮槌鯇W(xué)者設(shè)計(jì)得很好驳概,而是因?yàn)樗泻芏嘣诰€教程,例如汗學(xué)院教程旷赖。但你的情況可能會(huì)不同顺又,還有其他好的選擇。如果你的噸位是個(gè)位數(shù)等孵,你可能更喜歡愛(ài)麗絲或吱吱聲或布洛克(年長(zhǎng)的學(xué)習(xí)者也可能喜歡這些)稚照。重要的是你選擇并開(kāi)始。
附錄:書(shū)籍和其他資源
有幾個(gè)人問(wèn)他們應(yīng)該向哪些書(shū)籍和網(wǎng)頁(yè)學(xué)習(xí)俯萌。我再說(shuō)一遍锐锣,“光靠書(shū)本學(xué)習(xí)是不夠的”,但我不能推薦以下幾點(diǎn):
計(jì)劃: 計(jì)算機(jī)程序的結(jié)構(gòu)與解釋(Abelson&Sussman)也許是對(duì)計(jì)算機(jī)科學(xué)的最好的介紹绳瘟,它確實(shí)教編程作為理解計(jì)算機(jī)科學(xué)的一種方式雕憔。