既然是學(xué)習(xí)CS,那么在這里,我粗淺的把計(jì)算機(jī)編程領(lǐng)域的知識(shí)分為三個(gè)部分:
-
基礎(chǔ)知識(shí)
-
特定領(lǐng)域知識(shí)
-
框架和開(kāi)發(fā)技能
基礎(chǔ)知識(shí)是指不管從事任何方向的軟件工程師都應(yīng)該掌握的,比如數(shù)據(jù)結(jié)構(gòu)、算法、操作系統(tǒng)。
特定領(lǐng)域知識(shí)就是你從事某個(gè)細(xì)分方向時(shí)需要掌握的知識(shí),比如做游戲引擎的需要掌握?qǐng)D形學(xué);做前端的需要掌握瀏覽器渲染原理、前端三大件;算法工程師需要更多的數(shù)學(xué)知識(shí)。
畢竟計(jì)算機(jī)各種門類挺多的,需要選個(gè)細(xì)分方向?qū)Q邢氯?,什么都學(xué)只會(huì)什么都不精(大佬除外啦。
上面那么劃分可能有同學(xué)還比較疑惑,再細(xì)一點(diǎn),我認(rèn)為需要重點(diǎn)掌握學(xué)習(xí)的就是 :
-
2-3門編程語(yǔ)言(1-2靜態(tài)編譯型:C/C++、Java + 1-2 動(dòng)態(tài)/腳本語(yǔ)言: Python、shell之類)
-
算法與數(shù)據(jù)結(jié)構(gòu)
-
System(OS、計(jì)算機(jī)組成、memory、cache等等)
-
工程開(kāi)發(fā)能力(git、linux、shell、環(huán)境搭建、部署等)
計(jì)算機(jī)專業(yè)的核心課幾乎都是圍繞著構(gòu)建上訴這些能力來(lái)的,比如:
-
計(jì)算機(jī)學(xué)科導(dǎo)論和 C 語(yǔ)言
-
匯編、操作系統(tǒng)、C++、數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學(xué)、數(shù)值分析和計(jì)算機(jī)組成原理
-
計(jì)算機(jī)編譯原理和數(shù)據(jù)庫(kù)
-
計(jì)算機(jī)網(wǎng)絡(luò)與安全和軟件工程
還有高數(shù)、線性代數(shù)、離散數(shù)學(xué)、網(wǎng)絡(luò)原理、網(wǎng)頁(yè)設(shè)計(jì)、多媒體技術(shù)、匯編語(yǔ)言、面向?qū)ο蟮脑O(shè)計(jì)語(yǔ)言、Java 編程、ASP、SQL等
總的來(lái)說(shuō)是
-
先學(xué)習(xí) C 語(yǔ)言和 C++。教材有:C programming language-K&R、C traps and pitfalls、Algorithms in C 和 Expert C Programming
-
學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)。清華大學(xué)嚴(yán)蔚敏《數(shù)據(jù)結(jié)構(gòu)》,目前還未找到經(jīng)典的國(guó)外教材
-
學(xué)習(xí)算法。算法導(dǎo)論和具體數(shù)學(xué)及其應(yīng)用
-
計(jì)算機(jī)組成原理。Computer Organization and Design The Hardware-3rd-David Patterson
-
計(jì)算機(jī)系統(tǒng)。CSAPP
-
操作系統(tǒng)。鳥(niǎo)叔的私房菜和計(jì)算機(jī)網(wǎng)絡(luò)
一、學(xué)習(xí)順序
可以直接參考網(wǎng)易云課堂上CS科班的課程安排,國(guó)內(nèi)幾乎大部分高校都是這樣:
這里也順便給學(xué)弟學(xué)妹們推薦一些優(yōu)秀的學(xué)習(xí)資源:
核心就是計(jì)算機(jī)底層 + 通過(guò)造輪子方式學(xué)習(xí)計(jì)算機(jī)基礎(chǔ)課:
操作系統(tǒng)
國(guó)外有很多優(yōu)秀的操作系統(tǒng)公開(kāi)課,比如 mit6.828、哈佛 OS/161, 這類課程基本都是給你一個(gè) mini os 殼,讓你去完成部分操作系統(tǒng)的核心模塊,比如線程管理、文件系統(tǒng)、分頁(yè)、調(diào)度等。
相比純看書(shū),這樣的學(xué)習(xí)方式無(wú)疑更加的生動(dòng)和有趣。
這是課程官網(wǎng):
https://pdos.csail.mit.edu/6.828/2018/schedule.html
中國(guó)的知名大學(xué),世界知名大學(xué)的操作系統(tǒng)課都有大實(shí)驗(yàn),有一個(gè)現(xiàn)成的小系統(tǒng)讓你去學(xué)習(xí),分析。比如MIT有xv6,哈佛有,伯克利有Nachos,斯坦福有PrintOS, 清華有ucore等等。這些代碼全是開(kāi)源的,也都在1兩萬(wàn)行上下,完全可以在大學(xué)期間啃下來(lái)。
國(guó)內(nèi)也有一些頂尖高校也是采取類似的方式,比如清華ucore、哈工大 好像是基于 Linux 0.11魔改
哈工大:
https://github.com/hoverwinter/HIT-OSLab
有些還有配套的視頻,比如清華在線的慕課:
https://next.xuetangx.com/course/THU08091000267/1516699
另外推薦一本可以讓你從零開(kāi)始寫(xiě)一個(gè)mini os的書(shū)《操作系統(tǒng)真象還原》,這本書(shū)講得真的非常的細(xì)致。
數(shù)據(jù)庫(kù)
都說(shuō)很多開(kāi)發(fā)是 crud ,而crud的對(duì)象就是數(shù)據(jù)庫(kù),所以好好掌握數(shù)據(jù)庫(kù)的原理也是非常重要的,如果也能通過(guò)造一個(gè)簡(jiǎn)單的db的方式來(lái)學(xué)習(xí),我相信這樣的方式一定是最好的:
當(dāng)然了,實(shí)現(xiàn)一個(gè)數(shù)據(jù)庫(kù)也是相當(dāng)有難度的,你大概需要這些知識(shí):
-
SQL解析,你需要實(shí)現(xiàn)一個(gè)語(yǔ)法分析器, 《編譯原理》的基礎(chǔ)知識(shí)就用上了,不過(guò)這里自己去實(shí)現(xiàn)不太現(xiàn)實(shí),可以參考TIDB,用Lexer & Yacc去做 SQL的解析,生成 AST。
-
數(shù)據(jù)需要持久化存儲(chǔ),這里需要考慮存儲(chǔ)引擎,涉及到《操作系統(tǒng)知識(shí)》需要對(duì)外提供接口,B+樹(shù)等數(shù)據(jù)結(jié)構(gòu)知識(shí),這里簡(jiǎn)單一點(diǎn)甚至可以直接寫(xiě)到文件,畢竟管理磁盤也挺惡心的。
-
實(shí)現(xiàn)索引
-
需要做表的Join,事務(wù)的ACID, ?進(jìn)階一點(diǎn),考慮如何實(shí)現(xiàn) MVCC等
-
db的client和server之間如何訪問(wèn)又需要用到socket編程的知識(shí)
做這些可能有點(diǎn)難,不過(guò)在GitHub上有教程教你如何一步步實(shí)現(xiàn)一個(gè)像sqllite這樣的小型關(guān)系型數(shù)據(jù), 比如這一個(gè):https://cstack.github.io/db_tutorial/
另外 MIT 6.830?Database Systems?也是很不錯(cuò)一門課
這是數(shù)據(jù)庫(kù)系統(tǒng)的一門核心課程。由數(shù)據(jù)庫(kù)的一大山頭Samuel Madden教授。前半部分比較基礎(chǔ)的數(shù)據(jù)庫(kù)的知識(shí),后半段主要在講Distributed Databases的東西,各種consistency挺有意思,也是database比較火的研究方向。
課程鏈接:http://db.csail.mit.edu/6.830/
還有 CMU 的兩門 數(shù)據(jù)庫(kù)課程也不錯(cuò):
https://15445.courses.cs.cmu.edu/fall2019/ ? // 初級(jí)
https://15721.courses.cs.cmu.edu/spring2019/ ?// 進(jìn)階
計(jì)算機(jī)網(wǎng)絡(luò)
// 這里就是考慮如何去實(shí)現(xiàn)個(gè)網(wǎng)絡(luò)協(xié)議棧了
可能不需要完全實(shí)現(xiàn)每一層,比如可以嘗試用 UDP 去把學(xué)到的那些超時(shí)重傳、ACK、滑動(dòng)窗口等實(shí)現(xiàn)一下,這樣對(duì) TCP 理解也會(huì)更加深刻
這個(gè)國(guó)外也有公開(kāi)課,后面有人看再(瘋狂暗示點(diǎn)贊哈哈哈)更新吧~
一些好書(shū)&教材
這里就不列太多了,免得嚇到大家哈哈哈,隨便來(lái)兩本:
-
《CSAPP》
-
《程序員自我修養(yǎng)》
-
《編碼》
-
《Inside the C++ Object Model》
-
《Linux 高性能服務(wù)端編程》
-
《計(jì)算機(jī)網(wǎng)絡(luò)自頂向下》
-
....
大家應(yīng)該也看出來(lái)了,我推薦的書(shū)偏向 C++ 方向,因?yàn)槲覐拇笕_(kāi)始就偏向 Linux C++ 開(kāi)發(fā)方向
前前后后看了《C++ Primer》、《APUE》、《UNP》、《深度探索C++對(duì)象模型》、《STL源碼剖析》、《C++設(shè)計(jì)與演化》、《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》、《Linux內(nèi)核完全注釋》、《effecitve C++》 、《effective modern C++》、《程序員自我修養(yǎng)》、《Linux高性能服務(wù)端編程》、《Linux多線程服務(wù)端編程》(知乎陳碩大佬寫(xiě)的)......
順便還看了點(diǎn) Muduo 源碼,自己模仿著基于 Epoll 寫(xiě)一個(gè) Reactor模型的 Web 靜態(tài)服務(wù)器,跟著知乎 Milo 大佬寫(xiě) Json 庫(kù),總之,這段時(shí)期是寫(xiě)了一些小”輪子“的。
(PS:知乎上有朋友問(wèn)我是如何看完這么多書(shū)的,其實(shí)在之前的文章中就寫(xiě)了,看書(shū)我會(huì)有選擇的挑章節(jié)看,不會(huì)從頭看到尾的,而且大三開(kāi)始課就少了,我基本就在刷這些書(shū),其實(shí)時(shí)間還蠻多的?畢竟我也沒(méi)參加什么社團(tuán)、學(xué)生會(huì)之類,也沒(méi)女朋友。。。
那時(shí)候會(huì)每天記錄看書(shū)的進(jìn)度,感覺(jué)特別有勁:
書(shū)看得越多,其實(shí)你越能找到自己的方向,大三上我就給自己學(xué)習(xí)定位:
深入C++語(yǔ)言(多線程)+ 存儲(chǔ)(學(xué)習(xí) Redis、leveldb)+ 網(wǎng)絡(luò)編程(學(xué)習(xí)muduo,各種網(wǎng)絡(luò)編程模型)+ 學(xué)習(xí)分布式(MIT 6.824、ddia、google 三大論文等)
基本上是沿著上面幾個(gè)方向去展開(kāi)學(xué)習(xí)的,有的看書(shū),有的論文,也有的看博客看源碼。
總之,知識(shí)面在大三不斷擴(kuò)充,自己開(kāi)始關(guān)注學(xué)習(xí) C10K、C100K 這樣的后臺(tái)服務(wù)器開(kāi)發(fā)高性能、高并發(fā)的解決方法。
當(dāng)然了,還有些到現(xiàn)在還沒(méi)開(kāi)始,比如 leveldb 的源碼、6.824 的 lab,可能是變懶了......
也可能是學(xué)習(xí)變得不那么純碎面向技術(shù)了,變成面向工作、面向賺錢了哈哈哈。
值得一提的是,大三上我們學(xué)院有門 System Programing 的課,教材就是使用的 CSAPP,因此我之前大二草草看完的書(shū),得以再次翻開(kāi),這一次我把附帶的是個(gè)實(shí)驗(yàn)也挨著挨著做了,收獲良多,有位運(yùn)算各種奇技淫巧,有 Bomb lab 刺激的打怪通關(guān)、也知道了buffer overflow attack.... 還有實(shí)現(xiàn)基本的內(nèi)存管理等等。
另外,對(duì)于還在大一、大二的很多學(xué)弟學(xué)妹們來(lái)說(shuō),可能覺(jué)得剛學(xué)會(huì)一點(diǎn)編程語(yǔ)言,什么都做不了,更不知道和實(shí)際工作的差距在哪。
那么最好的方式就是先按部就班的把學(xué)校安排的基礎(chǔ)課程學(xué)好,再在課外自己多練習(xí)編程,了解一些業(yè)界的技術(shù)、框架。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-470675.html
把時(shí)間充分利用好。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-470675.html
到了這里,關(guān)于計(jì)算機(jī)專業(yè)學(xué)習(xí)的核心是什么?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!