為什么大家都這么著急?
走進(jìn)任何一家書店想诅,您將了解如何在 24 小時(shí)內(nèi)自學(xué) Java召庞,同時(shí)在幾天或幾小時(shí)內(nèi)提供無休止的變體來教授 C、SQL来破、Ruby篮灼、算法等。亞馬遜高級搜索 [標(biāo)題: 教徘禁, 你自己诅诱, 小時(shí), 自: 2000 年以來送朱, 并發(fā)現(xiàn)了 512 這樣的書娘荡。前十名中干旁,有九本是編程書籍(另一本是關(guān)于簿記的)。類似的結(jié)果來自將"自學(xué)"替換為"學(xué)習(xí)"或"小時(shí)"與"天"炮沐。
結(jié)論是争群,要么人們急于學(xué)習(xí)編程,要么編程比什么都容易學(xué)大年。Felleisen等人在《如何設(shè)計(jì)程序》一書中對這種趨勢點(diǎn)頭换薄,當(dāng)時(shí)他們說"糟糕的編程很容易。白癡可以在21天內(nèi)學(xué)會翔试,即使他們是假人轻要。阿布特魯斯鵝漫畫也有他們采取。
讓我們分析一下 24 小時(shí)內(nèi)"C++"標(biāo)題可能意味著什么:
教導(dǎo)自己:在24小時(shí)內(nèi)垦缅,你將沒有時(shí)間寫幾個(gè)重要的程序冲泥,并學(xué)習(xí)你的成功和失敗與他們。您沒有時(shí)間與經(jīng)驗(yàn)豐富的程序員合作失都,并了解生活在一個(gè)良好的環(huán)境中C++柏蘑。總之粹庞,你將沒有時(shí)間學(xué)習(xí)太多咳焚。所以這本書只能說是膚淺的熟悉,不能是深刻的理解庞溜。正如亞歷山大·波普說的革半,一點(diǎn)學(xué)習(xí)是危險(xiǎn)的事情。
C++:在24小時(shí)內(nèi)流码,你也許能夠?qū)W習(xí)C++的一些語法(如果你已經(jīng)知道另一種語言)又官,但你不能學(xué)到很多如何使用的語言。簡言之漫试,如果你是一個(gè)基本程序員六敬,你可以學(xué)會用C++語法編寫基本風(fēng)格的程序,但是你不能學(xué)習(xí)C++實(shí)際上是好(和壞)什么驾荣。那有什么意義呢外构?艾倫·佩利斯曾經(jīng)說過:"一種不影響你編程方式的語言,不值得了解播掷。一個(gè)可能的觀點(diǎn)是审编,你必須學(xué)習(xí)一點(diǎn)點(diǎn)C++(或者更可能,像JavaScript或處理)歧匈,因?yàn)槟阈枰c現(xiàn)有的工具接口來完成一個(gè)特定的任務(wù)垒酬。但是,你并沒有學(xué)習(xí)如何編程;你正在學(xué)習(xí)完成那個(gè)任務(wù)
在24小時(shí):不幸的是,這是不夠的勘究,如下一節(jié)顯示矮湘。
十年內(nèi)自學(xué)編程
研究人員(Bloom(1985年)、布萊恩和哈特(1899年)乱顾、海耶斯(1989年)板祝、西蒙和蔡斯(1973年))表明,在象棋走净、音樂創(chuàng)作券时、電報(bào)操作、繪畫伏伯、鋼琴演奏橘洞、游泳、網(wǎng)球以及神經(jīng)心理學(xué)和拓?fù)鋵W(xué)研究等許多領(lǐng)域说搅,大約需要10年時(shí)間炸枣。關(guān)鍵是審議實(shí)踐:不只是一次又一次地做,而是用一個(gè)超出你當(dāng)前能力的任務(wù)來挑戰(zhàn)自己弄唧,嘗試一下适肠,在做之后分析你的表現(xiàn),并糾正任何錯(cuò)誤候引。然后重復(fù)侯养。再重復(fù)一遍似乎沒有真正的捷徑:即使是4歲時(shí)音樂神童的莫扎特,也花了13年時(shí)間才開始創(chuàng)作世界級的音樂澄干。在另一種類型中逛揩,披頭士樂隊(duì)似乎以一連串的#1和1964年埃德·沙利文的時(shí)裝秀而登上舞臺。但是他們自1957年以來一直在利物浦和漢堡打小俱樂部麸俘,雖然他們很早就有大眾的吸引力辩稽,但他們的第一次重大成功,佩珀斯中士从媚,在1967年被釋放逞泄。
馬爾科姆·格拉德威爾已經(jīng)推廣了這個(gè)想法,盡管他專注于10拜效,000小時(shí)炭懊,而不是10年。亨利·卡蒂埃-布雷森(1908-2004)還有另一個(gè)指標(biāo):"你的前10拂檩,000張照片是你們最差的。(他沒想到嘲碧,使用數(shù)碼相機(jī)稻励,有些人可以在一周內(nèi)達(dá)到這個(gè)目標(biāo)。真正的專業(yè)知識可能需要一生的時(shí)間:塞繆爾·約翰遜(Samuel Johnson,1709-1784)說:"任何部門都只有一生的勞動(dòng)才能取得卓越成就;它不應(yīng)該以較低的價(jià)格購買望抽。喬瑟 (1340- 1400) 抱怨道: "萊夫這么短加矛, 工藝這么久才到勒恩。Hippocrates (c. 400BC) 以摘錄 "ars longa煤篙, vita brevis" 而廣為人知斟览, 這是較長語錄 "阿爾斯 · 朗加, 維塔 · 布雷維斯辑奈, 偶爾練習(xí)苛茂, 實(shí)驗(yàn)腹膜, 膽汁困難" 的一部分鸠窗, 在英語中渲染為 "生命是短暫的妓羊, [the] 工藝長, 機(jī)會轉(zhuǎn)瞬即逝稍计, 實(shí)驗(yàn)背信棄義躁绸, 判斷困難" 。當(dāng)然臣嚣,沒有一個(gè)數(shù)字可以是最終的答案:似乎不合理地假設(shè)所有技能(如編程净刮、棋牌、跳棋和音樂演奏)都需要完全相同的時(shí)間來掌握硅则,也不認(rèn)為所有人都需要完全相同的時(shí)間淹父。正如安德斯·愛立信教授所說,"在大多數(shù)領(lǐng)域抢埋,即使是最有才華的個(gè)人也需要多少時(shí)間才能達(dá)到最高水平弹灭,這一點(diǎn)令人矚目。10揪垄,000 小時(shí)的數(shù)字只是讓您感覺到穷吮,我們談?wù)摰氖敲恐?10 到 20 小時(shí),有些人會認(rèn)為這些人是天生的天才人才饥努,仍然需要達(dá)到最高水平捡鱼。
所以你想成為一名程序員
以下是我的編程成功秘訣:
對編程感興趣,并做一些酷愧,因?yàn)樗苡腥ぜ菡4_保它一直足夠有趣,這樣你才愿意投入你的十年/10溶浴,000小時(shí)乍迄。
程序。最好的學(xué)習(xí)就是通過做學(xué)習(xí)士败。更簡單地說闯两,從技術(shù)上講褥伴,"給定領(lǐng)域中個(gè)人的最高績效水平不是作為擴(kuò)展經(jīng)驗(yàn)的函數(shù)自動(dòng)實(shí)現(xiàn)的,但即使有經(jīng)驗(yàn)的個(gè)人經(jīng)過深思熟慮的改進(jìn)漾狼,其績效水平也可以提高重慢。(第366)和"最有效的學(xué)習(xí)需要一個(gè)明確界定的任務(wù),對于特定的個(gè)人逊躁,信息豐富的反饋似踱,以及重復(fù)和糾正錯(cuò)誤的機(jī)會,有適當(dāng)?shù)碾y度級別稽煤。平行性 (如克洛朱爾或去) 核芽。
請記住,"計(jì)算機(jī)科學(xué)"中存在"計(jì)算機(jī)"念脯。了解計(jì)算機(jī)執(zhí)行指令狞洋、從內(nèi)存中獲取單詞(有和沒有緩存錯(cuò)過)、從磁盤讀取連續(xù)單詞以及查找磁盤上的新位置需要多長時(shí)間绿店。(答案在這里吉懊。
參與語言標(biāo)準(zhǔn)化工作。它可能是 ANSI C++假勿,也可以決定您的本地編碼風(fēng)格是否具有 2 或 4 個(gè)空間縮進(jìn)級別借嗽。無論哪種方式,你都了解別人喜歡的語言转培,他們感覺有多深恶导,甚至一點(diǎn)點(diǎn)關(guān)于他們?yōu)槭裁催@樣的感覺。
有好感浸须,盡快擺脫語言標(biāo)準(zhǔn)化工作惨寿。
想到這一切, 你只要通過書本學(xué)習(xí)能多遠(yuǎn)删窒, 就值得懷疑了裂垦。在我的第一個(gè)孩子出生之前,我讀了所有的《如何》一書肌索,仍然覺得自己是一個(gè)無知的新手蕉拢。30 個(gè)月后, 當(dāng)我的第二個(gè)孩子到期時(shí)诚亚, 我回到書本上復(fù)習(xí)一下嗎晕换?大聲 笑相反,我依靠我個(gè)人的經(jīng)驗(yàn)站宗,事實(shí)證明闸准,這比我有用和放心得多,比專家寫的數(shù)千頁梢灭。
弗雷德·布魯克斯在他的論文《沒有銀彈》中確定了尋找偉大軟件設(shè)計(jì)師的三部分計(jì)劃:
盡早系統(tǒng)地確定頂級設(shè)計(jì)師夷家。
指派一位職業(yè)導(dǎo)師負(fù)責(zé)潛在客戶的發(fā)展腕唧,并仔細(xì)保存職業(yè)檔案。
為成長的設(shè)計(jì)師提供互動(dòng)和刺激的機(jī)會瘾英。
這假定有些人已經(jīng)具備成為偉大設(shè)計(jì)師所需的素質(zhì);工作是正確地哄他們一起。艾倫·佩利斯說得更簡潔:"每個(gè)人都可以被教導(dǎo)去雕刻:米開朗基羅必須被教導(dǎo)如何不雕刻颂暇。因此缺谴,這是與偉大的程序員"。歐洲和回 150 毫秒 = 150耳鸯,000湿蛔,000 納米秒
附錄:語言選擇
有幾個(gè)人問他們應(yīng)該先學(xué)什么編程語言。沒有一個(gè)答案县爬,但請考慮以下幾點(diǎn):
用你的朋友阳啥。當(dāng)被問及"我應(yīng)該使用什么操作系統(tǒng),Windows财喳,Unix察迟,還是Mac?從朋友那里學(xué)習(xí)的好處將抵消操作系統(tǒng)之間或編程語言之間的任何內(nèi)在差異耳高。還要考慮你未來的朋友:如果你繼續(xù)扎瓶,你將成為其中一員的程序員社區(qū)。您選擇的語言是有一個(gè)龐大的成長社區(qū)還是一個(gè)垂死的小社區(qū)泌枪?是否有書籍概荷、網(wǎng)站和在線論壇可以獲得答案?你喜歡那些論壇里的人嗎碌燕?
保持簡單误证。編程語言(C++ 和 Java)是由經(jīng)驗(yàn)豐富的程序員團(tuán)隊(duì)為專業(yè)開發(fā)而設(shè)計(jì)的,他們關(guān)注代碼的運(yùn)行時(shí)效率修壕。因此愈捅,這些語言具有專為這些情況設(shè)計(jì)的復(fù)雜部分。你關(guān)心的是學(xué)習(xí)編程叠殷。你不需要這種并發(fā)癥改鲫。您想要一種由單個(gè)新程序員設(shè)計(jì)得易于學(xué)習(xí)和記憶的語言。
玩林束。你寧愿學(xué)習(xí)哪種方式彈鋼琴:正常的互動(dòng)方式像棘,你一點(diǎn)擊一個(gè)鍵,或"批"模式壶冒,你只聽到音符后缕题,你完成了一整首歌?顯然胖腾,交互式模式使鋼琴和編程的學(xué)習(xí)更加容易烟零。堅(jiān)持使用交互式模式的語言并使用它瘪松。
鑒于這些標(biāo)準(zhǔn),我對第一種編程語言的建議將是Python或S方案锨阿。另一個(gè)選擇是Javascript宵睦,不是因?yàn)樗菫槌鯇W(xué)者設(shè)計(jì)得完美的,而是因?yàn)橛羞@么多的在線教程墅诡,如Khan學(xué)院的教程壳嚎。但是,你的情況可能會有所不同末早,還有其他不錯(cuò)的選擇烟馅。如果你的年齡是一位數(shù),你可能更喜歡愛麗絲或吱吱聲或塊(年齡較大的學(xué)習(xí)者也可能喜歡這些)然磷。重要的是你選擇并開始郑趁。
附錄:書籍和其他資源
有幾個(gè)人問他們應(yīng)該從哪些書籍和網(wǎng)頁中學(xué)習(xí)。我再說一遍姿搜, "單靠書學(xué)習(xí)是不夠的"寡润, 但我可以推薦以下內(nèi)容:
方案:計(jì)算機(jī)程序的結(jié)構(gòu)和解釋(Abelson & Sussman)可能是計(jì)算機(jī)科學(xué)的最佳介紹,它教編程作為理解計(jì)算機(jī)科學(xué)的一種方式痪欲。您可以在線查看有關(guān)本書的講座視頻悦穿,以及完整的文本。這本書很有挑戰(zhàn)性业踢,將一些人從另一種方法中去掉栗柒。
方案:如何設(shè)計(jì)程序(Felleisen等人)是有關(guān)如何以優(yōu)雅和實(shí)用的方式實(shí)際設(shè)計(jì)程序的最佳書籍之一。
Python: Python 編程: 使用 Python 的 Cs 簡介 (Zelle) 是一個(gè)很好的介紹知举。
Python:在一些在線教程Python.org瞬沦。
奧茲: 計(jì)算機(jī)編程的概念、技術(shù)和模型 (范羅伊和哈里迪) 被一些人視為阿貝爾森和蘇斯曼的現(xiàn)代接班人雇锡。這是一個(gè)通過編程的大想法之旅逛钻, 涵蓋比亞伯森和蘇斯曼更廣泛的范圍, 而也許更容易閱讀和遵循锰提。它使用一種語言曙痘,Oz,這是不廣為人知立肘,但作為學(xué)習(xí)其他語言的基礎(chǔ)边坤。<
筆記
T. Capey指出,亞馬遜上的"完全問題解決者"頁面現(xiàn)在有"在21天內(nèi)自學(xué)孟加拉語"和"自學(xué)語法和風(fēng)格"的書籍下"為這個(gè)項(xiàng)目購物的顧客也為這些物品購物"部分谅年。我猜看那本書的人很多來自這個(gè)頁面茧痒。感謝羅斯·科恩對希波克拉底的幫助