彼得·諾維格
為什么大家都這么著急唯绍?
走進(jìn)任何一家書店佣盒,你就會(huì)看到如何 自學(xué)爪哇 24 小時(shí)內(nèi) 除了無休止的變化提供教 C肺樟, SQL檐春、Ruby、算法等在幾天或幾小時(shí)內(nèi)完成么伯。 亞馬遜高級(jí)搜索 |標(biāo)題: 教學(xué)疟暖, 自己, 小時(shí)田柔, 因?yàn)椋?20 發(fā)現(xiàn)了512本這樣的書前十名中俐巴,有九本是編程書籍(另一本是關(guān)于簿記的)。類似的結(jié)果來自將"自學(xué)"替換為"學(xué)習(xí)"或"小時(shí)"與"天"硬爆。
結(jié)論是窜骄,要么人大都急于學(xué)習(xí) 關(guān)于編程,或編程是不知何故非常容易 學(xué)習(xí)比什么都重要摆屯。 費(fèi)雷森 等邻遏。 在他們的書里點(diǎn)頭 如何設(shè)計(jì)程序, 當(dāng)他們說 "糟糕的編程很容易虐骑。 白癡 可以學(xué)習(xí)它 21 天, 即使他們是 傻瓜."阿布特魯斯鵝漫畫也有 他們采取.
讓我們分析一下標(biāo)題是什么樣的 在 24 小時(shí)內(nèi)C++一些孩子 可能意味著:
自學(xué): 在24小時(shí)內(nèi)准验,你將沒有時(shí)間寫幾個(gè) 重要的計(jì)劃,并學(xué)習(xí)你的成功和失敗 他們廷没。 您沒有時(shí)間與經(jīng)驗(yàn)豐富的程序員合作糊饱, 了解生活在一個(gè)C++。 簡而言之颠黎,您 不會(huì)有時(shí)間學(xué)太多另锋。 所以這本書只能談一個(gè) 膚淺的熟悉,不是深刻的理解狭归。正如亞歷山大·波普說的 一點(diǎn)學(xué)習(xí)是件危險(xiǎn)的事情夭坪。
C++: 在24小時(shí)內(nèi),你也許能夠?qū)W習(xí)一些語法 C++(如果你已經(jīng)知道另一種語言)过椎,但你不能 學(xué)習(xí)如何使用語言室梅。 總之,如果你是,說亡鼠,一個(gè) 基本程序員赏殃,你可以學(xué)會(huì)寫程序的風(fēng)格 基本C++語法,但無法了解C++是什么 其實(shí)好 (和壞) 间涵。 那有什么意義呢仁热? 艾倫 佩利斯 曾經(jīng)說過:"一種語言,不會(huì)影響你的方式 考慮編程勾哩,不值得知道"股耽。 一個(gè)可能的點(diǎn)是 你必須學(xué)習(xí)一點(diǎn)點(diǎn)C++ (或更可能的東西 像 JavaScript 或處理),因?yàn)槟枰c 用于完成特定任務(wù)的現(xiàn)有工具钳幅。但你不是 學(xué)習(xí)如何編程;你正在學(xué)習(xí)完成那個(gè)任務(wù)
24 小時(shí)內(nèi): 不幸的是物蝙,這還不夠,作為下一個(gè) 節(jié)顯示敢艰。
十年內(nèi)自學(xué)編程
研究人員(綻放 (1985), 布萊恩和哈特 (1899), 海斯 (1989), 西蒙與大通 (1973)) 已顯示它 需要大約十年的時(shí)間诬乞,以發(fā)展專業(yè)知識(shí),在任何各種 領(lǐng)域钠导,包括國際象棋震嫉、音樂創(chuàng)作、電報(bào) 操作牡属,繪畫票堵,鋼琴演奏,游泳逮栅,網(wǎng)球和研究 神經(jīng)心理學(xué)和拓?fù)鋵W(xué)悴势。 關(guān)鍵是 協(xié)商 實(shí)踐: 不只是一遍又一遍, 但挑戰(zhàn)自己 任務(wù)超出了你目前的能力措伐,嘗試一下特纤, 分析您的性能,同時(shí)和之后這樣做侥加,并糾正 任何錯(cuò)誤捧存。 然后重復(fù)。 再重復(fù)一遍 似乎沒有 真正的捷徑:甚至莫扎特担败,誰是音樂神童在4歲昔穴,采取了 13年前,他開始制作世界級(jí)的音樂提前。 在 另一種流派吗货,披頭士樂隊(duì)似乎爆裂到現(xiàn)場與 一串#1和1964年埃德·沙利文秀的出場。 但他們一直在利物浦和漢堡打小俱樂部岖研, 因?yàn)?1957年卿操,雖然他們有大規(guī)模呼吁早期警检,他們的第一個(gè)偉大的 關(guān)鍵的成功孙援, 辣椒中士害淤,于1967年發(fā)行。
馬爾科姆 格拉德韋爾 他推廣了這個(gè)想法拓售, 雖然他專注于 10窥摄,000 小時(shí), 而不是 10 年础淤。 亨利·卡蒂埃-布雷森(1908-2004)還有另一個(gè)指標(biāo):"你的前10崭放,000張照片是你們最差的。(他沒有 預(yù)計(jì)使用數(shù)碼相機(jī)鸽凶,有些人可以在一周內(nèi)達(dá)到這個(gè)目標(biāo)币砂。 真正的專業(yè)知識(shí)可能需要一生的時(shí)間: 塞繆爾·約翰遜 (1709-1784) 說:"在任何部門,卓越都可以 只通過一生的勞動(dòng)獲得;它不得在 較低的價(jià)格玻侥。 喬瑟 (1340 - 1400) 抱怨 "萊夫這么短决摧, 工藝 這么久的勒恩。希波克拉底 (c. 400BC) 是眾所周知的摘錄 "阿爾斯朗加凑兰, 維塔布雷維斯"掌桩,這是較長的報(bào)價(jià)"阿爾斯龍加,維塔的一部分 布雷維斯姑食, 偶爾練習(xí)波岛, 實(shí)驗(yàn)周利庫蘇姆, iudicium 困難"音半,在英語中呈現(xiàn)為"生命是短暫的则拷,[the]工藝 長, 機(jī)會(huì)轉(zhuǎn)瞬即逝曹鸠, 實(shí)驗(yàn)背信棄義隔躲, 判斷 困難。 當(dāng)然物延,沒有一個(gè)數(shù)字可以是最終的答案:它似乎不合理 假定所有技能(例如編程宣旱、下棋、跳棋和音樂演奏) 可以都需要完全相同的時(shí)間來掌握叛薯,也不是所有的人 需要完全相同的時(shí)間浑吟。作為 教授。 K耗溜。安德斯·愛立信 說组力,"在大多數(shù)領(lǐng)域,這是顯著多少時(shí)間抖拴,甚至最 人才需要達(dá)到最高水平燎字。10腥椒,000 小時(shí)的數(shù)字只是讓您感覺到,我們談?wù)摰氖敲恐?10 到 20 小時(shí)候衍,有些人會(huì)認(rèn)為這些人是天生的天才人才笼蛛,仍然需要達(dá)到最高水平。
所以你想成為一名程序員
以下是我的編程成功秘訣:
獲取 興趣 在編程蛉鹿,并做一些滨砍,因?yàn)樗怯腥さ摹?確保 它一直足夠有趣,這樣你才愿意投入你的十年/10妖异,000小時(shí)惋戏。
程序. 最好的學(xué)習(xí)方式是 學(xué)習(xí) 通過做. 簡單地說,技術(shù)上他膳,"最高水平 未達(dá)到給定域中個(gè)人的性能 自動(dòng)作為擴(kuò)展體驗(yàn)的函數(shù)响逢,但級(jí)別 即使經(jīng)驗(yàn)豐富的個(gè)人可以提高績效, 經(jīng)過深思熟慮的改進(jìn)棕孙。 (第366位) 和"最有效的學(xué)習(xí)需要一個(gè)明確定義的任務(wù)與 適合特定個(gè)體的難度級(jí)別舔亭, 信息性反饋,以及重復(fù)和更正的機(jī)會(huì) 錯(cuò)誤散罕。(第20-21號(hào)) 這本書 實(shí)踐中的認(rèn)知:日常思維分歇、數(shù)學(xué)和文化 生活 是一個(gè)有趣的 參考這個(gè)觀點(diǎn)。
與交談 其他程序員;閱讀其他程序欧漱。 這更重要 比任何書籍或培訓(xùn)課程职抡。
如果你想,把在四年 大學(xué) (或更多在 研究生院)误甚。 這將讓您訪問一些需要 憑據(jù)缚甩,它會(huì)讓您更深入地了解該領(lǐng)域, 但如果你不喜歡學(xué)校窑邦, 你可以 (與一些奉獻(xiàn)) 得到 類似的經(jīng)驗(yàn)擅威,你自己或工作。無論如何冈钦,單靠書本學(xué)習(xí)不會(huì) 就足夠了郊丛。"計(jì)算機(jī)科學(xué)教育不能使任何人成為專家 程序員比研究刷子和顏料可以使 某人是專家畫家,"埃里克·雷蒙德說瞧筛,作者 新 黑客詞典.我雇傭過的最好的程序員之一 只有高中學(xué)位;他產(chǎn)生了很多 偉大 軟件厉熟, 有他自己的 新聞組,并做了足夠的股票期權(quán)購買自己的 夜總會(huì).
工作在 項(xiàng)目與 其他程序員较幌。成為最好的程序員 在某些項(xiàng)目上;是其他人最差的揍瑟。 當(dāng)你是最好的 你可以測試你的能力,領(lǐng)導(dǎo)一個(gè)項(xiàng)目乍炉,并激勵(lì) 別人有你的愿景绢片。 當(dāng)你是最差的滤馍,你學(xué)到什么 大師做,你學(xué)習(xí)他們不喜歡什么做(因?yàn)樗麄?讓你為他們做)底循。
工作在 項(xiàng)目 后 其他程序員巢株。 了解其他人編寫的程序〈说看看需要什么 了解和修復(fù)它時(shí)纯续, 原始程序員不 周圍随珠∶鹪考慮如何設(shè)計(jì)程序,使其更易于使用 那些會(huì)支持你的人
至少學(xué)習(xí)半打 編程語言. 包括一個(gè) 強(qiáng)調(diào)類抽象的語言(如Java或C++)窗看,一個(gè) 強(qiáng)調(diào)功能抽象(如 Lisp 或 ML 或 Haskell)茸歧,一 支持句法抽象 (如 Lisp), 一 支持聲明性規(guī)范(如 Prolog 或 C++ 模板)显沈,以及 一個(gè)強(qiáng)調(diào)平行性 (如克洛朱爾或去) 软瞎。
請(qǐng)記住,有一個(gè)"計(jì)算機(jī)在"計(jì)算機(jī)科學(xué)"中拉讯。知道 計(jì)算機(jī)執(zhí)行指令需要多長時(shí)間涤浇,獲取 從內(nèi)存中的字(有和沒有緩存錯(cuò)過),從磁盤讀取連續(xù)單詞魔慷,并查找到磁盤上的新位置只锭。(答案在這里。)
參與語言 標(biāo)準(zhǔn)化 努力院尔。 可能是安西C++委員會(huì)蜻展, 或者它 可以決定您的本地編碼風(fēng)格是否會(huì)有 2 或 4 個(gè)空間 縮進(jìn)級(jí)別。 無論哪種方式邀摆,你了解什么其他人 喜歡在語言纵顾,他們感覺多么深,甚至一點(diǎn)點(diǎn) 關(guān)于他們?yōu)槭裁磿?huì)這樣栋盹。
有好感 下車 語言標(biāo)準(zhǔn)化工作作為 盡快施逾。
這一切在心中, 它值得懷疑的例获, 你能得到多遠(yuǎn)汉额, 只是 書籍學(xué)習(xí)。 在我的第一個(gè)孩子出生之前躏敢,我讀了所有的 如何 自 書闷愤,仍然覺得自己像一個(gè)無知的新手。 30個(gè)月后 當(dāng)我的第二個(gè)孩子到期件余,我回到書 復(fù)習(xí)讥脐?不遭居。 相反,我依靠我的個(gè)人經(jīng)驗(yàn)旬渠,這 原來更有用俱萍,更讓人放心 對(duì)我來說比寫數(shù)千頁 由專家。
弗雷德·布魯克斯告丢,在他的文章中 無銀彈 確定了一個(gè)三部分的計(jì)劃枪蘑,找到偉大的 軟件設(shè)計(jì)師:
盡早系統(tǒng)地確定頂級(jí)設(shè)計(jì)師。
指派一位職業(yè)導(dǎo)師負(fù)責(zé)潛在客戶的發(fā)展岖免,并仔細(xì)保存職業(yè)檔案岳颇。
為成長的設(shè)計(jì)師提供互動(dòng)和刺激的機(jī)會(huì)。
這假定有些人已經(jīng)具備了 成為一個(gè)偉大的設(shè)計(jì)師;工作是正確地哄他們一起颅湘。 艾倫 佩利斯 說得更簡潔:"每個(gè)人都可以被教導(dǎo)雕刻: 米開朗基羅必須被教導(dǎo)如何不话侧。因此,它是與 偉大的程序員"闯参。 佩利斯說瞻鹏,偉人有一些 超越他們訓(xùn)練的內(nèi)部質(zhì)量。 但是鹿寨,在哪里 質(zhì)量來自新博? 是天生的嗎? 或者他們通過 勤奮脚草? 作為奧古斯特古斯托 (虛構(gòu)的廚師在 拉塔圖耶)說赫悄,"任何人都可以做飯,但只有無所畏懼 可以是偉大的玩讳。 我認(rèn)為它更多的是愿意奉獻(xiàn)一個(gè)大 一個(gè)人一生審議實(shí)踐的一部分涩蜘。 但也許 無畏 是一種總結(jié)的方法⊙浚或者同诫,作為古斯托的批評(píng)者, 安東·埃戈說:"不是每個(gè)人都能成為一個(gè)偉大的藝術(shù)家樟澜,但一個(gè)偉大的 藝術(shù)家可以從任何地方误窖。
因此,繼續(xù)購買 Java/Ruby/Javascript/PHP 書籍;你會(huì) 可能從中得到一些利用秩贰。 但你不會(huì)改變你的生活霹俺,或者 您作為程序員在 24 小時(shí)或 21 天內(nèi)獲得真正的整體專業(yè)知識(shí)。 努力在24個(gè)月內(nèi)不斷改進(jìn)怎么樣毒费? 現(xiàn)在你開始找個(gè)地方了...
引用
布魯姆丙唧, 本杰明 (ed.) 培養(yǎng)青年人才,巴蘭廷觅玻,1985年想际。
布魯克斯 弗雷德 無銀彈培漏, IEEE 計(jì)算機(jī), 第 20 卷胡本, 第 4 號(hào)牌柄, 1987 年, p. 10 -19侧甫。
布萊恩珊佣, W. l. – 哈特, N. "關(guān)于電報(bào)語言的研究: 習(xí)慣等級(jí)的獲取披粟。 心理學(xué)評(píng)論, 1899, 8, 345-375
海斯咒锻,約翰 完整的問題解算器 勞倫斯·埃鮑姆,1989年僻爽。
蔡斯虫碉, 威廉 G. 和西蒙贾惦, 赫伯特 A. "國際象棋中的感知" 認(rèn)知心理學(xué), 1973, 4, 55-81.
熔巖胸梆,約翰, 實(shí)踐中的認(rèn)知:日常思維须板、數(shù)學(xué)和文化 生活碰镜,劍橋大學(xué)出版社,1988年习瑰。
答案
典型 PC 上各種操作的大致計(jì)時(shí):
執(zhí)行典型指令 1/1绪颖,000,000甜奄,000 秒 = 1 納米秒
從 L1 緩存內(nèi)存獲取 0.5 納米秒
分支預(yù)測錯(cuò)誤 5 納米秒
從 L2 緩存內(nèi)存獲取 7 納米秒
靜音鎖定/解鎖 25納米秒
從主內(nèi)存獲取 100納米秒
通過 1Gbps 網(wǎng)絡(luò)發(fā)送 2K 字節(jié) 20柠横,000 納米秒
從內(nèi)存中按順序讀取 1MB 250,000 納米秒
從新磁盤位置獲瓤涡帧(查找) 8牍氛,000,000 納米秒
從磁盤按順序讀取 1MB 20烟阐,000搬俊,000 納米秒
發(fā)送包我們到歐洲和回來 150 毫秒 = 150,000蜒茄,000 納米秒
附錄:語言選擇
有幾個(gè)人問他們應(yīng)該先學(xué)什么編程語言唉擂。 沒有一個(gè)答案,但請(qǐng)考慮以下幾點(diǎn):
使用你的朋友.當(dāng)被問及"什么操作系統(tǒng)應(yīng)該 我使用檀葛, Windows玩祟, Unix, 或 Mac屿聋? 你的朋友使用空扎。 從學(xué)習(xí)中獲得的優(yōu)勢 朋友將抵消操作系統(tǒng)之間的任何內(nèi)在差異庆聘,或 編程語言之間。 還要考慮你未來的朋友: 程序員社區(qū)勺卢,你將成為其中的一部分伙判,如果你 繼續(xù)。 您選擇的語言是否擁有龐大的增長社區(qū) 還是一個(gè)小垂死的黑忱? 是否有書籍宴抚、網(wǎng)站和在線論壇 得到答案? 你喜歡那些論壇里的人嗎甫煞?
保持簡單. 編程語言菇曲,如C++ 和 Java 是專為專業(yè)開發(fā)由大型團(tuán)隊(duì) 經(jīng)驗(yàn)豐富的程序員誰關(guān)心運(yùn)行時(shí)效率 他們的代碼。 因此抚吠,這些語言具有專為這些情況設(shè)計(jì)的復(fù)雜部分常潮。 你關(guān)心的是學(xué)習(xí)編程。 你不需要這種并發(fā)癥楷力。 你想要一種被設(shè)計(jì)成易于學(xué)習(xí)和記憶的語言喊式。 單個(gè)新程序員。
玩萧朝。 哪種方式岔留,你寧愿學(xué)習(xí)彈鋼琴: 正常,互動(dòng)的方式检柬,你聽到每個(gè)音符献联,只要你點(diǎn)擊一個(gè)鍵, 或 "批" 模式何址, 你只聽到筆記后里逆, 你完成了一整首歌? 顯然用爪,交互式模式使鋼琴的學(xué)習(xí)更容易原押,也為 編程。堅(jiān)持使用交互式模式的語言并使用它项钮。
鑒于這些標(biāo)準(zhǔn)班眯,我關(guān)于第一次編程的建議 語言將是 Python 或 方案. 另一個(gè)選擇是Javascript,不是因?yàn)樗鼮槌鯇W(xué)者設(shè)計(jì)得很好烁巫, 但因?yàn)橛羞@么多的在線教程署隘,如 汗學(xué)院的教程. 但您的 情況可能會(huì)有所不同,還有其他不錯(cuò)的選擇亚隙。如果您的 年齡是一位數(shù)磁餐,你可能更喜歡 愛 麗 絲 或 吱吱 聲 或 塊 (年齡較大的學(xué)習(xí)者也可能喜歡這些)。重要 事情是, 你選擇和開始诊霹。
附錄:書籍和其他資源
有幾個(gè)人問他們應(yīng)該學(xué)什么書和網(wǎng)頁 從羞延。 我再說一遍, "單靠書學(xué)習(xí)是不夠的"脾还, 但我可以 建議以下事項(xiàng):
方案: 結(jié)構(gòu)和 計(jì)算機(jī)程序的解釋(阿貝爾森和蘇斯曼) 是 可能是計(jì)算機(jī)科學(xué)的最佳介紹伴箩, 它確實(shí) 教編程作為理解計(jì)算機(jī)科學(xué)的一種方式。 你可以看到 講座的在線視頻 在這本書鄙漏,以及 在線完整文本.這本書是 挑戰(zhàn)嗤谚,將雜草出一些人,也許可以 成功用另一種方法怔蚌。
方案: 如何 設(shè)計(jì)方案(費(fèi)里森) 等巩步。) 是最好的書之一 如何以優(yōu)雅和實(shí)用的方式實(shí)際設(shè)計(jì)程序。
Python: Python 編程: CS 簡介(Zelle) 是使用 Python 的很好介紹桦踊。
Python: 幾個(gè) 在線 教程 可在 Python.org.
盎司: 概念 計(jì)算機(jī)編程的技術(shù)和模型(范羅伊和哈里迪) 被一些人視為亞伯森和蘇斯曼的現(xiàn)代接班人椅野。 這是一個(gè)旅游通過編程的大想法,涵蓋更廣泛的 范圍比亞伯森和蘇斯曼籍胯,而也許更容易閱讀和 遵循竟闪。 它使用的語言,奧茲芒炼,這是不廣為人知瘫怜,但作為 學(xué)習(xí)其他語言的基礎(chǔ)。
筆記
T. 卡佩指出本刽, 完成 問題解算器 亞馬遜上的頁面現(xiàn)在有 "自學(xué)" 孟加拉語在 21 天" 和 "教自己語法和風(fēng)格" 的書下 "為此商品購物的客戶也為這些物品購物" 部分。 我猜赠涮, 很大一部分人誰看 書來自這個(gè)頁面子寓。 感謝羅斯·科恩對(duì)希波克拉底的幫助? ? ? ? ?