自學(xué)編程簡(jiǎn)述

十年自學(xué)編程

Peter Norvig

為什么大家都這么著急?

走進(jìn)任何一家書店,你就會(huì)知道怎么做24小時(shí)自學(xué)爪哇除了無止境的變化之外,還提供在幾天或幾小時(shí)內(nèi)教授C、SQL、Ruby、算法等。亞馬遜高級(jí)搜索[標(biāo)題:自學(xué),自學(xué),學(xué)時(shí),自2000年起找到了512本這樣的書。在前十名中,有九本是編程書籍(另一本是關(guān)于簿記)。類似的結(jié)果來自于用“學(xué)習(xí)”代替“自學(xué)”,或者用“天”代替“小時(shí)”

結(jié)論是,要么人們急于學(xué)習(xí)編程,要么編程比其他任何東西都容易得多。費(fèi)雷森等等在他們的書中對(duì)這種趨勢(shì)表示贊同如何設(shè)計(jì)程序,當(dāng)他們說“糟糕的編程很容易。白癡可以在21天即使他們是假人“《阿不勒斯鵝》漫畫也有他們的看法?.

我們來分析一下標(biāo)題是什么樣的24小時(shí)自學(xué)C可能意味著:

自學(xué):在24小時(shí)內(nèi),你將沒有時(shí)間編寫幾個(gè)重要的程序,并從成功和失敗中吸取教訓(xùn)。你沒有時(shí)間和有經(jīng)驗(yàn)的程序員一起工作,也沒有時(shí)間去理解生活在C環(huán)境中的感覺。簡(jiǎn)言之,你沒有時(shí)間去學(xué)習(xí)。所以這本書只能說是一種表面的熟悉,而不是深刻的理解。正如亞歷山大·波普所說,一點(diǎn)點(diǎn)學(xué)習(xí)是危險(xiǎn)的。

C:在24小時(shí)內(nèi),你也許能學(xué)會(huì)一些of c的語法(如果你已經(jīng)知道另一種語言的話),但你卻無法學(xué)到很多關(guān)于如何使用這種語言的知識(shí)。簡(jiǎn)而言之,如果你是一個(gè)基礎(chǔ)程序員,你可以學(xué)習(xí)用C語法以basic的風(fēng)格編寫程序,但是你不能學(xué)習(xí)C實(shí)際上的優(yōu)點(diǎn)(和缺點(diǎn))。那么有什么意義呢?AlanPerlis曾經(jīng)說過:“一種不影響你思考編程方式的語言是不值得知道的”。一個(gè)可能的觀點(diǎn)是你必須學(xué)習(xí)一點(diǎn)C語言(或者更可能是JavaScript或處理之類的東西),因?yàn)槟阈枰c一個(gè)現(xiàn)有的工具交互來完成特定的任務(wù)。但你并不是在學(xué)習(xí)如何編程,而是在學(xué)習(xí)如何完成這項(xiàng)任務(wù)。

24小時(shí)內(nèi):不幸的是,這還不夠,正如下一節(jié)所示。

十年自學(xué)編程

研究人員(布魯姆(1985)?,Bryan & Harter (1899)?,海斯(1989)?,西蒙蔡斯(1973))已經(jīng)證明了它需要十年的時(shí)間來發(fā)展在各個(gè)領(lǐng)域的專業(yè)知識(shí),包括國際象棋、音樂創(chuàng)作、電視廣播、繪畫、鋼琴演奏、游泳、網(wǎng)球以及歐洲心理學(xué)和拓?fù)鋵W(xué)的研究。關(guān)鍵是深思熟慮的練習(xí):不只是一次又一次地做,而是用一個(gè)超出你目前能力的任務(wù)來挑戰(zhàn)你自己,嘗試它,分析你在做的時(shí)候和之后的表現(xiàn),并改正任何錯(cuò)誤。然后重復(fù)。再重復(fù)一遍。似乎有諾雷亞爾的捷徑:即使是莫扎特,他在4歲時(shí)是一個(gè)音樂天才,也比他開始創(chuàng)作世界級(jí)的音樂多了13年。在另一個(gè)流派中,披頭士樂隊(duì)似乎是在1964年的埃德·沙利文秀上以1支流行歌曲的速度出現(xiàn)在現(xiàn)場(chǎng)。但是他們從1957年開始就在利物浦和漢堡的小俱樂部打球,雖然他們很早就受到了大眾的歡迎,但他們的第一次重大成功,辣椒中士,于1967年被釋放。

