我在逛知乎的時(shí)候看到一個(gè)問題:
隨手寫了個(gè)回答,沒想到很多讀者都表示說出了心聲,所以也同步發(fā)到公眾號(hào)。
以下是原回答我自己是 CS 科班的,讀者里也有很多各大高校
計(jì)算機(jī) 的同學(xué),覆蓋了上交、北郵、南郵、華科、川大、普通一本等等,根據(jù)他們反饋,總結(jié)了以下幾點(diǎn):
上課耽誤學(xué)習(xí),不上課考勤扣分,拿不了高績(jī)點(diǎn),耽誤保研出國(guó)。不多說,懂的都懂哈哈。 課程設(shè)置不合理,實(shí)驗(yàn)課多,作業(yè)多,并且大多是寫 Word 報(bào)告,實(shí)驗(yàn)報(bào)告就像這種(迪杰克斯拉算法): 占了很多時(shí)間,但是效果卻不如自學(xué),上課基本是放 PPT,考試內(nèi)容全在 PPT 上,看書的同學(xué)沒有背 PPT 的分?jǐn)?shù)考得高,沒有人愿意去啃那些大厚書,因?yàn)椤靶詢r(jià)比”太低。 都 2021年了,估計(jì)沒有幾個(gè)學(xué)校提交代碼是用 Git、Gitlab 這些工具吧,評(píng)分也沒有搞自動(dòng)化測(cè)試。做悉大、MIT這些學(xué)校的 labs,都是直接去網(wǎng)站提交代碼,跑 test case,馬上就能知道哪些 case 沒有過,再去 debug。 教材大部分使用自己編的,水平如何就不多說了,懂的都懂。很多書上還是用 VC 6.0 來寫的 C,為什么不換用更加優(yōu)秀經(jīng)典的教材呢?順便貼一個(gè)匿名回答: 不過值得表揚(yáng)的是,我們學(xué)校教材基本都是使用全英文黑皮書,比如《計(jì)算機(jī)網(wǎng)絡(luò):自頂向下》、《深入理解計(jì)算機(jī)系統(tǒng)》等,這樣的學(xué)校我知道有 15 所以上,希望會(huì)越來越多~對(duì)于計(jì)算機(jī)的學(xué)生,最好的資料和書籍是美帝那邊的,因?yàn)橛?jì)算機(jī)就是發(fā)源自美帝。 講課全程 PPT,放 PPT 就算了吧,很多 PPT 還是十幾年都沒更新那種(C語言 PPT 上用的還是 VC6.0....),什么 C 語言 main 函數(shù)返回值 void。 我看過的一門非常經(jīng)典課程,MIT CS107,講師全程幾乎都是黑板粉筆板書,學(xué)生跟著老師思路學(xué)習(xí),這才是最高效的,而且各自手寫代碼、手畫棧幀、手寫匯編:
CS107 在我大學(xué)期間,只有一位數(shù)學(xué)老師堅(jiān)持板書,大部分基本就是放 PPT 了事,下面的學(xué)生紛紛拿起手機(jī)拍照,或者直接下課去拷 PPT,這樣能學(xué)到多少呢?
代碼量太少,很多同學(xué)到畢業(yè)估計(jì)幾萬行都沒寫到,但是真正想鍛煉出極強(qiáng)的編程能力沒有 10w 很難,這方面作為學(xué)生我們也要多反思,為什么平時(shí)沒有寫到這么多代碼。 很多學(xué)校就是孤立的學(xué)了一堆 操作系統(tǒng)、計(jì)組、體系結(jié)構(gòu)、編譯原理、C、匯編,但是很少有同學(xué)能把這些課程連起來形成 CS 體系,這方面 CMU 的神書神課《CSAPP》又要提下了,幸好我們學(xué)校開設(shè)了系統(tǒng)編程的課程,教材就是 CSAPP,其它沒有開設(shè)這門課的學(xué)校建議學(xué)弟學(xué)妹們自學(xué)。 課程設(shè)置雜亂,學(xué)了一堆的數(shù)電、模電、大學(xué)物理..... 想起大一被大物實(shí)驗(yàn)支配的恐懼,時(shí)間都費(fèi)在這些上面了,說實(shí)話把這些課程壓縮,上一些函數(shù)式編程、或者比較前沿的 CS 方向,我覺得對(duì)計(jì)算機(jī)專業(yè)更好! 核心課程上的太晚!我們學(xué)校大二下、大三才開始計(jì)網(wǎng)、操作系統(tǒng)、數(shù)據(jù)庫原理等核心課程,太晚了,這些課程至少要在大三前完成,大三再開設(shè)圖形學(xué)、編譯原理等進(jìn)階課程,大四直接就是實(shí)踐課程為主或者讓同學(xué)們自己出去找實(shí)習(xí)! 我個(gè)人覺得大概這樣設(shè)置CS課程更為合理: 大一上:C/C 程序設(shè)計(jì)、高數(shù)1(初等微積分)、離散數(shù)學(xué)大一下:數(shù)字邏輯、數(shù)據(jù)結(jié)構(gòu)、匯編語言、面向?qū)ο缶幊?Java/C )、高數(shù)2 、線性代數(shù)大二上:軟件工程、數(shù)據(jù)庫、Java/Python Web開發(fā)、組成原理大二下:操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)、系統(tǒng)級(jí)編程(CSAPP)大三:軟件測(cè)試、軟件安全、課程設(shè)計(jì)、密碼學(xué)、圖形學(xué)等選修方向大四:實(shí)踐、畢設(shè)、實(shí)習(xí)
另外,還有最大的問題就是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)。 國(guó)外,尤其是美國(guó),很多高校 CS 教育極其注重實(shí)踐,國(guó)內(nèi)也就清北復(fù)交浙等少數(shù) TOP 學(xué)校有少量的實(shí)踐教學(xué),其它大部分是念 PPT,課后作業(yè)就是做 Word 項(xiàng)目。因?yàn)楹芏嗬蠋熥约阂膊粫?huì)編程.... 更沒法設(shè)計(jì)那些硬核的實(shí)驗(yàn)和輔助教學(xué)平臺(tái),不會(huì)編程的人教你編程......這結(jié)果能好么。就拿我自己來說,學(xué)校好歹也是個(gè) 985 吧,我上了三周的 Java 課,愣是沒聽懂在講啥,最后看了幾個(gè)尚學(xué)堂高琪的視頻幾天就入門了....
再來說美國(guó)為什么有強(qiáng)大的基礎(chǔ)軟件能力吧,這得益于他們的高校在培養(yǎng)學(xué)生造輪子的能力。 比如國(guó)外是如何學(xué)習(xí)數(shù)據(jù)庫的?就拿 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等。國(guó)內(nèi)數(shù)據(jù)庫教什么?教 SQL 怎么寫,教數(shù)據(jù)庫原理(這個(gè)還算好的)更有甚者實(shí)驗(yàn)就是安排用 Java 使用 JDBC 連接MySQL 寫個(gè)應(yīng)用。。。國(guó)外是如何教計(jì)算機(jī)網(wǎng)絡(luò)的?手寫 TCP!比如斯坦福 CS 144,CS144 Lab Assignments - 手寫TCP - LAB4
img 國(guó)內(nèi)是怎么教的?記住 TCP 三次握手、四次揮手、記住 DNS使用 UDP協(xié)議....國(guó)內(nèi)大作業(yè)是什么?有些是 Word 寫報(bào)告。。。有些是讓你用一下 socket api 寫個(gè)網(wǎng)絡(luò)程序。。。好吧,其實(shí)會(huì)用 socket 的也挺不錯(cuò)的,最關(guān)鍵是有些直接讓你寫個(gè)爬蟲、HTTP 服務(wù),就算是使用了網(wǎng)絡(luò)協(xié)議了。。。這是計(jì)算機(jī)網(wǎng)絡(luò)原理嗎?國(guó)外是如何教 操作系統(tǒng)的?比如 MIT 6.828,現(xiàn)在改名了。直接讓你基于一個(gè) xv6 去實(shí)現(xiàn)一些模塊,比如文件系統(tǒng)、多線程。國(guó)內(nèi)是如何教的?記住進(jìn)程和線程區(qū)別、記住虛擬內(nèi)存的各種組關(guān)聯(lián)....當(dāng)然也有一些學(xué)校會(huì)有實(shí)驗(yàn),比如清華 ucore、哈工大 linux0.11、川大也有引入 nachos這就是為什么美國(guó)高校有很強(qiáng)的編碼能力、造輪子的能力,因?yàn)樗麄兊腃S學(xué)生成長(zhǎng)環(huán)境就是這樣的。大多數(shù)高校老師升職不靠教學(xué),所以大家都沒把心思放在教學(xué)上,做“研究”發(fā)論文,不香么。設(shè)計(jì)這么多麻煩的實(shí)驗(yàn)不是給自己找麻煩么弄個(gè) PPT、Word 多爽呀這個(gè)現(xiàn)象我估計(jì)還會(huì)一直持續(xù)下去,老實(shí)說,跟著學(xué)校的路線走,學(xué)計(jì)算機(jī),大概率畢業(yè)即失業(yè)。
給大家列舉一個(gè)我做過的國(guó)外老師設(shè)計(jì)的實(shí)驗(yàn)吧: 模擬實(shí)現(xiàn) TCP 可靠傳輸?shù)?/strong>人家老外老師就是給力,直接做了一個(gè)網(wǎng)站,這個(gè)網(wǎng)站你可以通過 TCP 連接上去,然后你需要?jiǎng)?chuàng)建幾個(gè)節(jié)點(diǎn),互相發(fā)消息。他們之間的消息都會(huì)經(jīng)過老師的網(wǎng)站所以通過網(wǎng)站上是可以控制丟包率的,也能控制節(jié)點(diǎn)的拓?fù)浣Y(jié)構(gòu),要求就是讓你基于這種不可靠的信道,做出可靠數(shù)據(jù)傳輸!這簡(jiǎn)直就是翻版 TCP 嘛,超時(shí)重傳、ACK、滑動(dòng)窗口啥的都給我安排上!就是像下面圖中一樣,圓圈就表示你可達(dá)的范圍,不同節(jié)點(diǎn)形成各種網(wǎng)絡(luò)拓?fù)?,可以調(diào)節(jié)網(wǎng)絡(luò) 丟包率 Loss chance。 設(shè)計(jì)這些東西、實(shí)驗(yàn)系統(tǒng)、自動(dòng)化測(cè)試評(píng)分系統(tǒng),肯定需要花費(fèi)老師大量時(shí)間精力,但是有沒有帶來多少升職上的產(chǎn)出,當(dāng)然沒動(dòng)力去搞啰。反正吧,學(xué)計(jì)算機(jī)最好不要全部去跟著學(xué)校學(xué),除非你學(xué)校很好,不然大概率畢業(yè)即失業(yè)。當(dāng)然,說了這么多問題,也是有長(zhǎng)處的,這里引用知乎一位答主邦彥的總結(jié): 最后,附上這個(gè)回答下的一些評(píng)論: 鄭重申明本文非崇洋媚外,吐槽只針對(duì)部分高校的現(xiàn)象。像清華、哈工大、南大就有非常不錯(cuò)的課程,也在積極像 MIT、Stanford 學(xué)習(xí),畢業(yè)的時(shí)候已經(jīng)有自己造的編譯器、OS、數(shù)據(jù)庫等等,并且均使用 docker 和 gitlab CI 解決環(huán)境和自動(dòng)化測(cè)試問題。-- 來自評(píng)論區(qū)但是這樣的學(xué)校有點(diǎn)少,希望國(guó)內(nèi)能有更多高校計(jì)算機(jī) 教育模式能夠早日跟美帝等 CS 強(qiáng)校接軌。培養(yǎng)更多基礎(chǔ)扎實(shí)、編程能力強(qiáng)的學(xué)生,助力操作系統(tǒng)、數(shù)據(jù)庫等基礎(chǔ)軟件、工業(yè)軟件的發(fā)展。