有問(wèn)題!
公子龍:這是一個(gè)大膽的問(wèn)題,國(guó)內(nèi)高校計(jì)算機(jī)教育存在哪些問(wèn)題?
有問(wèn)題嗎?有問(wèn)題。
敢說(shuō)嗎,不太敢說(shuō)。
勉強(qiáng)學(xué)習(xí)吧,又不是不能學(xué),大不了學(xué)的痛苦一些。
這估計(jì)是我們很多人內(nèi)心的真實(shí)想法,但有反思才會(huì)有進(jìn)步,計(jì)算機(jī)的萌芽是從國(guó)外開(kāi)始的,近些年我們的進(jìn)步是可觀的,在猛追猛趕下,軟硬件的積累都有了很大的進(jìn)步。
但,問(wèn)題還是有,再多的成果,也不能抹去所有的問(wèn)題,其中,計(jì)算機(jī)科班學(xué)生的教育問(wèn)題,埋在我們心底許久,給每個(gè)志愿投身其中的學(xué)生帶來(lái)陣痛。
這篇文章,是我從小北(編程指北)那邊要過(guò)來(lái)的,文章核心聚焦于:談?wù)勀壳皣?guó)內(nèi)高校計(jì)算機(jī)教育的痛點(diǎn),有怎樣的方向可以探索,有哪些優(yōu)秀的方法可以借鑒。
很多時(shí)候,走了諸多彎路之后,停下來(lái)反思,然后慢慢的進(jìn)步,這種過(guò)程是可貴的,以下是正文。
正文
編程指北:我自己是 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)椤靶詢(xú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ě)匯編:

在我大學(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í)話(huà)把這些課程壓縮,上一些函數(shù)式編程、或者比較前沿的 CS 方向,我覺(jué)得對(duì)計(jì)算機(jī)專(zhuān)業(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 、線(xiàn)性代數(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

國(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)、多線(xiàn)程。
國(guó)內(nèi)是如何教的?
記住進(jìn)程和線(xià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é)校的路線(xiàn)走,學(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ā)展。
你好,我是公子龍,畢業(yè)于中科院,前大型計(jì)算機(jī)競(jìng)賽冠軍,現(xiàn)算法工程師,拿過(guò)九家大廠的 offer 。
北漂七年,從小白到計(jì)算機(jī)競(jìng)賽冠軍,讀研時(shí)通過(guò)實(shí)習(xí)和比賽收入 50 萬(wàn),點(diǎn)擊藍(lán)字查看我的編程之路。

