自20世紀40年代世界第一台現代計算機在美國誕生以來,美國一直執全球計算機學界之牛耳,這同時也是美國計算機產業界占據絕對優勢的重要原因之一。我們成批量地引進的國外眾多優秀教材絕大多數也都來自美國。計算機學科仍然在高速發展,與此對應的計算機人才培養模式也在不斷變化,密切關注和跟蹤國外尤其是美國名校的教學新動態乃至培養思路和教育思想,應該是非常有意義的。
本文即選擇了美國計算機學科最負盛名的五所高校,對目前各校計算機科學(computer science)專業的本科教學體系進行了一些分析。
史丹福大學
史丹福大學擁有獨立的計算機科學系。瀏覽該校的教學手冊,最具特色的恐怕要算多門科普性計算機知識講座了,一般有兩到三個單元,涉及面非常之廣,從量子計算到數字演員,從計算科學的偉大思想到網路安全,從網上拍賣到使用元編譯發現大型開放原始碼軟體中的大量錯誤,其中還不乏對技術烏托邦、斯諾“兩種文化”、計算機面臨的困境以及迅速發展所帶來的諸多問題的思考。開課的老師陣容強大,基本上都是響噹噹的名教授,甚至包括圖靈獎得主john mccarthy。用這種講座代替計算機科學導論性質的專門課程,可以充分展示計算機科學的豐富內涵,使學生較早地了解學科的輪廓和脈絡,對於開闊學生視野,啟發學生的學習興趣也大有好處。由於美國大學中專業的選擇非常靈活,而近年來計算機學科招生受行業影響流失嚴重(這種情況甚至驚動了比爾·蓋茨,2004年微軟到各大高校招兵買馬時,他每站必到,利用自己的明星效應,大講計算機學科的美妙前景),可以想像,這種講座同樣也肩負著吸引學生選擇計算機專業的重大使命。
史丹福大學典型的低年級課程設定如表1所示。
表1 史丹福大學低年級主要課程設定
數學(至少23個單元)
數學 41(課程號,下同) 微積分 i 5
數學 42 微積分 ii 5
統計 116 機率論 3~5
計算機 103 離散結構 4或6
以下任選兩門:
數學 51 微積分 5
數學 103/113 線性代數 3
數學 109 套用群論 3
計算機 157 邏輯和自動推理 4
計算機 205 機器人、視覺和圖形學數學方法 3
科學(至少11個單元)
物理 53 力學 4
物理 55 電磁學 4
其他
工程基礎(至少13個單元)
計算機 106 程式設計抽象/方法學 5
工程 40 電子學基礎 5
選修課
技術與社會(3~5個單元)
進一步的課程設定如表2所示。
表2 史丹福大學高年級主要課程設定
程式設計(2門課)
計算機 107(課程號,下同) 程式設計范型 5
計算機 108 面向對象系統設計 4
理論(2門課)
計算機 154 自動機與複雜性理論 4
計算機 161 算法的設計與分析 4
系統(3門課)
電子電氣 108b或282 數字系統或計算機體系結構 4
計算機 編譯原理 3
計算機 計算機網路 3
計算機 作業系統 3
套用(選2門課)
計算機 人工智慧 3~4
計算機 資料庫 3
計算機 圖形學 3
項目(1門課)
計算機 至少3個單元
限選課(多門)
加州大學伯克利分校
伯克利的課程設定也有很多獨樹一幟的地方,尤其是在專業基礎課方面,除了有專業導引課程“計算機科學專題”之外,對於沒有編程經驗的學生,第一門編程課是符號編程入門,採用lisp語言。有一定編程經驗或者有自學能力的學生,可以選擇多種語言和環境的自主學習(self-paced)課程,包括c、fortran、c++、java,以及unix的使用等,這種多元化與伯克利計算機科學與電子電氣工程同系有關。但是所有學生在第二學期都要學習一組獨特的基礎課:61a“電腦程式的結構與解釋”,採用mit abelson等編著的同名教材(中譯本機械工業出版社出版,清華大學出版社出版了影印版);61b“數據結構”(教材採用自編講義);61c“計算機結構”(machine structures),採用hennessy的《計算機組織與設計》(中譯本清華大學出版社出版,機械工業出版社出版了影印版)。這項規定就是轉校生也不例外,可見其中蘊涵了伯克利多年的教學經驗結晶。
伯克利其他比較有特點的課程還有:將離散數學和機率論結合講授的cs70,主講是名教授christos papadimitriou;cs98-1 編程練習課,以主要大學生編程競賽中的賽題為授課素材;cs 169 軟體工程直接用kent beck的《極限編程》(人民郵電出版社出版了中譯本)作為教材,非常超前,但是既然連pressman的《軟體工程:實踐者方法》新版中敏捷方法都已經成為重頭戲,既然ieee都已經開始制定敏捷方法相關標準,這種課程選材也就不顯得那么駭世驚俗了。除了軟體工程課程常見內容外,教學側重實際,貫穿了極限編程的思想,涵蓋uml、junit單元測試、軟體架構、設計模式和反模式、重構、cvs版本控制、系統和集成測試,最後要求完成一個實際產品,並進行演示。
uiuc(伊利諾依大學厄班納-香檳分校)
uiuc的計算機科學專業創建於1972年,到1986年基本定型,十多年來幾乎沒有什麼變化。其教學體系如圖1所示。
其中,數值分析方向課程中,math225為矩陣論,cs257為數值方法,cs35x代表數值分析導論、常微分數值方法、偏微分與數值逼近和數值線性代數;
理論方向課程中,cs173為離散結構,cs273為計算理論,cs37x包括算法、形式方法、程式驗證;
人工智慧方向課程中,cs348為人工智慧導論,cs34x包括機器人、機器學習與模式識別;
軟體方向,cs125為計算機科學導論,cs225為數據結構與軟體工程原理,cs31x包括資料庫、圖形學、多媒體,cs32x包括軟體工程、作業系統設計、分散式系統、程式語言與編譯器、並行計算、實時系統、編譯器構造、程式語言設計;
硬體方向課程中,cs231為計算機體系結構i,cs232為計算機體系結構ii,cs33x包括計算機組成、vlsi系統與邏輯設計、vlsi系統設計、通信網路、嵌入式體系架構與軟體。
可以看到,處在圖1中最下面的課程基本上都是在多門中選擇一至三門,整個體系脈絡清晰,具有很高的靈活性。與斯坦福不同的是,uiuc的計算機科學導論課程比較簡單,只有一門為新生開的計算機科學導向課(cs100),而且並非必修。名為“計算機科學導論”的cs125實際上是以java語言為主的編程入門課,涵蓋了一些算法的內容。此外還有與之配套的實驗課。當然,系裡所開的許多面向高年級和研究生層次的講座是對低年級開放的。