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