MalcolmGladwell盡管他專注于10000個(gè)小時(shí),而不是10年。Henri Cartier-Bresson(1908-2004)有另一個(gè)衡量標(biāo)準(zhǔn):“你的前10000張照片是你最差的?!保ㄋ麤]有想到數(shù)碼相機(jī),真正的專業(yè)知識(shí)可能需要一輩子的時(shí)間:塞繆爾·約翰遜(Samuel Johnson,1709-1784)曾說:“任何部門的卓越都只能靠一生的勞動(dòng)來獲得,而不是以較低的價(jià)格買到的?!眴疼牛?340-1400)抱怨道:“l(fā)yf太短了,希波克拉底(約公元前400年)因節(jié)選“ars longa,vita brevis”而聞名,這是較長(zhǎng)引語“ars longa,vita brevis,occasio praeceps,experitum periculosum,iudiciumdifficile”的一部分,在英語中是“生命是短暫的,[the]craftlong,機(jī)會(huì)轉(zhuǎn)瞬即逝,實(shí)驗(yàn)充滿危險(xiǎn),很難判斷?!碑?dāng)然,沒有一個(gè)數(shù)字可以作為最終答案:假設(shè)所有技能(例如編程、下棋、下棋和玩音樂)都需要完全相同的時(shí)間來掌握,也不認(rèn)為所有人都需要完全相同的時(shí)間來掌握。作為教授。K、 安德斯·愛立信他說:“在大多數(shù)領(lǐng)域,即使是最優(yōu)秀的個(gè)人也需要多少時(shí)間才能達(dá)到最高水平的績(jī)效,這一點(diǎn)是值得注意的。1萬小時(shí)的數(shù)字讓你感覺到,我們說的是一周10到20個(gè)小時(shí)的工作時(shí)間,有些人會(huì)說,那些天生最有才華的人,仍然需要達(dá)到最高水平。”

所以你想成為一名程序員

以下是我編程成功的秘訣:

得到感興趣的在編程方面,做一些因?yàn)樗苡腥?。一定要讓它保持足夠的樂趣,這樣你才會(huì)愿意投入你的10年/10000小時(shí)。

程序. 最好的學(xué)習(xí)方式是learningby doing. 從技術(shù)上講,“個(gè)人在某一特定領(lǐng)域的最高績(jī)效水平并不是作為經(jīng)驗(yàn)擴(kuò)展的函數(shù)自動(dòng)實(shí)現(xiàn)的,但是即使是經(jīng)驗(yàn)豐富的個(gè)人,通過深思熟慮的努力,績(jī)效水平也可以提高?!?a target="_blank">(第366頁)“最有效的學(xué)習(xí)需要一個(gè)明確的任務(wù),對(duì)特定的個(gè)體有適當(dāng)?shù)碾y度,信息反饋,以及重復(fù)和糾正錯(cuò)誤的機(jī)會(huì)?!保╬.20-21)實(shí)踐中的認(rèn)知:日常生活中的思維、數(shù)學(xué)與文化是這個(gè)觀點(diǎn)的一個(gè)有趣的參考。

與…交談其他程序員;閱讀其他程序。這比任何書籍或培訓(xùn)課程都重要。

