十年內(nèi)自學編程

十年內(nèi)自學編程

彼得·諾維格

為什么大家都這么著急要尔?

走進任何一家書店婉宰,您將了解如何在 24 小時內(nèi)自學 Java势似,并在幾天或幾小時內(nèi)提供無休止的變體拌夏,以教授 C、SQL履因、Ruby障簿、算法等。亞馬遜高級搜索 [標題: 教栅迄, 你自己站故, 小時, 自: 2000 年以來毅舆, 并發(fā)現(xiàn)了 512 這樣的書西篓。前十名中,有九本是編程書籍(另一本是關于簿記的)憋活。類似的結果來自將"自學"替換為"學習"或"小時"與"天"岂津。

結論是,要么人們急于學習編程悦即,要么編程比什么都容易學吮成。Felleisen等人在《如何設計程序》一書中對這種趨勢點頭,當時他們說"糟糕的編程很容易辜梳。白癡可以在21天內(nèi)學會粱甫,即使他們是假人。阿布特魯斯鵝漫畫也有他們采取冗美。

讓我們分析一下 24 小時內(nèi)"C++"標題可能意味著什么:

教導自己:在24小時內(nèi)魔种,你將沒有時間寫幾個重要的程序,并學習你的成功和失敗與他們粉洼。您沒有時間與經(jīng)驗豐富的程序員合作节预,并了解生活在一個良好的環(huán)境中C++∈羧停總之安拟,你將沒有時間學習太多。所以這本書只能說是膚淺的熟悉宵喂,不能是深刻的理解糠赦。正如亞歷山大·波普說的,一點學習是危險的事情锅棕。

C++:在24小時內(nèi)拙泽,你也許能夠?qū)W習C++的一些語法(如果你已經(jīng)知道另一種語言),但你不能學到很多如何使用的語言裸燎。簡言之顾瞻,如果你是一個基本程序員,你可以學會用C++語法編寫基本風格的程序德绿,但是你不能學習C++實際上是好(和壞)什么荷荤。那有什么意義呢?艾倫·佩利斯曾經(jīng)說過:"一種不影響你編程方式的語言移稳,不值得了解蕴纳。一個可能的觀點是,你必須學習一點點C++(或者更可能个粱,像JavaScript或處理)古毛,因為你需要與現(xiàn)有的工具接口來完成一個特定的任務。但是都许,你并沒有學習如何編程;你正在學習完成那個任務

在24小時:不幸的是稻薇,這是不夠的,如下一節(jié)顯示梭稚。

十年內(nèi)自學編程

研究人員(Bloom(1985年)颖低、布萊恩和哈特(1899年)、海耶斯(1989年)弧烤、西蒙和蔡斯(1973年))表明忱屑,在象棋、音樂創(chuàng)作暇昂、電報操作莺戒、繪畫、鋼琴演奏急波、游泳从铲、網(wǎng)球以及神經(jīng)心理學和拓撲學研究等許多領域,大約需要10年時間澄暮。關鍵是審議實踐:不只是一次又一次地做名段,而是用一個超出你當前能力的任務來挑戰(zhàn)自己阱扬,嘗試一下,在做之后分析你的表現(xiàn)伸辟,并糾正任何錯誤麻惶。然后重復。再重復一遍似乎沒有真正的捷徑:即使是4歲時音樂神童的莫扎特信夫,也花了13年時間才開始創(chuàng)作世界級的音樂窃蹋。在另一種類型中,披頭士樂隊似乎以一連串的#1和1964年埃德·沙利文的時裝秀而登上舞臺静稻。但是他們自1957年以來一直在利物浦和漢堡打小俱樂部警没,雖然他們很早就有大眾的吸引力,但他們的第一次重大成功振湾,佩珀斯中士杀迹,在1967年被釋放。

