靈致 發(fā)表于 2005-10-31 16:17:00
自20 世紀40年代世界第一臺現代計算機在美國誕生以來(lái),美國一直執全球計算機學(xué)界之牛耳,這同時(shí)也是美國計算機產(chǎn)業(yè)界占據絕對優(yōu)勢的重要原因之一。我們成批量地引進(jìn)的國外眾多優(yōu)秀教材絕大多數也都來(lái)自美國。計算機學(xué)科仍然在高速發(fā)展,與此對應的計算機人才培養模式也在不斷變化,密切關(guān)注和跟蹤國外尤其是美國名校的教學(xué)新動(dòng)態(tài)乃至培養思路和教育思想,應該是非常有意義的。
本文即選擇了美國計算機學(xué)科最負盛名的五所高校,對目前各校計算機科學(xué)(Computer Science)專(zhuān)業(yè)的本科教學(xué)體系進(jìn)行了一些分析。
斯坦福大學(xué)
斯坦福大學(xué)擁有獨立的計算機科學(xué)系。瀏覽該校的教學(xué)手冊,最具特色的恐怕要算多門(mén)科普性計算機知識講座了,一般有兩到三個(gè)單元,涉及面非常之廣,從量子計算到數字演員,從計算科學(xué)的偉大思想到網(wǎng)絡(luò )安全,從網(wǎng)上拍賣(mài)到使用元編譯發(fā)現大型開(kāi)放源代碼軟件中的大量錯誤,其中還不乏對技術(shù)烏托邦、斯諾“兩種文化”、計算機面臨的困境以及迅速發(fā)展所帶來(lái)的諸多問(wèn)題的思考。開(kāi)課的老師陣容強大,基本上都是響當當的名教授,甚至包括圖靈獎得主John McCarthy。用這種講座代替計算機科學(xué)導論性質(zhì)的專(zhuān)門(mén)課程,可以充分展示計算機科學(xué)的豐富內涵,使學(xué)生較早地了解學(xué)科的輪廓和脈絡(luò ),對于開(kāi)闊學(xué)生視野,啟發(fā)學(xué)生的學(xué)習興趣也大有好處。由于美國大學(xué)中專(zhuān)業(yè)的選擇非常靈活,而近年來(lái)計算機學(xué)科招生受行業(yè)影響流失嚴重(這種情況甚至驚動(dòng)了比爾·蓋茨, 2004年微軟到各大高校招兵買(mǎi)馬時(shí),他每站必到,利用自己的明星效應,大講計算機學(xué)科的美妙前景),可以想象,這種講座同樣也肩負著(zhù)吸引學(xué)生選擇計算機專(zhuān)業(yè)的重大使命。
斯坦福大學(xué)典型的低年級課程設置如表1所示。
表1 斯坦福大學(xué)低年級主要課程設置
數學(xué)(至少23個(gè)單元)
數學(xué) 41(課程號,下同) 微積分 I 5
數學(xué) 42 微積分 II 5
統計 116 概率論 3~5
計算機 103 離散結構 4或6
以下任選兩門(mén):
數學(xué) 51 微積分 5
數學(xué) 103/113 線(xiàn)性代數 3
數學(xué) 109 應用群論 3
計算機 157 邏輯和自動(dòng)推理 4
計算機 205 機器人、視覺(jué)和圖形學(xué)數學(xué)方法 3
科學(xué)(至少11個(gè)單元)
物理 53 力學(xué) 4
物理 55 電磁學(xué) 4
其他
工程基礎(至少13個(gè)單元)
計算機 106 程序設計抽象/方法學(xué) 5
工程 40 電子學(xué)基礎 5
選修課
技術(shù)與社會(huì )(3~5個(gè)單元)
進(jìn)一步的課程設置如表2所示。
表2 斯坦福大學(xué)高年級主要課程設置
程序設計(2門(mén)課)
計算機 107(課程號,下同) 程序設計范型 5
計算機 108 面向對象系統設計 4
理論(2門(mén)課)
計算機 154 自動(dòng)機與復雜性理論 4
計算機 161 算法的設計與分析 4
系統(3門(mén)課)
電子電氣 108B或282 數字系統或計算機體系結構 4
計算機 編譯原理 3
計算機 計算機網(wǎng)絡(luò ) 3
計算機 操作系統 3
應用(選2門(mén)課)
計算機 人工智能 3~4
計算機 數據庫 3
計算機 圖形學(xué) 3
項目(1門(mén)課)
計算機 至少3個(gè)單元
限選課(多門(mén))
加州大學(xué)伯克利分校
伯克利的課程設置也有很多獨樹(shù)一幟的地方,尤其是在專(zhuān)業(yè)基礎課方面,除了有專(zhuān)業(yè)導引課程“計算機科學(xué)專(zhuān)題”之外,對于沒(méi)有編程經(jīng)驗的學(xué)生,第一門(mén)編程課是符號編程入門(mén),采用LISP語(yǔ)言。有一定編程經(jīng)驗或者有自學(xué)能力的學(xué)生,可以選擇多種語(yǔ)言和環(huán)境的自主學(xué)習(Self-paced)課程,包括C、 Fortran、C++、Java,以及UNIX的使用等,這種多元化與伯克利計算機科學(xué)與電子電氣工程同系有關(guān)。但是所有學(xué)生在第二學(xué)期都要學(xué)習一組獨特的基礎課:61A“計算機程序的結構與解釋”,采用MIT Abelson等編著(zhù)的同名教材(中譯本機械工業(yè)出版社出版,清華大學(xué)出版社出版了影印版);61B“數據結構”(教材采用自編講義);61C“計算機結構”(Machine Structures),采用Hennessy的《計算機組織與設計》(中譯本清華大學(xué)出版社出版,機械工業(yè)出版社出版了影印版)。這項規定就是轉校生也不例外,可見(jiàn)其中蘊涵了伯克利多年的教學(xué)經(jīng)驗結晶。
伯克利其他比較有特點(diǎn)的課程還有:將離散數學(xué)和概率論結合講授的CS70,主講是名教授 Christos Papadimitriou;CS98-1 編程練習課,以主要大學(xué)生編程競賽中的賽題為授課素材;CS 169 軟件工程直接用Kent Beck的《極限編程》(人民郵電出版社出版了中譯本)作為教材,非常超前,但是既然連Pressman的《軟件工程:實(shí)踐者方法》新版中敏捷方法都已經(jīng)成為重頭戲,既然IEEE都已經(jīng)開(kāi)始制定敏捷方法相關(guān)標準,這種課程選材也就不顯得那么駭世驚俗了。除了軟件工程課程常見(jiàn)內容外,教學(xué)側重實(shí)際,貫穿了極限編程的思想,涵蓋UML、JUnit單元測試、軟件架構、設計模式和反模式、重構、CVS版本控制、系統和集成測試,最后要求完成一個(gè)實(shí)際產(chǎn)品,并進(jìn)行演示。
UIUC(伊利諾依大學(xué)厄班納-香檳分校)
UIUC的計算機科學(xué)專(zhuān)業(yè)創(chuàng )建于1972年,到1986年基本定型,十多年來(lái)幾乎沒(méi)有什么變化。其教學(xué)體系如圖1所示。
圖1 UIUC改革前的計算機科學(xué)課程體系
其中,數值分析方向課程中,Math225為矩陣論,CS257為數值方法,CS35x代表數值分析導論、常微分數值方法、偏微分與數值逼近和數值線(xiàn)性代數;
理論方向課程中,CS173為離散結構,CS273為計算理論,CS37x包括算法、形式方法、程序驗證;
人工智能方向課程中,CS348為人工智能導論,CS34x包括機器人、機器學(xué)習與模式識別;
軟件方向,CS125為計算機科學(xué)導論,CS225為數據結構與軟件工程原理,CS31x包括數據庫、圖形學(xué)、多媒體,CS32x包括軟件工程、操作系統設計、分布式系統、編程語(yǔ)言與編譯器、并行計算、實(shí)時(shí)系統、編譯器構造、編程語(yǔ)言設計;
硬件方向課程中,CS231為計算機體系結構I,CS232為計算機體系結構II,CS33x包括計算機組成、VLSI系統與邏輯設計、VLSI系統設計、通信網(wǎng)絡(luò )、嵌入式體系架構與軟件。
可以看到,處在圖1中最下面的課程基本上都是在多門(mén)中選擇一至三門(mén),整個(gè)體系脈絡(luò )清晰,具有很高的靈活性。與斯坦福不同的是,UIUC的計算機科學(xué)導論課程比較簡(jiǎn)單,只有一門(mén)為新生開(kāi)的計算機科學(xué)導向課(CS100),而且并非必修。名為“計算機科學(xué)導論”的CS125實(shí)際上是以Java語(yǔ)言為主的編程入門(mén)課,涵蓋了一些算法的內容。此外還有與之配套的實(shí)驗課。當然,系里所開(kāi)的許多面向高年級和研究生層次的講座是對低年級開(kāi)放的。
2003年,在工程院院長(cháng)David Daniel的倡導下,計算機系對教學(xué)計劃進(jìn)行了改革,以反映目前社會(huì )、行業(yè)和技術(shù)的發(fā)展趨勢。主要的變化有:
* 在必修要求中增加了兩門(mén)編程課:CS241 系統編程,采用Gary Nutt的《操作系統》作為主教材,Stevens的《Unix環(huán)境高級編程》作為編程教材;CS242 程序設計實(shí)驗(Programming Studio),教學(xué)大綱基本上以Kernighan的《程序設計實(shí)踐》為藍本(以上教材機械工業(yè)出版社均出版了中譯本和影印版)。
* 必修要求中增加了一年的高級項目,強調團隊合作和軟件工程實(shí)踐,包括文檔寫(xiě)作、口頭表達、項目規劃與管理等,實(shí)際上是在實(shí)踐中學(xué)習軟件工程。這門(mén)課也可以用兩學(xué)期的軟件工程或者一年的高級論文代替。仍然充分保留了靈活性,有利于因材施教。
* 增加了CS173 離散結構的學(xué)時(shí),部分原CS273的內容移到這里,同時(shí)CS273又新增了原CS375的內容。這實(shí)際上是提高了對計算機理論的要求。
* 在專(zhuān)業(yè)課程中增加了數據挖掘、信息檢索和高級圖形學(xué)。
CMU(卡內基梅隆大學(xué))
與MIT、伯克利等學(xué)校計算機科學(xué)仍然和電子與電氣工程同處一系不同,CMU的計算機科學(xué)系成立于1965年,是全美最早的,如今它已經(jīng)升格為計算機科學(xué)學(xué)院。其研究生項目中除了機器人方向與硬件關(guān)系較多之外,其他基本上都是純軟的。從這個(gè)意義上來(lái)說(shuō),CMU的教學(xué)體系對于偏軟的計算機科學(xué)系應該有較大的借鑒意義。
CMU 的教學(xué)手冊上沒(méi)有從傳統意義上針對計算機科學(xué)專(zhuān)業(yè)學(xué)生的導論課,雖然有名為“計算機科學(xué)偉大思想”的兩學(xué)期課程,但是從內容上看應該是離散數學(xué)的替代,因為此外CMU并沒(méi)有其他離散數學(xué)方面的課程。此課程沒(méi)有教材,內容比傳統離散數學(xué)要靈活得多,涉及概率、代數、算法、加密理論、復雜性理論、博弈論等,非常注重學(xué)習的趣味性和實(shí)用性。
與其他名校相同,CMU對程序設計的重視也給人留下很深印象:本土新生的第一堂課就是“初中級程序設計”,直接講授Java。然后是中高級程序設計(Java)、C語(yǔ)言編程技巧、高級編程實(shí)踐(Java)、程序設計原理(用SML語(yǔ)言講授)。
目前計算機科學(xué)專(zhuān)業(yè)教學(xué)計劃中的一個(gè)難點(diǎn),是硬件課程的設置問(wèn)題。硬件知識體系本身非常豐富,但是硬件課程多了,又削弱了計算機科學(xué)專(zhuān)業(yè)的特色。CMU在這一問(wèn)題上是怎樣處理的呢?計算機科學(xué)學(xué)院的現任院長(cháng)Randal E. Bryant 親自給出了回答,他用15~213“計算機系統導論”一門(mén)課(12個(gè)單元)完成了硬件知識的教學(xué)。這項教學(xué)改革的成果就是一本厚達900多頁(yè)的書(shū):《Computer Systems: A Programmer‘s Perspective》(中譯本《深入理解計算機系統》已經(jīng)由中國電力出版社出版)一書(shū)。他在該書(shū)的序言中說(shuō):
“本課程的宗旨是用一種不同的方式向學(xué)生介紹計算機。因為,我們的學(xué)生中幾乎沒(méi)有人有機會(huì )構造計算機系統。而大多數學(xué)生,甚至是計算機工程師,也要求能日常使用計算機和編寫(xiě)計算機程序。所以我們決定從程序員的角度來(lái)講解系統,并采用這樣的過(guò)濾方法:我們只討論那些影響用戶(hù)級C程序的性能、正確性或實(shí)用性的主題。
比如,我們排除了諸如硬件加法器和總線(xiàn)設計這樣的主題。雖然我們談及了機器語(yǔ)言,但是不關(guān)注如何編寫(xiě)匯編語(yǔ)言,而是關(guān)心編譯器怎樣翻譯C的各種構造,比如指針、循環(huán)、過(guò)程調用和返回,以及switch語(yǔ)句。更進(jìn)一步,我們將更廣泛和現實(shí)地看待系統,包括硬件和系統軟件,討論鏈接、加載、進(jìn)程、信號、性能優(yōu)化、評估、I/O以及網(wǎng)絡(luò )與并發(fā)編程。
這種做法使得我們講授本課程的方式對學(xué)生來(lái)講既實(shí)用、具體,又能實(shí)踐,同時(shí)也非常利于調動(dòng)學(xué)生的積極性?!?div style="height:15px;">
網(wǎng)站上的一些隨書(shū)配套實(shí)驗,也獨具匠心。因此此書(shū)的成功是水到渠成的。根據配套網(wǎng)站上的列表,它已經(jīng)被全球80多所院校采用作為教材。
MIT(麻省理工學(xué)院)
MIT的課程設置,只能用其學(xué)生起點(diǎn)高來(lái)解釋。該校沒(méi)有典型意義上的計算機科學(xué)專(zhuān)業(yè),偏軟的只有理論計算機科學(xué)和人工智能及其應用兩個(gè)專(zhuān)業(yè)。因此沒(méi)有類(lèi)似于其他學(xué)校的導論課程。
在MIT 的電子電氣工程與計算機科學(xué)系中,所有學(xué)生都要參加如下四門(mén)課程:6.001“計算機程序的結構與解釋”,當然與伯克利相同,采用的是Abelson等編著(zhù)的同名教材;6.002“電路與電子學(xué)”;6.003“信號與系統”(自編講義);6.004 “計算結構”(Computation Structures),與伯克利的61C“計算機結構”對等(教材是自編課件)。此外有兩門(mén)專(zhuān)業(yè)基礎數學(xué)課:“概率系統分析”(教授自編教材)和“計算機科學(xué)數學(xué)”,后者的教材是國外院校普遍采用的Rosen所著(zhù)《離散數學(xué)及其應用》(中文版由機械工業(yè)出版社出版)。
對MIT的學(xué)生而言,實(shí)驗課程有多種選擇:電氣工程和計算機科學(xué)實(shí)驗,模擬電子實(shí)驗,數字系統實(shí)驗,微機項目實(shí)驗,半導體設備項目實(shí)驗。此外,無(wú)論何種專(zhuān)業(yè),都有軟件工程實(shí)驗課。值得注意的是,本科生各專(zhuān)業(yè)的必修課程中并沒(méi)有軟件工程課程。也就是說(shuō),軟件工程的內容都在實(shí)踐中完成了。帶軟件工程實(shí)驗課的是因為提出Liskov 替換原則而知名的女教授Barbara Liskov,她剛剛獲得了2004年度的馮·諾依曼獎。作為美國工程院和藝術(shù)科學(xué)院的雙院士,她幾十年在軟件開(kāi)發(fā)研究方面的經(jīng)驗,將有力地保證這門(mén)實(shí)驗課程的質(zhì)量。
分析與總結
由上面的材料可以看出,各個(gè)學(xué)校的教學(xué)體系之間還是有不小差異的。這首先得歸因于歷史沿革形成的專(zhuān)業(yè)側重、機構設置上的不同。其中MIT算是一極,由于和電子電氣專(zhuān)業(yè)深深地融合,計算機專(zhuān)業(yè)帶有很強的“硬派”色彩。而CMU可以算作另一極,計算機科學(xué)有自己的獨立學(xué)院,非常罕見(jiàn),因此它的課程設置“軟化嚴重”——與硬件相關(guān)的只用一門(mén)課就解決了。UIUC和斯坦福由于都擁有獨立的科系,所以可以歸入后一陣營(yíng)。伯克利可以認為處于兩極中間,但是仔細分析起來(lái),它的計算機科學(xué)專(zhuān)業(yè)目前雖然仍屬于電子電氣和計算機科學(xué)系,但是有相當大的獨立性,1973年創(chuàng )立以來(lái),一直有自己的主席和教學(xué)安排,所以離后者更近一些。
此外,各校在專(zhuān)業(yè)導入課程的設置上差別也非常明顯?;旧峡梢苑譃槿?lèi)。按 IEEE-ACM《Computer Curricula 2001》(以下簡(jiǎn)稱(chēng)CC2001)的分法,斯坦福屬于廣度優(yōu)先(有明確的注重廣度的導引課程),MIT的屬于函數為先(采用函數式語(yǔ)言),CMU和 UIUC屬于對象為先(直接采用Java)。伯克利有些特殊,它有導引課,但是廣度稍差,緊接著(zhù)又采用函數語(yǔ)言,同時(shí)開(kāi)設學(xué)生自學(xué)為主可以任選的多種語(yǔ)言課程,屬于混合多元型。應該說(shuō)各個(gè)學(xué)校在剛入門(mén)時(shí)如何調動(dòng)學(xué)生積極性,培養對專(zhuān)業(yè)的感情上都有自己的思考。無(wú)論哪種類(lèi)型,將課堂變得有趣,能夠容納更多計算機科學(xué)的方面,都已經(jīng)成為一種趨勢。
無(wú)論如何,各校存在的差異并不妨礙各自培養出同樣優(yōu)秀的人才,這也給我們提供了一種有益的啟示,辦學(xué)思路和方法應該是因地制宜的。
當然,總的來(lái)說(shuō),各學(xué)校之間的共性還是主要的。歸納起來(lái),有這么幾個(gè)特點(diǎn),值得我們思考:
1. 硬件課程整體在減少
偏軟類(lèi)的三所院校中,CMU最為徹底,硬件課程只有一門(mén)課,而UIUC也只有兩門(mén)必修(兩門(mén)體系結構),斯坦福也是兩門(mén)(電子學(xué)、體系結構或數字系統)。其中的原因,前面引述的Randal E. Bryant所言作出了解釋?zhuān)吘褂嬎銠C科學(xué)需要關(guān)注的在計算機系統層次中已經(jīng)越來(lái)越高,底層越來(lái)越變得透明了。事實(shí)上,CC2001中制定的硬件課程也只有一門(mén)。而國內目前一般還開(kāi)設數字邏輯、微機原理、計算機組成與結構、微機實(shí)驗等硬件類(lèi)課程。
2. 程序設計日益重視
在CMU, UIUC和斯坦福,必修的程序設計類(lèi)課程往往在四五門(mén)左右。伯克利加起來(lái)也有四門(mén)。MIT雖然沒(méi)有大量前導性的編程課程,但是由于在后面計算機系統工程、計算機語(yǔ)言工程、軟件工程實(shí)驗、Web軟件工程諸課程都有實(shí)際的項目要完成,所以實(shí)際學(xué)時(shí)也很多,UIUC的改革更說(shuō)明了這一點(diǎn)。同時(shí),還出現了強調提高程序設計技巧,與軟件工程環(huán)境和工具相結合,提倡團隊合作,高級程序設計課程與數據結構、算法課融合的趨勢。這方面的代表有斯坦福。該校副系主任Eric Roberts曾執教入門(mén)類(lèi)課程多年,總結了一套在語(yǔ)言教學(xué)中融入軟件工程和現代程序設計觀(guān)念,結合算法和數據結構教學(xué)的經(jīng)驗。其成果就是《C語(yǔ)言的科學(xué)和藝術(shù)》和《C程序設計的抽象思維》兩本書(shū)(影印版已由機械工業(yè)出版社出版)。作為CC2001工作組兩位主席之一,他在C語(yǔ)言教學(xué)中強調庫與接口設計、編程風(fēng)格的重要性,并進(jìn)而介紹抽象、封裝的概念,產(chǎn)生了很大影響。反觀(guān)國內目前很多學(xué)校的語(yǔ)言教學(xué)和程序設計教學(xué),不僅學(xué)時(shí)偏少,與其他課程孤立,而且脫離實(shí)際,造成語(yǔ)言學(xué)習和相關(guān)專(zhuān)業(yè)課學(xué)習都變得非??菰?,不利于調動(dòng)學(xué)生的積極性。
應該說(shuō),這些名校的教學(xué)體系、教材和經(jīng)驗都是豐富的寶藏,值得好好挖掘,比如每門(mén)核心課程的教學(xué)法,實(shí)驗課程的安排,各門(mén)課程的銜接,大型項目的選材等。