這學期我上了一門「新課」《計算機組成原理》,還有一個月就該結課了。說是新課,是因爲課程大綱裏的大部分內容對我都是陌生的。本科的時候,我學的也是《計算機組成原理》這門課,是張悠慧老師開的,用的是CSAPP那本書,從我們那一年開始,不再「造機」(即知名的「奮戰三星期,造臺計算機」),而是改用Y86,在仿真器上學習。嚴格來說,CSAPP這本書講的更多的是「計算機系統」,與「組成原理」還不完全一樣,所以這學期準備這門課真的是無比困難。
眼看到了期末,課快按部就班上完了,感謝哈工大劉宏偉老師的視頻,沒有他,我不知道這門課要怎麼能夠講完。但這門課真的上得難受,前段時間在小紅書上讀到一篇文章,題目大概是「我們北郵的計算機教育的確是有問題的」,寫得直接,也戳中了不少我心裏積累的困惑。遺憾的是,當時沒有保存,現在已經看不到了。
實際上,與其說這是「北郵的問題」,倒不如說是「我們國家的計算機教育的確是有問題」。除了清華等少數學校,大多數學校的計算機專業基礎課都很難讓學生建立對計算機的整體理解(甚至清華現在能不能做到也存疑)。包括「計算機組成原理」、「計算機網絡」、「數據庫原理」在內的很多課程最後被講成了概念的集合,學生聽到了許多抽象的甚至錯誤的名詞,記不住,也不知道他們之間的關係,更不能拼湊出一個計算機系統的工作機制。
我就拿計算機組成原理這門課先立個靶子。剛纔提到CSAPP,它是一本好書,因爲它真的建立了「系統觀」,我想這是計算機教育最核心的內容。而這一學期,我反覆在我的Channel和一些羣裏批判的,是目前國內大部分計算機類專業都在使用的唐朔飛版《計算機組成原理》。這本書陳舊、過時,與現代計算機格格不入。陳舊這一點,已經是「原罪」了,學生聽課完成作業,看的是幾十年前的模型;而他們手裏的電腦手機則在運行一個完全不同的體系。拋開陳舊,我覺得最核心的問題實際上是難以幫學生建立「系統觀」。作者試圖把她見到的所有計算機組成的知識都放到這個課本里,然後試圖設計一個「抽象但看似完備」的體系。讓我舉幾個例子:
在講「數的表示」時,作者是這麼定義原碼的:
$$[x]_原= \begin{cases} 0,x & 2^n > x \ge 0\\ 2^n-x & 0 \ge x > -2^n \end{cases} $$
原碼實際上就是符號位加上|x|的二進制,這麼定義既無必要,事實上也無意義。增加了學生的理解負擔,也脫離了數要在計算機的字長範圍內運算這樣一個現實的限制。其他關於數的表達也與之類似。這種寫法本質上體現了一個我國很多教材長期存在的問題:教科書傾向於以形式化、抽象化的數學表達來描述本不需要這樣處理的概念,結果讓學生遠離機器本身。
再舉一例:
控制單元控制一條指令執行的過程實質上是依次執行一個確定的微操作序列的過程。由於不同指令所對應的微操作數及其複雜程度不同,因此每條指令和每個微操作所需的執行時間也不同。通常將如何形成控制不同微操作序列所採用的時序控制方式稱爲CU的控制方式。常見的控制方式有同步控制、異步控制、聯合控制和人工控制四種。
- 同步控制方式:同步控制方式是指,任何一條指令或指令中任何一個微操作的執行都是事先確定的,並且都是受統一基準時標的時序信號所控制的方式。
- 異步控制方式:異步控制方式不存在基準時標信號,沒有固定的週期節拍和嚴格的時鐘同步,執行每條指令和每個操作需要多少時間就佔用多少時間。
- 聯合控制方式:同步控制和異步控制相結合就是聯合控制方式。
- 人工控制方式
我做了一些調研,並沒有找到什麼商用計算機的CU是採用「異步控制方式」的(雖然確實有一些試驗性質的設計),似乎是爲了「完備」而「完備」。
如果問學生真正需要什麼,我想答案還是「系統觀」,知道計算機是由哪些部分構成的,知道這些部分之間的邊界和接口;當運行一條指令時,能想象它從編譯器一路被翻譯到機器,再從取指到訪存的過程。《Computer Organization and Design》那本書裏提到的「七個偉大思想」,特別是抽象,實際上構成了整個計算機學科的主線。可惜這樣的思想,在多數課程中很難被系統地呈現出來,特別是在當前的課程體系下。這些年,許多學校都在「減課」。課程數量減少,實驗負擔減少,學生有了更多時間自主發展。但計算機是一門工程爲先的學科。工程的基礎如果鋪得太窄,後面的系統觀就難以建立。倒是我當年學編譯原理、彙編語言、形式語言與自動機、嵌入式系統的時候,反而更容易看到不同層次之間的聯繫,也更容易體會到計算機系統作爲一個整體的精巧。
到了LLM的時代,這個問題更突出。今天的AI已經能取代很多老師了,能回到老師們回答不出來的問題;當然也能取代學生,做作業,特別是編程作業的能力遠超所有學生。但我認爲,AI無法替學生形成系統觀——系統觀不能從文本里得到。這是一種長期訓練出來的直覺,需要看過真實的系統,做過實驗,犯過錯誤。這恰恰是老師所能提供的。
計算機本應是一個充滿邏輯之美、工程之美的學科,卻會被教成一堆令人望而卻步的名詞表。我沒想好這門課究竟應該怎麼改。教材可以換,實驗可以換,考覈方式也可以換,這些都只是表層。但一定得改,不然下一代學生依舊要重複今天的困惑。畢竟,這門課承載着我們理解計算機的起點,而起點錯了,後面便很難再走穩。
作者: Erik Gazi