馬爾科姆·格拉德威爾已經(jīng)推廣了這個想法恰梢,盡管他專注于10佛南,000小時,而不是10年嵌言。亨利·卡蒂埃-布雷森(1908-2004)還有另一個指標:"你的前10嗅回,000張照片是你們最差的。"(他沒想到摧茴,使用數(shù)碼相機绵载,有些人可以在一個星期內(nèi)達到這個目標。真正的專業(yè)知識可能需要一生的時間:塞繆爾·約翰遜(Samuel Johnson苛白,1709-1784)說:"任何部門都只有一生的勞動才能取得卓越成就;它不應該以較低的價格購買娃豹。喬瑟 (1340 - 1400) 抱怨道: "萊夫這么短, 工藝這么久购裙, 對勒恩來說懂版。Hippocrates (c. 400BC) 以摘錄 "ars longa, vita brevis" 而廣為人知躏率, 這是較長語錄 "阿爾斯 · 朗加躯畴, 維塔 · 布雷維斯, 偶爾練習薇芝, 實驗腹膜蓬抄, 膽汁困難" 的一部分, 在英語中渲染為 "生命是短暫的夯到, [the] 工藝長嚷缭, 機會轉(zhuǎn)瞬即逝, 實驗背信棄義, 判斷困難" 阅爽。當然路幸,沒有一個數(shù)字可以是最終的答案:似乎不合理地假設所有技能(如編程、棋牌优床、跳棋和音樂演奏)都需要完全相同的時間來掌握劝赔,也不認為所有人都需要完全相同的時間誓焦。正如安德斯·愛立信教授所說胆敞,"在大多數(shù)領域,即使是最有才華的個人也需要多少時間才能達到最高水平杂伟,這一點令人矚目移层。10,000 小時的數(shù)字只是讓您感覺到赫粥,我們談論的是每周 10 到 20 小時观话,有些人會認為這些人是天生的天才人才,仍然需要達到最高水平越平。

所以你想成為一名程序員

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

對編程感興趣频蛔,并做一些,因為它很有趣秦叛。確保它一直足夠有趣晦溪,這樣你才愿意投入你的十年/10,000小時挣跋。

程序三圆。最好的學習就是通過做學習。更技術上說避咆,"給定領域中個人的最高績效水平不是作為擴展經(jīng)驗的函數(shù)自動實現(xiàn)的舟肉,但即使經(jīng)驗豐富的個人,由于經(jīng)過深思熟慮查库,可以提高績效水平路媚。羅夫。(第366)和"最有效的學習需要一個明確界定的任務樊销,對于特定的個人整慎,信息豐富的反饋,以及重復和糾正錯誤的機會现柠,具有適當?shù)碾y度級別院领。(第20-21號)《實踐認知:日常生活中的思維、數(shù)學和文化》一書是這一觀點的有趣參考够吩。

與其他程序員交談;閱讀其他程序比然。這一點比任何書籍或培訓課程都重要。

如果你想的話周循,在一所大學里工作四年(或者多在研究生院)强法。這將讓您訪問一些需要證書的工作万俗,并讓您更深入地了解該領域,但如果您不喜歡學校饮怯,您可以(有一些奉獻精神)獲得類似的經(jīng)驗闰歪,自己或工作。無論如何蓖墅,單靠書本學習是不夠的库倘。《新黑客詞典》的作者埃里克·雷蒙德(Eric Raymond)說:"計算機科學教育不能讓任何人成為專家程序員论矾,更不能讓任何人成為專家程序員教翩,更不能讓任何人成為專家畫家。我雇傭過的最好的程序員之一只有高中學位;他制作了很多偉大的軟件贪壳, 有自己的新聞集團饱亿, 并做了足夠的股票期權, 以購買自己的夜總會闰靴。

與其他程序員一起處理項目彪笼。成為某些項目的最佳程序員;是其他人最差的。當你是最好的蚂且,你可以測試你的能力配猫,領導一個項目,并激勵別人與你的遠見膘掰。當你是最差的時候章姓,你學習主人做什么,你學習他們不喜歡做什么(因為他們讓你為他們做)识埋。

在其他程序員之后處理項目凡伊。了解其他人編寫的程序≈现郏看看當原始程序員不在的時候系忙,需要什么來理解和修復它』莶颍考慮如何設計程序银还,使那些在您之后維護程序的人更容易。