如果你愿意的話,在一個(gè)學(xué)院(在農(nóng)業(yè)學(xué)?;蚋啵_@會(huì)讓你接觸到一些需要進(jìn)修的工作,也會(huì)讓你對(duì)這個(gè)領(lǐng)域有更深入的了解,但如果你不喜歡上學(xué),你可以(帶著一些奉獻(xiàn)精神)在自己或工作中獲得類似的經(jīng)驗(yàn)。無論如何,光靠書本學(xué)習(xí)是不夠的?!庇?jì)算機(jī)科學(xué)教育不能使任何人成為專業(yè)程序員,正如學(xué)習(xí)畫筆和顏料可以使某人成為專家畫家一樣新黑客詞典. 我雇過的最好的程序員之一只有高中學(xué)歷,他已經(jīng)做了很多工作偉大的軟件,有他自己的新聞組他賺了足夠的股票期權(quán)來買自己的夜總會(huì)?.

從事項(xiàng)目其他程序員。在某些項(xiàng)目上做最好的程序員;在其他項(xiàng)目上做最差的。當(dāng)你是最好的,你可以測(cè)試你的能力,領(lǐng)導(dǎo)一個(gè)項(xiàng)目,并用你的遠(yuǎn)見激勵(lì)別人。當(dāng)你是最差的時(shí)候,你會(huì)知道他們做什么,你也會(huì)知道他們不喜歡做什么(因?yàn)樗麄冏屇銥樗麄冏觯?/p>

從事項(xiàng)目之后其他程序員。理解別人寫的程序。看看需要什么才能理解并在最初的程序員不在的時(shí)候修復(fù)它。想想如何設(shè)計(jì)你的程序,讓那些在你之后維護(hù)它們的人更容易。

至少學(xué)半打程序設(shè)計(jì)語言. 包括一種強(qiáng)調(diào)類抽象的語言(如Java或C),一種強(qiáng)調(diào)功能抽象的語言(如Lisp或ML或Haskell),一種支持語法抽象(如Lisp),一種支持聲明性規(guī)范(如Prolog或C模板),以及一種強(qiáng)調(diào)并行性的語言(如Clojure或Go)。

記住有一個(gè)“計(jì)算機(jī)在“計(jì)算機(jī)科學(xué)”。知道您的計(jì)算機(jī)執(zhí)行一條指令、從內(nèi)存中獲取一個(gè)字(有或沒有緩存未命中)、從磁盤讀取連續(xù)的字以及在磁盤上尋找新位置所需的時(shí)間。(答案在這里?)

學(xué)習(xí)一門語言標(biāo)準(zhǔn)化努力。它可以是ANSI C委員會(huì),也可以是決定您的本地編碼風(fēng)格是否有2或4個(gè)空格縮進(jìn)級(jí)別。無論哪種方式,你都能了解到其他人喜歡哪種語言,他們的感受有多深,甚至可能了解他們?yōu)槭裁催@么想。

有理智下車語言標(biāo)準(zhǔn)化工作盡快進(jìn)行。

考慮到這些,你能從書本上學(xué)到什么還值得懷疑。在我第一個(gè)孩子出生之前,我讀了HowTo書,還是覺得自己是個(gè)無知的新手。30個(gè)月后,當(dāng)我的第二個(gè)孩子出生的時(shí)候,我有沒有為了更新鮮的東西而回去讀書?沒有。相反,我依靠的是我的個(gè)人經(jīng)驗(yàn),這比專家寫的幾千頁對(duì)我更有用,更讓我安心。

弗雷德·布魯克斯,在他的文章里沒有銀彈確定了尋找優(yōu)秀軟件設(shè)計(jì)師的三部分計(jì)劃:

盡早系統(tǒng)地確定頂尖設(shè)計(jì)師。

指派一位職業(yè)導(dǎo)師負(fù)責(zé)潛在客戶的發(fā)展,并認(rèn)真保存職業(yè)檔案。

為成長(zhǎng)中的設(shè)計(jì)師提供互動(dòng)和激勵(lì)的機(jī)會(huì)。

