經(jīng)常有大一的同學(xué)或者非科班轉(zhuǎn)碼的同學(xué)在后臺(tái)問我,計(jì)算機(jī)都要學(xué)哪些課程,有什么先后順序。
有類似疑問的小伙伴,可以參考Github上「清華大學(xué)計(jì)算機(jī)系課程攻略」
里面包含了清華CS專業(yè),大一到大四的課程以及推薦書籍資源等,鏈接如下:
https://github.com/PKUanonym/REKCARC-TSC-UHTgithub.com
截取一些課程目錄:
大一上:
大一下:
大二上:
大二下:
大三,專業(yè)課明顯多起來了:
大四主要是實(shí)踐、實(shí)習(xí)、畢設(shè),課不多:
不過說實(shí)話,這份攻略對(duì)于我們大部分同學(xué)來說都只能參考,課程量有點(diǎn)大,時(shí)間不充足的話,很難完全跟下來。
但是我覺得這里面大三下的課程非常棒:
可以說大三下的這些課程鋪墊非常不錯(cuò),不管以后走分布式存儲(chǔ)、搜索引擎等基礎(chǔ)架構(gòu)方向還是機(jī)器學(xué)習(xí)等算法方向,亦或是游戲引擎、圖形處理等方向,都算是入門了。
但是說實(shí)話,清華這份攻略好是好,就是太多了,對(duì)于時(shí)間沒有那么充裕的同學(xué),想要一個(gè)更加精簡的 List,可以參考網(wǎng)易云課堂上的計(jì)算機(jī)課程圖:
我把幾門我覺得基本必學(xué)的課程用紅線框起來了,大家可以作為參考。
另外,學(xué)習(xí)這些課程的時(shí)候,一定要多寫代碼、做一些Lab,建議把操作系統(tǒng)、計(jì)網(wǎng)、csapp這些課程 lab做完(國內(nèi)有些學(xué)??赡軟]有),可以去國外找計(jì)算機(jī)四大名校的Lab。
部分學(xué)校最大的問題就是 OS、網(wǎng)絡(luò)、數(shù)據(jù)庫等 CS 核心課程上成了文科!
缺乏一些動(dòng)手實(shí)踐 Lab,大部分都是寫實(shí)驗(yàn)報(bào)告,就是不寫代碼。
為什么美帝在數(shù)據(jù)庫、操作系統(tǒng)、各種工業(yè)軟件工程能力如此強(qiáng)悍?
**我覺得和他們 CS 強(qiáng)校的教育模式有關(guān),**國外,尤其是美國,很多高校 CS 教育極其注重實(shí)踐,國內(nèi)也就少數(shù)不錯(cuò)的高校有實(shí)踐教學(xué),其它都是念 PPT,課后作業(yè)就是做 Word 項(xiàng)目。。。。
就拿 MIT 來說,6.830 Database Systems: 這是一門數(shù)據(jù)庫系統(tǒng)的一門核心課程。前半部分比較基礎(chǔ)的數(shù)據(jù)庫的知識(shí),后半段主要在講Distributed Databases 的東西
它們的實(shí)驗(yàn)是什么?
是寫個(gè)小型關(guān)系型數(shù)據(jù)庫,比如 lab1實(shí)現(xiàn)數(shù)據(jù)庫基本的存儲(chǔ)邏輯結(jié)構(gòu),具體包括:Tuple,TupleDesc,HeapPage,HeapFile,SeqScan,BufferPool等。
我們數(shù)據(jù)庫教什么?
教 SQL 怎么寫,教數(shù)據(jù)庫原理(這個(gè)還算好的)
大多數(shù)高校實(shí)驗(yàn)是什么?
用 Java 使用 JDBC 連接 MySQL 寫個(gè)應(yīng)用。。。
國外是如何教計(jì)算機(jī)網(wǎng)絡(luò)的?
實(shí)現(xiàn) TCP 協(xié)議棧~
比如斯坦福 CS 144,CS144 Lab Assignments - 手寫TCP - LAB4
我們是怎么學(xué)習(xí)的?
記住 TCP 三次握手、四次揮手、記住 DNS 使用 UDP 協(xié)議....
我們大作業(yè)是什么?
有些是 Word 寫作業(yè)。。。有些是讓你用一下 socket api 寫個(gè)網(wǎng)絡(luò)程序。。。這是計(jì)算機(jī)網(wǎng)絡(luò)原理嗎?
操作系統(tǒng)比較典型的是 MIT 6.828,現(xiàn)在改名了。
直接讓你基于一個(gè) xv6 去實(shí)現(xiàn)一些模塊,比如文件系統(tǒng)、多線程。
我們呢?
記住進(jìn)程和線程區(qū)別、記住虛擬內(nèi)存的各種組關(guān)聯(lián)....
當(dāng)然也有一些學(xué)校會(huì)有實(shí)驗(yàn),比如清華 ucore、哈工大 linux0.11。
這就是為什么美國高校有很強(qiáng)的編碼能力、造輪子的能力,因?yàn)樗麄兊?CS 學(xué)生成長環(huán)境就是這樣的。
CS 專業(yè)區(qū)別于其它專業(yè)一個(gè)很大特點(diǎn)就是:
比如你學(xué)了數(shù)據(jù)結(jié)構(gòu)、編譯原理、操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò),如果你從事的是研發(fā)崗,那一定離不開這些知識(shí)。
不管是科班還是非科班,想要快速持續(xù)的提高技術(shù)水平,就得靠自己去鉆,尤其離不開自學(xué)。
知乎上其實(shí)很多問科班和非科班的差別在哪,其實(shí)我一直想說,你給自己充足時(shí)間去把科班的內(nèi)容學(xué)習(xí)一遍,到底還能差在哪呢?
可能唯一差別就是少了一個(gè) 計(jì)算機(jī)學(xué)士學(xué)位。
也有人把這種自學(xué)出家的叫做民科,當(dāng)然沒有任何的諷刺意思哈。
那么計(jì)算機(jī)專業(yè)同學(xué)該如何自學(xué)呢?
其實(shí)看著很多,概況起來就是(下面只涉及CS專業(yè)課):
學(xué)習(xí)的途徑就是:
多看國內(nèi)外 CS 名校的一些開放課程 + 看經(jīng)典的書 + 多寫代碼?。?!
畢竟現(xiàn)在MOOC、Udemy、B站上學(xué)習(xí)的資源都是很豐富的。
比如:[CS經(jīng)典課程][https://mp.weixin.qq.com/s/bkLpjLxqQHaBTwCiz3VwBA]
簡單列舉幾個(gè)學(xué)科:
首先建議從計(jì)算機(jī)導(dǎo)論課程開始,推薦下面這些課程:
隨后建議學(xué)習(xí)一門語言,可以是 C、Java、或 Python,我推薦 C語言(當(dāng)然,也可以是Python!這不是重點(diǎn),重點(diǎn)是要多去寫,入門時(shí)提高對(duì)編程的興趣),提到C語言,我這里推薦國內(nèi)浙大翁凱老師的課,看過的都說好~
分為兩門,第一門是面向高考結(jié)束想提前自學(xué)一點(diǎn)編程的,叫大學(xué)先修課:
雖然叫先修課,但是覆蓋了C語言的主要知識(shí)點(diǎn),也適合大一新生~
第二門是
會(huì)帶你用C語言完成一些有趣的項(xiàng)目,比如一些圖形界面小游戲,先修課學(xué)習(xí) C 語言語法基礎(chǔ),進(jìn)階課帶你項(xiàng)目實(shí)操,搭配使用,你就是同學(xué)中的大神!
有了語言基礎(chǔ)之后建議學(xué)數(shù)據(jù)結(jié)構(gòu)與算法:
這兩個(gè)都是有視頻有l(wèi)ab的好課
還有一個(gè)非常經(jīng)典的 MIT 6.828,附帶一個(gè)xv6 lab
課程:6.828: Operating System Engineering
一個(gè)原則,來自翁凱老師:
學(xué)計(jì)算機(jī)一定要有一個(gè)非常強(qiáng)大的心理狀態(tài),計(jì)算機(jī)的所有東西都是人做出來的,別人能想的出來,我也一定能想得出來,在計(jì)算機(jī)的世界里沒有任何的黑魔法,所有的東西只不過是我現(xiàn)在不知道而已,總有一天我會(huì)把所有的細(xì)節(jié)、所有的內(nèi)部的東西全搞明白的
這里,也有一個(gè)問題,確實(shí)大部分的東西,只要你一直深挖下去,可能都能搞明白。
但是要注意時(shí)間成本,軟件行業(yè)已經(jīng)不是一般的復(fù)雜和巨大,任何一個(gè)領(lǐng)域的知識(shí)的復(fù)雜性都足夠耗費(fèi)掉我們一生的時(shí)間,所以一定要抓住主線,對(duì)于技術(shù)和知識(shí),要學(xué)通用的、流行的,可以嘗試面向面試學(xué)習(xí)。
“打破砂鍋問到底”式的學(xué)習(xí)雖然精神可敬,但效率并不劃算。
要在適當(dāng)?shù)膶哟紊铣橄蟪鲆粚?,并且認(rèn)可這一層提供的接口,不去深究內(nèi)部實(shí)現(xiàn),了解原理即可,不必深究內(nèi)部實(shí)現(xiàn)。
比如學(xué)習(xí) HTTP,那么就先認(rèn)可 TCP 提供的穩(wěn)定可靠傳輸,而不繼續(xù)深挖 TCP 的內(nèi)容。
新手,一定不要一直看書,保持看書的時(shí)間不超過 50%。
反復(fù)的循環(huán)。
聯(lián)系客服