學習至少六種編程語言洁墙。包括一種強調(diào)類抽象的語言(如Java或C++)蛹疯、一種強調(diào)函數(shù)抽象的語言(如Lisp或ML或哈斯克爾)、一種支持句法抽象的語言(如Lisp)热监、一種支持聲明性規(guī)范(如Prolog或C++模板)的語言捺弦,以及一種強調(diào)并行性的語言(如Cljure或 Go)。

請記住,"計算機科學"中存在"計算機"列吼。了解計算機執(zhí)行指令幽崩、從內(nèi)存中獲取單詞(有和沒有緩存錯過)、從磁盤讀取連續(xù)單詞以及查找磁盤上的新位置需要多長時間寞钥。(答案在這里慌申。

參與語言標準化工作。它可能是 ANSI C++理郑,也可以決定您的本地編碼風格是否具有 2 或 4 個空間縮進級別蹄溉。無論哪種方式,你都了解別人喜歡的語言香浩,他們感覺有多深类缤,甚至一點點關于他們?yōu)槭裁催@樣的感覺。

有好感邻吭,盡快擺脫語言標準化工作。

想到這一切宴霸, 你只要通過書本學習能多遠囱晴, 就值得懷疑了。在我的第一個孩子出生之前瓢谢,我讀了所有的《如何》一書畸写,仍然覺得自己是一個無知的新手。30 個月后氓扛, 當我的第二個孩子到期時枯芬, 我回到書本上復習一下嗎?不采郎。相反千所,我依靠我個人的經(jīng)驗,事實證明蒜埋,這比我有用和放心得多淫痰,比專家寫的數(shù)千頁。

弗雷德·布魯克斯在他的論文《沒有銀彈》中確定了尋找偉大軟件設計師的三部分計劃:

盡早系統(tǒng)地確定頂級設計師整份。

指派一位職業(yè)導師負責潛在客戶的發(fā)展待错,并仔細保存職業(yè)檔案。

為成長的設計師提供互動和刺激的機會烈评。

這假定有些人已經(jīng)具備成為偉大設計師所需的素質(zhì);工作是正確地哄他們一起火俄。艾倫·佩利斯說得更簡潔:"每個人都可以被教導去雕刻:米開朗基羅必須被教導如何不雕刻。因此讲冠,這是與偉大的程序員"瓜客。佩利斯說,偉大的球員有一些超越他們訓練的內(nèi)部素質(zhì)。但是質(zhì)量從何而來呢忆家?是天生的嗎犹菇?還是他們通過勤奮來發(fā)展?正如奧古斯特·古斯托(拉塔圖耶虛構的廚師)所說芽卿,"任何人都可以做飯揭芍,但只有無所畏懼的人才能是偉大的。我認為更多的是愿意把一生中的很大一部分用于審議實踐卸例。但也許無所畏懼是總結這一點的一種方式称杨。或者筷转,正如古斯托的批評家安東·埃戈所說:"不是每個人都能成為一個偉大的藝術家姑原,但一個偉大的藝術家可以來自任何地方。

因此呜舒,繼續(xù)購買 Java/Ruby/Javascript/PHP 書籍;你可能會從中得到一些利用锭汛。但你不會改變你的生活,或者你作為程序員在24小時或21天內(nèi)真正的整體專業(yè)知識袭蝗。努力在24個月內(nèi)不斷改進怎么樣唤殴?現(xiàn)在你開始找個地方了...

引用

布魯姆,本杰明(Ed.)培養(yǎng)年輕人的人才到腥,巴蘭廷朵逝,1985年。

布魯克斯乡范, 弗雷德配名, 沒有銀彈, IEEE 電腦晋辆, 第 20 卷渠脉, 第 4 號, 1987 年栈拖, 第 10 - 19 周连舍。

布萊恩, W. l. – 哈特涩哟, N. "關于電報語言的研究: 獲得習慣的層次索赏。心理學評論, 1899贴彼, 8潜腻, 345-375