這是假設(shè)有些人已經(jīng)具備了成為一個(gè)偉大的設(shè)計(jì)師所必需的素質(zhì);工作就是適當(dāng)?shù)卣f服他們。AlanPerlis更簡(jiǎn)潔地說:“每個(gè)人都可以被教導(dǎo)去雕塑:米開朗基羅本應(yīng)該被教導(dǎo)如何不去雕塑。偉大的程序員也是如此。佩利斯說,偉大的球員有一些超越訓(xùn)練的內(nèi)在品質(zhì)。但質(zhì)量從何而來?是天生的嗎?或者他們是通過智力發(fā)展出來的?就像奧古斯特·古斯特(奧古斯特·古斯托)臘腸)“任何人都會(huì)做飯,但只有無畏的人才是偉大的?!蔽艺J(rèn)為這更像是愿意把自己一生的大部分時(shí)間投入到深思熟慮的實(shí)踐中。但也許吧無所畏懼是一種總結(jié)。正如古斯特所說:“不管是誰,也不是每個(gè)人都可以成為偉大的批評(píng)家?!?/p>

所以去買那本Java/Ruby/Javascript/PHP書吧;你可能會(huì)從中得到一些有用的東西。但你不會(huì)在24小時(shí)或21天內(nèi)改變你的生活,也不會(huì)改變你作為一個(gè)程序員真正的整體專業(yè)知識(shí)。在24個(gè)月內(nèi)努力工作以持續(xù)改進(jìn)怎么樣?好吧,現(xiàn)在你開始有所進(jìn)展了。。。

工具書類

布魯姆,本杰明(編輯)培養(yǎng)青年人才,百齡壇,1985年。

布魯克斯,弗雷德,沒有銀彈, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.

Bryan,W.L.&Harter,N.,《電報(bào)語言研究:習(xí)慣等級(jí)的習(xí)得》。心理學(xué)評(píng)論?,1899, 8, 345-375

海斯,約翰·R。,完成問題解決者Lawrence Erlbaum, 1989.

Chase, William G. & Simon, Herbert A.“象棋中的知覺”認(rèn)知心理學(xué)?, 1973, 4, 55-81.

Lave, Jean,實(shí)踐中的認(rèn)知:日常生活中的思維、數(shù)學(xué)與文化,劍橋大學(xué)出版社,1988年。

答案典型PC上各種操作的大致時(shí)間:

執(zhí)行典型指令1/1,000,000,000 sec = 1 nanosec

從一級(jí)緩存內(nèi)存提取0.5 nanosec

分支誤預(yù)測(cè)5 nanosec

從二級(jí)緩存內(nèi)存提取7 nanosec

互斥鎖/解鎖25 nanosec

從主存取出100 nanosec

通過1Gbps網(wǎng)絡(luò)發(fā)送2K字節(jié)20,000 nanosec

從內(nèi)存中按順序讀取1MB250,000 nanosec

從新磁盤位置獲?。╯eek)8,000,000 nanosec

從1MB磁盤順序讀取20,000,000 nanosec

把包裹寄到歐洲再寄回來150 milliseconds = 150,000,000 nanosec

附錄:語言選擇

有幾個(gè)人問他們應(yīng)該先學(xué)什么編程語言。沒有一個(gè)答案,但請(qǐng)考慮以下幾點(diǎn):

利用你的朋友. 當(dāng)被問到“我應(yīng)該使用什么操作系統(tǒng),Windows、Unix還是Mac?”,我的回答通常是:“使用你朋友使用的任何東西?!睆呐笥涯抢飳W(xué)習(xí)所獲得的好處將抵消操作系統(tǒng)之間或編程語言之間的任何內(nèi)在差異。還要考慮你未來的朋友:如果你繼續(xù)下去,你將成為程序員社區(qū)的一部分。你所選擇的語言是有一個(gè)正在成長(zhǎng)的大社區(qū)還是一個(gè)正在消亡的小社區(qū)?有沒有書籍、網(wǎng)站和在線論壇可以得到答案?你喜歡那些論壇里的人嗎?

保持簡(jiǎn)單. 這些語言的開發(fā)都是為了提高程序員的效率而設(shè)計(jì)的。你不需要復(fù)雜的語言,你需要的是一個(gè)新程序員設(shè)計(jì)的易于學(xué)習(xí)和記憶的語言。

