一.計(jì)算機(jī)專業(yè)的自學(xué)路線圖美國計(jì)算機(jī)學(xué)會ACM發(fā)布了《計(jì)算機(jī)科學(xué)課程體系》的報(bào)告,當(dāng)前最新版是2013年的。計(jì)算機(jī)科學(xué)被劃分為18個(gè)知識領(lǐng)域。如下: 計(jì)算機(jī)的18個(gè)領(lǐng)域 計(jì)算機(jī)的18個(gè)領(lǐng)域 雖然計(jì)算機(jī)科學(xué)被劃分為18個(gè)領(lǐng)域,但是這18個(gè)領(lǐng)域有著緊密的聯(lián)系,構(gòu)成了知識之網(wǎng)。這是我們的核心任務(wù)。 計(jì)算機(jī)自學(xué)路線圖 帶著目的去學(xué)習(xí):
對于小白而言,首先要對計(jì)算機(jī)科學(xué)和計(jì)算機(jī)產(chǎn)業(yè)形成整體的認(rèn)識。這方面可以讀導(dǎo)論或者科普讀物。建議先讀吳軍博士的《浪潮之巔》。這本書講IT產(chǎn)業(yè)非常精彩。 緊接著,要做兩件事:(1)掌握一門編程語言;(2)學(xué)好數(shù)學(xué)。這兩者是并行的。 (1)掌握一門編程語言:
上面這四種語言,是學(xué)軟件開發(fā)必須要掌握的,從任何一個(gè)語言開始學(xué)起都可以。 (2)對于數(shù)學(xué),我們必須掌握四門課程:
在掌握了編程語言,用編程語言寫了一些應(yīng)用程序之后,又學(xué)習(xí)了一些數(shù)學(xué)之后,你就可以進(jìn)入計(jì)算機(jī)專業(yè)基礎(chǔ)課程的學(xué)習(xí)。這些課程構(gòu)成了計(jì)算機(jī)的核心課程群,我們通常把它稱為「專業(yè)基礎(chǔ)課」。專業(yè)基礎(chǔ)課有十多門,其中最重要的是四門如下(這四個(gè)課程也是考研科目):
除此之外,計(jì)算機(jī)基礎(chǔ)課還包括:
這次我們就只針對那四個(gè)考研科目進(jìn)行介紹。 這里我要強(qiáng)調(diào)的是:計(jì)算機(jī)專業(yè)基礎(chǔ)課程的學(xué)習(xí),和我們在工作中實(shí)用技術(shù)的學(xué)習(xí),這兩者不是相互矛盾的,而是相互促進(jìn)的。比如計(jì)算機(jī)網(wǎng)絡(luò)課程,對web開發(fā)框架有幫助;反過來,如果寫了web框架,就能更深刻的理解計(jì)算機(jī)網(wǎng)絡(luò)這門課程。 在完成專業(yè)基礎(chǔ)課和實(shí)用技術(shù)的學(xué)習(xí)之后,就進(jìn)入了一個(gè)新的自學(xué)階段。這個(gè)階段可以針對你感興趣的特定領(lǐng)域深入鉆研了。比如你對人工智能感興趣,那可以學(xué)一下機(jī)器學(xué)習(xí)、spark等等。這個(gè)時(shí)候的學(xué)習(xí)目的非常明確,即:培養(yǎng)特定領(lǐng)域的專業(yè)技能,讓你成為特定領(lǐng)域的專家。 二.選書和看書的基本原則當(dāng)某人告訴你,某書是某領(lǐng)域最好的書籍,不要盲目相信,要經(jīng)過自己親自試驗(yàn)再下結(jié)論。通常情況下,一本別人眼中的好書,可能的確質(zhì)量很高,但如果閱讀它超過了你的能力,那對于你而言,它就不是一本好書,因?yàn)槟悴痪邆渌枰谋尘爸R,和相關(guān)的技術(shù)經(jīng)驗(yàn)。 第二個(gè)原則是,選擇那些你已經(jīng)具備讀懂前提的書。 分類閱讀法 閱讀科普書籍的最主要目的是:了解特定領(lǐng)域的背景知識、明了這個(gè)領(lǐng)域的基本數(shù)據(jù)和概念,建立全局觀。 多遍閱讀法 讀者:多讀幾遍真的很重要,我在看js的時(shí)候,把廖雪峰的教程看了好多遍,敲了好多遍。 多遍閱讀法的實(shí)例 上圖是計(jì)算機(jī)網(wǎng)絡(luò)的經(jīng)典教材。我們拿著兩本書來舉例。 比如《計(jì)算機(jī)網(wǎng)絡(luò):系統(tǒng)方法》這本書,作者在前言中就很明確地說明,它是針對網(wǎng)絡(luò)設(shè)計(jì)者寫的。注意是網(wǎng)絡(luò)設(shè)計(jì)者,不是網(wǎng)絡(luò)應(yīng)用開發(fā)者。這本書講的是計(jì)算機(jī)網(wǎng)絡(luò)的基本原理。介紹的是最初的設(shè)計(jì)者遇到了什么問題。 讀第一遍時(shí),第一章一定要認(rèn)真閱讀,包含了很多的術(shù)語。 讀第二遍時(shí),每章的開頭很重要。 比如《計(jì)算機(jī)網(wǎng)絡(luò):系統(tǒng)方法》這本書,里面講到的網(wǎng)絡(luò)安全這一章,如果你當(dāng)前還沒有涉及到這一塊兒,這一遍就可以跳過。但是有關(guān)PCP協(xié)議的內(nèi)容,在實(shí)際開發(fā)中用的很多,就很重要,這些內(nèi)容分布于書中的各個(gè)章節(jié),這就需要你把它們抽取出來。 難書和厚書的典型 比如上面的這本《離散數(shù)學(xué)》,一頁紙就要啃兩個(gè)小時(shí)。 應(yīng)對難書和厚書 與書籍相比,視頻的優(yōu)點(diǎn)是很獨(dú)特的,特別適合展示動(dòng)的過程,比如程序的調(diào)試過程、算法的運(yùn)行步驟等。 計(jì)算機(jī)和數(shù)學(xué)的關(guān)系 有很多編程工作屬于工程領(lǐng)域,按部就班,有很多現(xiàn)成的套路,創(chuàng)造性并不強(qiáng),數(shù)學(xué)在這些項(xiàng)目中并非成敗的關(guān)鍵因素。項(xiàng)目中,確實(shí)有算法在底層做支撐,但這算法往往都有現(xiàn)成的底層庫。你只需要知道如何調(diào)用就行,并不需要理解算法的細(xì)節(jié),并需要具備多深的數(shù)學(xué)功底。對于初級程序員來說,主要干的是搬磚的活兒,特別是CRUD類的代碼。 計(jì)算機(jī)和數(shù)學(xué)的關(guān)系 國內(nèi)數(shù)學(xué)教材 同濟(jì)的《高等數(shù)學(xué)》教材還是不錯(cuò)的,但是國內(nèi)數(shù)學(xué)教材有個(gè)最大的問題就是:往往只講法則、定理、證明、習(xí)題,不講數(shù)學(xué)的發(fā)展歷史、具體應(yīng)用、也不強(qiáng)調(diào)解決特定問題的思路,不適合自學(xué)。 國外的數(shù)學(xué)教材 普林斯頓的《微積分讀本》,最大的特點(diǎn)是,講的很細(xì),采用內(nèi)心獨(dú)白的方式介紹微積分,有高中基礎(chǔ)即可。內(nèi)容雖然沒有同濟(jì)的多和深,但學(xué)習(xí)計(jì)算機(jī)來說,也基本夠用了。 讀者:這里也給大家推薦本冷門數(shù)學(xué)書,名字叫考研數(shù)學(xué)三部曲,銷量很少。因?yàn)檫@本書優(yōu)點(diǎn)是由淺入深,缺點(diǎn)是又臭又長,適合文科生看。 考研數(shù)學(xué)三部曲 《計(jì)算機(jī)科學(xué)概論》起到的是建立全局觀的作用。 讀者:想從Python 入門的同學(xué),也推薦Headfirst Python。整個(gè)headfirst 系列都推薦。 讀者:headfirst真的很不錯(cuò),同推薦,特別設(shè)計(jì)模式。 《深入理解計(jì)算機(jī)系統(tǒng)》這本書,對于形成計(jì)算機(jī)系統(tǒng)的全局觀非常有用。這本書簡稱為CSAPP,很有名。這本是最大的特點(diǎn)是從使用者,而不是從設(shè)計(jì)者的角度來組織材料的,難度適中,文字流暢。但這本書不適合零基礎(chǔ)入門,你至少應(yīng)該首先學(xué)過計(jì)算機(jī)導(dǎo)論,并且有一定的C語言開發(fā)經(jīng)驗(yàn),會用Linux。 讀者:CSAPP看的時(shí)候要?jiǎng)覥語言并且要看計(jì)算機(jī)專業(yè)導(dǎo)論,不然看不懂的。 考研的四門課 下面介紹計(jì)算機(jī)專業(yè)的幾門骨干和和核心課程。同時(shí)也是考研的四門課程:數(shù)據(jù)結(jié)構(gòu)與算法、計(jì)算機(jī)網(wǎng)絡(luò)、操作系統(tǒng)、計(jì)算機(jī)組成原理。 (1)數(shù)據(jù)結(jié)構(gòu): 上圖中,數(shù)據(jù)結(jié)構(gòu)與算法包括了兩部分內(nèi)容。 現(xiàn)在的大數(shù)據(jù)和人工智能,完全就是算法。 上圖中,第一本書有兩個(gè)版本:java版本和C語言版本,難度適中。后兩本書,較難。 對于多數(shù)人來說,掌握算法,只需要知道算法的思想、應(yīng)用場景和優(yōu)缺點(diǎn)就可以。實(shí)際開發(fā)中,你要設(shè)計(jì)新算法的機(jī)會并不多,并且那些應(yīng)用很廣的算法,都已經(jīng)在框架里提供了現(xiàn)成的組件。這些組建內(nèi)部已經(jīng)實(shí)現(xiàn)了算法,你只需要知道是怎么回事,會調(diào)用就可以了。比如說加密和解密的算法。 考研和大公司面試,也不會考到復(fù)雜的算法,準(zhǔn)備前多刷幾遍即可。 (2)計(jì)算機(jī)組成原理: 計(jì)算機(jī)組成原理主要是介紹計(jì)算機(jī)由哪些部件組成的,這些部件是如何互相協(xié)作、完成處理功能、同時(shí)用來滿足各種成本和功耗指標(biāo)的。 學(xué)習(xí)這門課程之前,通常需要學(xué)習(xí)數(shù)字電路基礎(chǔ)。 學(xué)完計(jì)算機(jī)組成原理之后,再去學(xué)操作系統(tǒng)和編譯原理。 學(xué)習(xí)計(jì)算機(jī)組成原理之前,建議大家先看《編碼》這本書。 (3)操作系統(tǒng): 上圖中,操作系統(tǒng)的書分為兩類:教材和專著。 操作系統(tǒng)的教材里,數(shù)學(xué)公式不多,但它并不是說操作系統(tǒng)者這門課就很容易學(xué),學(xué)好操作系統(tǒng)的關(guān)鍵是一定要把它和軟件開發(fā)、動(dòng)手實(shí)踐結(jié)合起來。 很多操作系統(tǒng)都是用C語言寫的,建議大家在學(xué)習(xí)操作系統(tǒng)之前,先學(xué)習(xí)C語言。 學(xué)習(xí)操作系統(tǒng),最重要的是明白操作系統(tǒng)的內(nèi)部機(jī)理。推薦大家實(shí)用C語言在Linux下學(xué)習(xí)。 進(jìn)程和線程也是屬于操作系統(tǒng)的范疇。 讀者:補(bǔ)一個(gè)金老師的網(wǎng)易云課堂:http://mooc.study.163.com/u/8050019871#/c (4)計(jì)算機(jī)網(wǎng)絡(luò) 我推薦大家實(shí)用C、java、Phthon這三種語言去編寫網(wǎng)絡(luò)應(yīng)用程序。 另外必須要學(xué)會操作系統(tǒng)。網(wǎng)路協(xié)議棧通常都是由操作系統(tǒng)來負(fù)責(zé)實(shí)現(xiàn)的,網(wǎng)絡(luò)應(yīng)用基本都是多線程的。 上圖中這里介紹了三本經(jīng)典書籍。計(jì)算機(jī)網(wǎng)絡(luò)中一個(gè)重要的特點(diǎn)是分層。我們會發(fā)現(xiàn)這三個(gè)經(jīng)典教材是三個(gè)視角。
學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)的關(guān)鍵,是明白上面這三個(gè)問題。 一旦了解了計(jì)算機(jī)網(wǎng)絡(luò)的這些基本原理,你就會發(fā)現(xiàn),理解實(shí)際開發(fā)中的各種通信協(xié)議和各種網(wǎng)絡(luò)庫,就會比較容易。 掌握好相應(yīng)的網(wǎng)路協(xié)議,是掌握上層應(yīng)用軟件開發(fā)技術(shù)的關(guān)鍵。比如,如果連http協(xié)議都沒掌握,就去寫web應(yīng)用, 好比在沙灘上蓋樓。 |
|