海斯,約翰R.器仗,完全問題解決者勞倫斯·埃鮑姆融涣,1989年童番。

蔡斯, 威廉 G. & 西蒙威鹿, 赫伯特 A. "國際象棋感知" 認知心理學剃斧, 1973 年, 4忽你, 55 - 81 幼东。

拉夫,讓科雳,實踐認知:思維根蟹,數(shù)學和文化的日常生活,劍橋大學出版社糟秘,1988年简逮。

答案

典型 PC 上各種操作的大致計時:

執(zhí)行典型指令 1/1,000尿赚,000散庶,000 秒 = 1 納米秒從 L1 緩存內(nèi)存 0。5 nanosec 分網(wǎng)預測錯誤 5 納米秒從 L2 緩存存儲器 7 nanosecMutex 鎖 / 解鎖 25 nanosecfetch 從主存儲器 100 nanosecsend 2K 字節(jié)超過 1Gbps 網(wǎng)絡 20吼畏,000 nanosecread 1MB 順序從內(nèi)存 250督赤,000 從新的磁盤位置 (尋求) 8,000泻蚊,000 nanosecread 1MB 順序從磁盤 20,000丑婿,000 nanosec 發(fā)送數(shù)據(jù)包美國到歐洲和回 150 毫秒 = 150性雄,000,000 nanosec

附錄:語言選擇

有幾個人問他們應該先學什么編程語言羹奉。沒有一個答案秒旋,但請考慮以下幾點:

用你的朋友。當被問及"我應該使用什么操作系統(tǒng)诀拭,Windows迁筛,Unix,還是Mac耕挨?從朋友那里學習的好處將抵消操作系統(tǒng)之間或編程語言之間的任何內(nèi)在差異细卧。還要考慮你未來的朋友:如果你繼續(xù),你將成為其中一員的程序員社區(qū)筒占。您選擇的語言是有一個龐大的成長社區(qū)還是一個垂死的小社區(qū)贪庙?是否有書籍、網(wǎng)站和在線論壇可以獲得答案翰苫?你喜歡那些論壇里的人嗎止邮?

保持簡單这橙。編程語言(C++ 和 Java)是由經(jīng)驗豐富的程序員團隊為專業(yè)開發(fā)而設計的,他們關注代碼的運行時效率导披。因此屈扎,這些語言具有專為這些情況設計的復雜部分。你關心的是學習編程撩匕。你不需要這種并發(fā)癥鹰晨。您想要一種由單個新程序員設計得易于學習和記憶的語言。

玩滑沧。你寧愿學習哪種方式彈鋼琴:正常的互動方式并村,你一點擊一個鍵,或"批"模式滓技,你只聽到音符后哩牍,你完成了一整首歌?顯然令漂,交互式模式使鋼琴和編程的學習更加容易膝昆。堅持使用交互式模式的語言并使用它。

鑒于這些標準叠必,我對第一種編程語言的建議將是Python或S方案荚孵。另一種選擇是Javascript,不是因為它為初學者設計得很好纬朝,而是因為有這么多的在線教程收叶,如Khan學院的教程。但是共苛,你的情況可能會有所不同判没,還有其他不錯的選擇。如果你的年齡是一位數(shù)隅茎,你可能更喜歡愛麗絲或吱吱聲或塊(年齡較大的學習者也可能喜歡這些)澄峰。重要的是你選擇并開始。

附錄:書籍和其他資源

有幾個人問他們應該從哪些書籍和網(wǎng)頁中學習辟犀。我再說一遍俏竞, "單靠書學習是不夠的", 但我可以推薦以下內(nèi)容:

方案:計算機程序的結構和解釋(Abelson & Sussman)可能是計算機科學的最佳介紹堂竟,它教編程作為理解計算機科學的一種方式魂毁。您可以在線查看有關本書的講座視頻,以及完整的文本跃捣。這本書很有挑戰(zhàn)性漱牵,將一些人從另一種方法中去掉。

方案:如何設計程序(Felleisen等人)是有關如何以優(yōu)雅和實用的方式實際設計程序的最佳書籍之一疚漆。