玩吧你更愿意用哪種方式來學(xué)習(xí)彈鋼琴:一種正常的、互動(dòng)的方式,即你一按一個(gè)鍵就聽到每一個(gè)音符,或是“批處理”模式,即只在你完成一整首歌之后才聽到音符?顯然,交互模式使學(xué)習(xí)鋼琴和編程更容易。堅(jiān)持一種具有互動(dòng)模式的語言并加以運(yùn)用。

考慮到這些標(biāo)準(zhǔn),我對(duì)第一種編程語言的建議是蟒蛇方案. 另一個(gè)選擇是Javascript,這并不是因?yàn)樗浅_m合初學(xué)者,而是因?yàn)橛泻芏嚓P(guān)于它的在線教程,比如可汗學(xué)院教程。但你的情況可能會(huì)有所不同,還有其他好的選擇。如果你的年齡是個(gè)位數(shù),你可能更喜歡愛麗絲吱吱聲塊狀的(年長(zhǎng)的學(xué)習(xí)者可能也喜歡這些)。重要的是你選擇并開始。

附錄:書籍和其他資源

有幾個(gè)人問他們應(yīng)該從哪些書籍和網(wǎng)頁上學(xué)習(xí)。我重申“光靠書本學(xué)習(xí)是不夠的”,但我可以推薦以下幾點(diǎn):

方案:計(jì)算機(jī)程序的結(jié)構(gòu)和解釋(Abelson&Sussman)它無疑是計(jì)算機(jī)科學(xué)的最好的入門課程,它把編程作為理解計(jì)算機(jī)科學(xué)的一種方式。你可以看到講座在線視頻在這本書上,以及在線全文. 這本書很有挑戰(zhàn)性,它將淘汰一些也許可以用另一種方法成功的人。

方案:How toDesign Programs (Felleisen等等?)是一本關(guān)于如何以優(yōu)雅而實(shí)用的方式設(shè)計(jì)程序的最好的書之一。

蟒蛇:Python編程:CS簡(jiǎn)介(Zelle)是使用Python的一個(gè)很好的介紹。

蟒蛇:Severalonline教程可在Python.org網(wǎng)站?.

Oz:計(jì)算機(jī)程序設(shè)計(jì)的概念、技術(shù)和模型(范羅伊和哈里迪)is seen by some as the modern-day successor to Abelson & Sussman.It is a tour through the big ideas of programming, covering a widerrange than Abelson & Sussman while being perhaps easier to read andfollow. It uses a language, Oz, that is not widely known but serves asa basis for learning other languages.<

筆記

T、 卡佩指出完成問題解決者亞馬遜上的佩奇現(xiàn)在有“21天自學(xué)孟加拉語”和“自學(xué)語法和風(fēng)格”兩本書,分別位于“購買該產(chǎn)品的客戶也購買這些產(chǎn)品”部分。我想大部分看這本書的人都是從這一頁來的。多虧了羅斯·科恩對(duì)希波克拉底的幫助。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

  • 彼得·諾維格 為什么大家都這么著急? 走進(jìn)任何一家書店,您將了解如何在 24 小時(shí)內(nèi)自學(xué) Java,同時(shí)在幾天或幾...
    longlongKing閱讀 213評(píng)論 0 0
  • 十年內(nèi)自學(xué)編程? ...
    葛金龍閱讀 170評(píng)論 0 0
  • 十年自學(xué)編程 彼得·諾維格 為什么每個(gè)人都這么著急? 走進(jìn)任何書店,您將看到如何在24小時(shí)內(nèi)自學(xué)Java,以及無窮...
    梵星丶HanSin閱讀 164評(píng)論 0 0
  • 彼得·諾維格 為什么大家都這么著急? 走進(jìn)任何一家書店,你就會(huì)知道怎么做24小時(shí)自學(xué)爪哇除了無止境的變化之外,...
    清風(fēng)A1閱讀 192評(píng)論 0 1
  • 為什么每個(gè)人都這么著急? 走進(jìn)任何書店,您將看到如何在24小時(shí)內(nèi)自學(xué)Java,以及無窮無盡的變體,可以在幾天或幾小...
    wangxiaolong閱讀 329評(píng)論 0 1

友情鏈接更多精彩內(nèi)容