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