不廢話,直接上干貨。首先拿到某985院校的計算機(jī)科學(xué)與技術(shù)的培養(yǎng)方案。拿到最精確的信息,學(xué)最重要的知識點(diǎn)。
易道云出品
一、學(xué)習(xí)好一門編程語言
可以參考我這個回答,這個回答有理有據(jù),通過數(shù)據(jù)分析,用數(shù)據(jù)論證了如何選擇編程語言:https://www.bilibili.com/video/BV1T84y117e3/
二、學(xué)習(xí)網(wǎng)絡(luò)編程和網(wǎng)絡(luò)原理
目前的互聯(lián)網(wǎng)時代,程序基本上都離不開網(wǎng)絡(luò),我個人覺得了解計算機(jī)網(wǎng)絡(luò)是必須的,在大學(xué)的課程中,基本上會開設(shè)這門課。
不知道大家有沒有想過,一臺計算機(jī)是怎么把數(shù)據(jù)發(fā)給另外的計算機(jī)的呢?我們可以把問題再分解一下:
1、兩臺計算機(jī)完全沒有連接,怎么通信?
2、全世界有那么多計算機(jī),如何識別呢?---類比到人類,用什么來識別你是一個真真正正存在的人?也就是說如何識別那臺有特點(diǎn)的計算機(jī)呢?有人說我們可以用 mac或者 IP 來唯一標(biāo)識,可是,全世界那么多計算機(jī),有了這個IP,我們?nèi)绾尾樵兡??難道去遍歷嗎?
3、多個程序同時發(fā)消息給一臺計算機(jī),計算機(jī)是如何準(zhǔn)確把這些信息拿到,并分配給這些不同程序的呢?
4、如何處理丟失的信息?
如果說大家把這幾點(diǎn)信息理解了,那么網(wǎng)絡(luò)編程的原理就能理解一大半了。在這里我只是舉個例子,具體我不展開了。
關(guān)于推薦書籍大家一般都推薦《計算機(jī)網(wǎng)絡(luò):自頂向下》、《圖解http》這兩本,但我看了一下,術(shù)語太多,難理解,不適合初學(xué)者。
我覺得兩本就夠了,尹圣雨《TCP/IP網(wǎng)絡(luò)編程》韓國人寫的,都是通過舉例子,寫得非常好,大概一星期就能看完了;第二本就更好了,來自于游雙的《linux高性能服務(wù)器》,我就是看了這本書正式從嵌入式端轉(zhuǎn)為服務(wù)器開發(fā)的。
具體怎么學(xué)?紙上學(xué)來終覺淺,絕知此事要躬行。我是把里面的demo代碼一個個敲完的,收獲非常大,強(qiáng)烈推薦。
三、學(xué)習(xí)操作系統(tǒng)原理
操作系統(tǒng)是真的難理解,所以要選擇一本好的教材是非常非常重要的,我強(qiáng)烈推薦一本寶藏書籍,叫做《操作系統(tǒng)哲學(xué)》。我個人建議不要去學(xué)那些網(wǎng)上推薦的什么《現(xiàn)代操作系統(tǒng)》、《操作系統(tǒng)—精髓與設(shè)計原理》、《深入理解計算機(jī)操作系統(tǒng)》,我看過目錄,用一個詞來形容就是:枯燥無味。當(dāng)我看了《操作系統(tǒng)哲學(xué)原理》之后,我真是太佩服這個作者了,能夠把如此索然無味的操作系統(tǒng)寫得如此有趣。
易道云出品
不得不佩服這位大佬的智慧,吐血推薦。說實(shí)話,在我畢業(yè)之前,我是完全不知道如何去理解操作系統(tǒng)。
四、學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法
數(shù)據(jù)結(jié)構(gòu)是相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。數(shù)據(jù)結(jié)構(gòu)是一門研究非數(shù)值計算的程序設(shè)計問題中的操作對象,以及它們之間的關(guān)系和操作等相關(guān)問題的學(xué)科。那怎么學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)??
1、記憶,記住算法思想
我覺得這個是數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)最基礎(chǔ)的部分。
學(xué)完之后,你至少得能給人說明白,什么是”堆棧“,什么是”平衡二叉樹“等等等吧。我之所以說”記住“,是希望這些能夠形成長久記憶,存儲到你的”硬盤“里,而不僅僅在學(xué)習(xí)的時候過了一遍你的”內(nèi)存“。
例如,學(xué)習(xí)哈夫曼樹的時候。哈夫曼樹的定義:WPL(帶權(quán)路徑長度)最小的二叉樹;哈夫曼樹的特點(diǎn):(1)沒有度為1的結(jié)點(diǎn);(2)n個葉子結(jié)點(diǎn)的哈夫曼樹共有2n-1個結(jié)點(diǎn);(3)哈夫曼樹的任意非葉節(jié)點(diǎn)的左右子樹交換后仍是哈夫曼樹。關(guān)于”數(shù)據(jù)結(jié)構(gòu)“,需要記憶的內(nèi)容也需要自己在其中慢慢領(lǐng)悟。
至于”記住算法思想“,舉個例子,思考我們?nèi)绾螛?gòu)造一個”哈夫曼樹“。當(dāng)然,在知道它的定義后,我們可以自己去設(shè)計一個算法。如果,自己可以想出來,恭喜你。如果自己沒想到,再看看先人的解決辦法后,不是僅僅“驚嘆”一聲,更要去記住它。我強(qiáng)調(diào)“記住”,并沒有死記硬背的意思,而是,很多東西的理解和創(chuàng)新都是以記憶為前提的。
2、練習(xí),用編程語言去實(shí)現(xiàn)某一數(shù)據(jù)結(jié)構(gòu)上的算法
因?yàn)槿说木τ邢?,千萬不要貪多,只需要搞定那些常見的就行了,這就足以去搞定90%以上的公司,如果是算法崗位就當(dāng)我沒說,如果只是一個開發(fā)崗位,那就只需要掌握最常用、最基礎(chǔ)的20個數(shù)據(jù)結(jié)構(gòu)與算法,學(xué)習(xí)他們的“來歷”、“特點(diǎn)”、“適合解決什么問題”和“實(shí)際的應(yīng)用場景”。
數(shù)據(jù)結(jié)構(gòu):數(shù)組、鏈表、棧、隊列、散列表、二叉樹、堆、跳表、圖、Tire樹
算法:遞歸、排序、二分查找、搜索、哈希算法、貪心算法、分治算法、回溯算法、動態(tài)規(guī)劃、字符串匹配算法。具體分為3個小步驟:
(1)邊學(xué)邊練,每周花 1~2 小時集中攻關(guān)一個數(shù)據(jù)結(jié)構(gòu)和算法,全部寫出來。
(2) 多思考、多拓展、多理解,找到適合的方法去解決問題。
(3)自我激勵,每次學(xué)習(xí)完做一篇學(xué)習(xí)筆記。
吐血推薦書籍:程杰老師的《大話數(shù)據(jù)結(jié)構(gòu)》
易道云出品
五、學(xué)習(xí)設(shè)計模式
設(shè)計模式是在軟件工程實(shí)踐過程中,軟件開發(fā)者們總結(jié)出的良好的編程方法,使用設(shè)計模式能夠增加系統(tǒng)的健壯性,易修改性和可擴(kuò)展性,當(dāng)你進(jìn)行開發(fā)的軟件規(guī)模比較大的時候,良好的設(shè)計模式會給編程帶來便利,讓系統(tǒng)更加穩(wěn)定。
怎么學(xué)習(xí)設(shè)計模式??
1、記憶,記住典型案例
2、看一些開源代碼,比如redis;
3、練習(xí),用編程語言去實(shí)現(xiàn)一些設(shè)計模式;
4、吐血推薦書籍:程杰老師的《大話設(shè)計模式》
易道云出品
非常非常好的設(shè)計模式的入門書。基本上也把每個設(shè)計模式講清楚了。國內(nèi)很多教材和教師講述專業(yè)知識都是很枯燥的,就因如此才把很多初學(xué)者拒之門外,讓一部分人喪失了學(xué)習(xí)興趣。而這本書則類似于少數(shù)名師一樣,采用交互式及啟發(fā)式的講述方式,在不知不覺中向讀者傳授了知識。有些人傾向于像專業(yè)論文一般嚴(yán)謹(jǐn)?shù)谋硎龇绞?,但如此以來在理解上就要多花一些工夫了。就目前而言,像這本書一樣,以大家所熟知的例子來描述問題,步步深入,具有中國特色風(fēng)格的書,才是我們更加需要的。把這些設(shè)計模式讀進(jìn)去了,那么你對編程的理解就會更上一層樓。