Python: Python 編程: 使用 Python 的 Cs 簡介 (Zelle) 是一個很好的介紹酣胀。

Python:在一些在線教程Python.org刁赦。

奧茲: 計算機編程的概念、技術和模型 (范羅伊和哈里迪) 被一些人視為阿貝爾森和蘇斯曼的現(xiàn)代接班人闻镶。這是一個通過編程的大想法之旅甚脉, 涵蓋比亞伯森和蘇斯曼更廣泛的范圍, 而也許更容易閱讀和遵循铆农。它使用一種語言牺氨,Oz,這是不廣為人知墩剖,但作為學習其他語言的基礎猴凹。<

筆記

T. Capey指出,亞馬遜上的"完全問題解決者"頁面現(xiàn)在有"在21天內(nèi)自學孟加拉語"和"自學語法和風格"的書籍下"為這個項目購物的顧客也為這些物品購物"部分岭皂。我猜看那本書的人很多來自這個頁面郊霎。感謝羅斯·科恩對希波克拉底的幫助

翻譯

由于以下作者,本頁的翻譯有:阿拉伯文

(穆罕默德·葉海亞)

保加利亞語

(博伊科·班切夫)

中文

(郭曉剛)

克羅地亞語

(特夫爾特科·貝德科維奇)

(費德里科·戈博)

法語

(艾蒂安·博切斯內(nèi))

德語

(斯特凡·拉姆)

希伯來語

(埃里克·麥凱恩)

印地語

(維卡什·蒂瓦里)

匈牙利語

(馬頓·梅斯蒂揚)

印度尼西亞語

(特里吉托·桑托索)

意大利語

(法比奧·泰西托)

日語

(約莫約莫)

韓語(黃恳妗)

波斯語

(邁赫迪·阿加里)

波蘭語

(庫巴·諾瓦克)

葡萄牙語

(奧古斯托·拉德克)

羅馬尼亞

(特凡·拉澤爾)

俄語

(康斯坦丁·普蒂辛)

塞爾維亞語

(拉扎爾·科瓦切維奇)

西班牙語

(卡洛斯·魯埃達)

斯洛伐克語

(揚·瓦克勞耶克)

土耳其語

(阿塞爾·烏盧沙欣)

烏克蘭

(奧萊克西·莫爾恰諾夫斯基)


彼得·諾維格 (版權所有书劝,2001-2014)

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市土至,隨后出現(xiàn)的幾起案子购对,更是在濱河造成了極大的恐慌,老刑警劉巖陶因,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骡苞,死亡現(xiàn)場離奇詭異,居然都是意外死亡楷扬,警方通過查閱死者的電腦和手機烙如,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毅否,“玉大人,你說我怎么就攤上這事蝇刀∶樱” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵吞琐,是天一觀的道長捆探。 經(jīng)常有香客問我,道長站粟,這世上最難降的妖魔是什么黍图? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮奴烙,結果婚禮上助被,老公的妹妹穿的比我還像新娘剖张。我一直安慰自己,他們只是感情好揩环,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布搔弄。 她就那樣靜靜地躺著,像睡著了一般丰滑。 火紅的嫁衣襯著肌膚如雪顾犹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天褒墨,我揣著相機與錄音炫刷,去河邊找鬼。 笑死郁妈,一個胖子當著我的面吹牛浑玛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播圃庭,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼锄奢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了剧腻?” 一聲冷哼從身側響起拘央,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎书在,沒想到半個月后灰伟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡儒旬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年栏账,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栈源。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡挡爵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出甚垦,到底是詐尸還是另有隱情茶鹃,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布艰亮,位于F島的核電站闭翩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏迄埃。R本人自食惡果不足惜疗韵,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望侄非。 院中可真熱鬧蕉汪,春花似錦流译、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宛渐,卻和暖如春竞漾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窥翩。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工业岁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寇蚊。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓笔时,卻偏偏與公主長得像,于是被迫代替她去往敵國和親仗岸。 傳聞我的和親對象是個殘疾皇子允耿,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361