十年內(nèi)自學編程
彼得·諾維格
為什么大家都這么著急战秋?
走進任何一家書店,你就會看到如何 自學爪哇 24 小時內(nèi) 除了無休止的變化提供教 C讨韭, SQL脂信、Ruby、算法等在幾天或幾小時內(nèi)完成透硝。 亞馬遜高級搜索 |標題: 教學狰闪, 自己, 小時濒生, 因為: 20 發(fā)現(xiàn)了512本這樣的書前十名中埋泵,有九本是編程書籍(另一本是關于簿記的)。類似的結(jié)果來自將"自學"替換為"學習"或"小時"與"天"甜攀。
結(jié)論是秋泄,要么人大都急于學習 關于編程琐馆,或編程是不知何故非常容易 學習比什么都重要。 費雷森 等恒序。 在他們的書里點頭 如何設計程序瘦麸, 當他們說 "糟糕的編程很容易。 白癡 可以學習它 21 天, 即使他們是 傻瓜."阿布特魯斯鵝漫畫也有 他們采取.
讓我們分析一下標題是什么樣的 在 24 小時內(nèi)C++一些孩子 可能意味著:
自學: 在24小時內(nèi)滋饲,你將沒有時間寫幾個 重要的計劃,并學習你的成功和失敗 他們喊巍。 您沒有時間與經(jīng)驗豐富的程序員合作屠缭, 了解生活在一個C++。 簡而言之崭参,您 不會有時間學太多呵曹。 所以這本書只能談一個 膚淺的熟悉,不是深刻的理解何暮。正如亞歷山大·波普說的 一點學習是件危險的事情奄喂。
C++: 在24小時內(nèi),你也許能夠?qū)W習一些語法 C++(如果你已經(jīng)知道另一種語言)海洼,但你不能 學習如何使用語言跨新。 總之,如果你是坏逢,說域帐,一個 基本程序員,你可以學會寫程序的風格 基本C++語法是整,但無法了解C++是什么 其實好 (和壞) 肖揣。 那有什么意義呢? 艾倫 佩利斯 曾經(jīng)說過:"一種語言浮入,不會影響你的方式 考慮編程许饿,不值得知道"。 一個可能的點是 你必須學習一點點C++ (或更可能的東西 像 JavaScript 或處理)舵盈,因為您需要與 用于完成特定任務的現(xiàn)有工具。但你不是 學習如何編程;你正在學習完成那個任務
24 小時內(nèi): 不幸的是球化,這還不夠秽晚,作為下一個 節(jié)顯示。
十年內(nèi)自學編程
研究人員(綻放 (1985), 布萊恩和哈特 (1899), 海斯 (1989), 西蒙與大通 (1973)) 已顯示它 需要大約十年的時間筒愚,以發(fā)展專業(yè)知識赴蝇,在任何各種 領域,包括國際象棋巢掺、音樂創(chuàng)作句伶、電報 操作劲蜻,繪畫,鋼琴演奏考余,游泳先嬉,網(wǎng)球和研究 神經(jīng)心理學和拓撲學。 關鍵是 協(xié)商 實踐: 不只是一遍又一遍楚堤, 但挑戰(zhàn)自己 任務超出了你目前的能力疫蔓,嘗試一下, 分析您的性能身冬,同時和之后這樣做衅胀,并糾正 任何錯誤。 然后重復酥筝。 再重復一遍 似乎沒有 真正的捷徑:甚至莫扎特滚躯,誰是音樂神童在4歲,采取了 13年前嘿歌,他開始制作世界級的音樂掸掏。 在 另一種流派,披頭士樂隊似乎爆裂到現(xiàn)場與 一串#1和1964年埃德·沙利文秀的出場搅幅。 但他們一直在利物浦和漢堡打小俱樂部阅束, 因為 1957年,雖然他們有大規(guī)模呼吁早期茄唐,他們的第一個偉大的 關鍵的成功息裸, 辣椒中士,于1967年發(fā)行沪编。
馬爾科姆 格拉德韋爾 他推廣了這個想法呼盆, 雖然他專注于 10,000 小時蚁廓, 而不是 10 年访圃。 亨利·卡蒂埃-布雷森(1908-2004)還有另一個指標:"你的前10,000張照片是你們最差的相嵌。(他沒有 預計使用數(shù)碼相機腿时,有些人可以在一周內(nèi)達到這個目標。 真正的專業(yè)知識可能需要一生的時間: 塞繆爾·約翰遜 (1709-1784) 說:"在任何部門饭宾,卓越都可以 只通過一生的勞動獲得;它不得在 較低的價格批糟。 喬瑟 (1340 - 1400) 抱怨 "萊夫這么短, 工藝 這么久的勒恩看铆。希波克拉底 (c. 400BC) 是眾所周知的摘錄 "阿爾斯朗加徽鼎, 維塔布雷維斯",這是較長的報價"阿爾斯龍加,維塔的一部分 布雷維斯否淤, 偶爾練習悄但, 實驗周利庫蘇姆, iudicium 困難"石抡,在英語中呈現(xiàn)為"生命是短暫的檐嚣,[the]工藝 長, 機會轉(zhuǎn)瞬即逝汁雷, 實驗背信棄義净嘀, 判斷 困難。 當然侠讯,沒有一個數(shù)字可以是最終的答案:它似乎不合理 假定所有技能(例如編程挖藏、下棋、跳棋和音樂演奏) 可以都需要完全相同的時間來掌握厢漩,也不是所有的人 需要完全相同的時間膜眠。作為 教授。 K溜嗜。安德斯·愛立信 說宵膨,"在大多數(shù)領域,這是顯著多少時間炸宵,甚至最 人才需要達到最高水平辟躏。10,000 小時的數(shù)字只是讓您感覺到土全,我們談論的是每周 10 到 20 小時捎琐,有些人會認為這些人是天生的天才人才,仍然需要達到最高水平裹匙。
所以你想成為一名程序員
以下是我的編程成功秘訣:
獲取 興趣 在編程瑞凑,并做一些,因為它是有趣的概页。 確保 它一直足夠有趣籽御,這樣你才愿意投入你的十年/10,000小時惰匙。
程序. 最好的學習方式是 學習 通過做. 簡單地說技掏,技術上,"最高水平 未達到給定域中個人的性能 自動作為擴展體驗的函數(shù)项鬼,但級別 即使經(jīng)驗豐富的個人可以提高績效零截, 經(jīng)過深思熟慮的改進。 (第366位) 和"最有效的學習需要一個明確定義的任務與 適合特定個體的難度級別秃臣, 信息性反饋,以及重復和更正的機會 錯誤。(第20-21號) 這本書 實踐中的認知:日常思維奥此、數(shù)學和文化 生活 是一個有趣的 參考這個觀點弧哎。
與交談 其他程序員;閱讀其他程序。 這更重要 比任何書籍或培訓課程稚虎。
如果你想撤嫩,把在四年 大學 (或更多在 研究生院)。 這將讓您訪問一些需要 憑據(jù)蠢终,它會讓您更深入地了解該領域序攘, 但如果你不喜歡學校, 你可以 (與一些奉獻) 得到 類似的經(jīng)驗寻拂,你自己或工作程奠。無論如何,單靠書本學習不會 就足夠了祭钉。"計算機科學教育不能使任何人成為專家 程序員比研究刷子和顏料可以使 某人是專家畫家瞄沙,"埃里克·雷蒙德說,作者 新 黑客詞典.我雇傭過的最好的程序員之一 只有高中學位;他產(chǎn)生了很多 偉大 軟件慌核, 有他自己的 新聞組距境,并做了足夠的股票期權(quán)購買自己的 夜總會.
工作在 項目與 其他程序員。成為最好的程序員 在某些項目上;是其他人最差的垮卓。 當你是最好的 你可以測試你的能力垫桂,領導一個項目,并激勵 別人有你的愿景粟按。 當你是最差的诬滩,你學到什么 大師做,你學習他們不喜歡什么做(因為他們 讓你為他們做)钾怔。
工作在 項目 后 其他程序員碱呼。 了解其他人編寫的程序∽谡欤看看需要什么 了解和修復它時愚臀, 原始程序員不 周圍》考慮如何設計程序姑裂,使其更易于使用 那些會支持你的人
至少學習半打 編程語言. 包括一個 強調(diào)類抽象的語言(如Java或C++),一個 強調(diào)功能抽象(如 Lisp 或 ML 或 Haskell)男旗,一 支持句法抽象 (如 Lisp)舶斧, 一 支持聲明性規(guī)范(如 Prolog 或 C++ 模板),以及 一個強調(diào)平行性 (如克洛朱爾或去) 察皇。
請記住茴厉,有一個"計算機在"計算機科學"中泽台。知道 計算機執(zhí)行指令需要多長時間,獲取 從內(nèi)存中的字(有和沒有緩存錯過)矾缓,從磁盤讀取連續(xù)單詞查坪,并查找到磁盤上的新位置蚌成。(答案在這里。)
參與語言 標準化 努力。 可能是安西C++委員會稿壁, 或者它 可以決定您的本地編碼風格是否會有 2 或 4 個空間 縮進級別赘阀。 無論哪種方式划乖,你了解什么其他人 喜歡在語言割笙,他們感覺多么深,甚至一點點 關于他們?yōu)槭裁磿@樣翠肘。
有好感 下車 語言標準化工作作為 盡快檐束。
這一切在心中, 它值得懷疑的锯茄, 你能得到多遠厢塘, 只是 書籍學習。 在我的第一個孩子出生之前肌幽,我讀了所有的 如何 自 書晚碾,仍然覺得自己像一個無知的新手。 30個月后 當我的第二個孩子到期喂急,我回到書 復習格嘁?不。 相反廊移,我依靠我的個人經(jīng)驗糕簿,這 原來更有用,更讓人放心 對我來說比寫數(shù)千頁 由專家狡孔。
弗雷德·布魯克斯懂诗,在他的文章中 無銀彈 確定了一個三部分的計劃,找到偉大的 軟件設計師:
盡早系統(tǒng)地確定頂級設計師苗膝。
指派一位職業(yè)導師負責潛在客戶的發(fā)展殃恒,并仔細保存職業(yè)檔案。
為成長的設計師提供互動和刺激的機會辱揭。
這假定有些人已經(jīng)具備了 成為一個偉大的設計師;工作是正確地哄他們一起离唐。 艾倫 佩利斯 說得更簡潔:"每個人都可以被教導雕刻: 米開朗基羅必須被教導如何不。因此问窃,它是與 偉大的程序員"亥鬓。 佩利斯說,偉人有一些 超越他們訓練的內(nèi)部質(zhì)量域庇。 但是嵌戈,在哪里 質(zhì)量來自覆积? 是天生的嗎? 或者他們通過 勤奮咕别? 作為奧古斯特古斯托 (虛構(gòu)的廚師在 拉塔圖耶)說技健,"任何人都可以做飯,但只有無所畏懼 可以是偉大的惰拱。 我認為它更多的是愿意奉獻一個大 一個人一生審議實踐的一部分。 但也許 無畏 是一種總結(jié)的方法啊送〕ザ蹋或者,作為古斯托的批評者馋没, 安東·埃戈說:"不是每個人都能成為一個偉大的藝術家昔逗,但一個偉大的 藝術家可以從任何地方。
因此篷朵,繼續(xù)購買 Java/Ruby/Javascript/PHP 書籍;你會 可能從中得到一些利用勾怒。 但你不會改變你的生活,或者 您作為程序員在 24 小時或 21 天內(nèi)獲得真正的整體專業(yè)知識声旺。 努力在24個月內(nèi)不斷改進怎么樣笔链? 現(xiàn)在你開始找個地方了...
引用
布魯姆, 本杰明 (ed.) 培養(yǎng)青年人才腮猖,巴蘭廷鉴扫,1985年。
布魯克斯 弗雷德 無銀彈澈缺, IEEE 計算機坪创, 第 20 卷, 第 4 號姐赡, 1987 年莱预, p. 10 -19。
布萊恩项滑, W. l. – 哈特依沮, N. "關于電報語言的研究: 習慣等級的獲取。 心理學評論, 1899, 8, 345-375
海斯杖们,約翰 完整的問題解算器 勞倫斯·埃鮑姆悉抵,1989年。
蔡斯摘完, 威廉 G. 和西蒙姥饰, 赫伯特 A. "國際象棋中的感知" 認知心理學, 1973, 4, 55-81.
熔巖,約翰孝治, 實踐中的認知:日常思維列粪、數(shù)學和文化 生活审磁,劍橋大學出版社,1988年岂座。
答案
典型 PC 上各種操作的大致計時:
執(zhí)行典型指令1/1态蒂,000,000费什,000 秒 = 1 納米秒從 L1 緩存內(nèi)存獲取0.5 納米秒分支預測錯誤5 納米秒從 L2 緩存內(nèi)存獲取7 納米秒靜音鎖定/解鎖25納米秒從主內(nèi)存獲取100納米秒通過 1Gbps 網(wǎng)絡發(fā)送 2K 字節(jié)20钾恢,000 納米秒從內(nèi)存中按順序讀取 1MB250,000 納米秒從新磁盤位置獲仍е贰(查找)8瘩蚪,000,000 納米秒從磁盤按順序讀取 1MB20稿黍,000疹瘦,000 納米秒發(fā)送包我們到歐洲和回來150 毫秒 = 150,000巡球,000 納米秒
附錄:語言選擇
有幾個人問他們應該先學什么編程語言言沐。 沒有一個答案,但請考慮以下幾點:
使用你的朋友.當被問及"什么操作系統(tǒng)應該 我使用酣栈, Windows险胰, Unix, 或 Mac钉嘹? 你的朋友使用鸯乃。 從學習中獲得的優(yōu)勢 朋友將抵消操作系統(tǒng)之間的任何內(nèi)在差異,或 編程語言之間跋涣。 還要考慮你未來的朋友: 程序員社區(qū)缨睡,你將成為其中的一部分,如果你 繼續(xù)陈辱。 您選擇的語言是否擁有龐大的增長社區(qū) 還是一個小垂死的奖年? 是否有書籍、網(wǎng)站和在線論壇 得到答案沛贪? 你喜歡那些論壇里的人嗎陋守?
保持簡單. 編程語言,如C++ 和 Java 是專為專業(yè)開發(fā)由大型團隊 經(jīng)驗豐富的程序員誰關心運行時效率 他們的代碼利赋。 因此水评,這些語言具有專為這些情況設計的復雜部分。 你關心的是學習編程媚送。 你不需要這種并發(fā)癥中燥。 你想要一種被設計成易于學習和記憶的語言。 單個新程序員塘偎。
玩疗涉。 哪種方式拿霉,你寧愿學習彈鋼琴: 正常,互動的方式咱扣,你聽到每個音符绽淘,只要你點擊一個鍵, 或 "批" 模式闹伪, 你只聽到筆記后沪铭, 你完成了一整首歌? 顯然偏瓤,交互式模式使鋼琴的學習更容易伦意,也為 編程。堅持使用交互式模式的語言并使用它硼补。
鑒于這些標準,我關于第一次編程的建議 語言將是 Python 或 方案. 另一個選擇是Javascript熏矿,不是因為它為初學者設計得很好已骇, 但因為有這么多的在線教程,如 汗學院的教程. 但您的 情況可能會有所不同票编,還有其他不錯的選擇褪储。如果您的 年齡是一位數(shù),你可能更喜歡 愛 麗 絲 或 吱吱 聲 或 塊 (年齡較大的學習者也可能喜歡這些)慧域。重要 事情是鲤竹, 你選擇和開始。
附錄:書籍和其他資源
有幾個人問他們應該學什么書和網(wǎng)頁 從昔榴。 我再說一遍辛藻, "單靠書學習是不夠的", 但我可以 建議以下事項:
方案: 結(jié)構(gòu)和 計算機程序的解釋(阿貝爾森和蘇斯曼) 是 可能是計算機科學的最佳介紹互订, 它確實 教編程作為理解計算機科學的一種方式吱肌。 你可以看到 講座的在線視頻 在這本書,以及 在線完整文本.這本書是 挑戰(zhàn)仰禽,將雜草出一些人氮墨,也許可以 成功用另一種方法。
方案: 如何 設計方案(費里森) 等吐葵。) 是最好的書之一 如何以優(yōu)雅和實用的方式實際設計程序规揪。
Python: Python 編程: CS 簡介(Zelle) 是使用 Python 的很好介紹。
Python: 幾個 在線 教程 可在 Python.org.
盎司: 概念 計算機編程的技術和模型(范羅伊和哈里迪) 被一些人視為亞伯森和蘇斯曼的現(xiàn)代接班人温峭。 這是一個旅游通過編程的大想法猛铅,涵蓋更廣泛的 范圍比亞伯森和蘇斯曼,而也許更容易閱讀和 遵循诚镰。 它使用的語言奕坟,奧茲祥款,這是不廣為人知,但作為 學習其他語言的基礎月杉。 <
筆記
T. 卡佩指出刃跛, 完成 問題解算器 亞馬遜上的頁面現(xiàn)在有 "自學" 孟加拉語在 21 天" 和 "教自己語法和風格" 的書下 "為此商品購物的客戶也為這些物品購物" 部分。 我猜苛萎, 很大一部分人誰看 書來自這個頁面桨昙。 感謝羅斯·科恩對希波克拉底的幫助? ? ? ?