申請貼士:美名校計算機科學本科現狀 2

2003年,在工程院院長david daniel的倡導下,計算機系對教學計畫進行了改革,以反映目前社會、行業和技術的發展趨勢。主要的變化有:

* 在必修要求中增加了兩門編程課:cs241 系統編程,採用gary nutt的《作業系統》作為主教材,stevens的《unix環境高級編程》作為編程教材;cs242 程式設計實驗(programming studio),教學大綱基本上以kernighan的《程式設計實踐》為藍本(以上教材機械工業出版社均出版了中譯本和影印版)。

* 必修要求中增加了一年的高級項目,強調團隊合作和軟體工程實踐,包括文檔寫作、口頭表達、項目規劃與管理等,實際上是在實踐中學習軟體工程。這門課也可以用兩學期的軟體工程或者一年的高級論文代替。仍然充分保留了靈活性,有利於因材施教。

* 增加了cs173 離散結構的學時,部分原cs273的內容移到這裡,同時cs273又新增了原cs375的內容。這實際上是提高了對計算機理論的要求。

* 在專業課程中增加了數據挖掘、信息檢索和高級圖形學。

cmu(卡內基梅隆大學)

與mit、伯克利等學校計算機科學仍然和電子與電氣工程同處一系不同,cmu的計算機科學系成立於1965年,是全美最早的,如今它已經升格為計算機科學學院。其研究生項目中除了機器人方向與硬體關係較多之外,其他基本上都是純軟的。從這個意義上來說,cmu的教學體系對於偏軟的計算機科學系應該有較大的借鑑意義。

cmu的教學手冊上沒有從傳統意義上針對計算機科學專業學生的導論課,雖然有名為“計算機科學偉大思想”的兩學期課程,但是從內容上看應該是離散數學的替代,因為此外cmu並沒有其他離散數學方面的課程。此課程沒有教材,內容比傳統離散數學要靈活得多,涉及機率、代數、算法、加密理論、複雜性理論、博弈論等,非常注重學習的趣味性和實用性。

與其他名校相同,cmu對程式設計的重視也給人留下很深印象:本土新生的第一堂課就是“國中級程式設計”,直接講授java。然後是中高級程式設計(java)、c語言編程技巧、高級編程實踐(java)、程式設計原理(用sml語言講授)。

目前計算機科學專業教學計畫中的一個難點,是硬體課程的設定問題。硬體知識體系本身非常豐富,但是硬體課程多了,又削弱了計算機科學專業的特色。cmu在這一問題上是怎樣處理的呢?計算機科學學院的現任院長randal e. bryant 親自給出了回答,他用15~213“計算機系統導論”一門課(12個單元)完成了硬體知識的教學。這項教學改革的成果就是一本厚達900多頁的書:《computer systems: a programmer's perspective》(中譯本《深入理解計算機系統》已經由中國電力出版社出版)一書。他在該書的序言中說:

“本課程的宗旨是用一種不同的方式向學生介紹計算機。因為,我們的學生中幾乎沒有人有機會構造計算機系統。而大多數學生,甚至是計算機工程師,也要求能日常使用計算機和編寫電腦程式。所以我們決定從程式設計師的角度來講解系統,並採用這樣的過濾方法:我們只討論那些影響用戶級c程式的性能、正確性或實用性的主題。

比如,我們排除了諸如硬體加法器和匯流排設計這樣的主題。雖然我們談及了機器語言,但是不關注如何編寫彙編語言,而是關心編譯器怎樣翻譯c的各種構造,比如指針、循環、過程調用和返回,以及switch語句。更進一步,我們將更廣泛和現實地看待系統,包括硬體和系統軟體,討論連結、載入、進程、信號、性能最佳化、評估、i/o以及網路與並發編程。

這種做法使得我們講授本課程的方式對學生來講既實用、具體,又能實踐,同時也非常利於調動學生的積極性。”

網站上的一些隨書配套實驗,也獨具匠心。因此此書的成功是水到渠成的。根據配套網站上的列表,它已經被全球80多所院校採用作為教材。

mit(麻省理工學院)

mit的課程設定,只能用其學生起點高來解釋。該校沒有典型意義上的計算機科學專業,偏軟的只有理論計算機科學和人工智慧及其套用兩個專業。因此沒有類似於其他學校的導論課程。

在mit的電子電氣工程與計算機科學系中,所有學生都要參加如下四門課程:6.001“電腦程式的結構與解釋”,當然與伯克利相同,採用的是abelson等編著的同名教材;6.002“電路與電子學”;6.003“信號與系統”(自編講義);6.004 “計算結構”(computation structures),與伯克利的61c“計算機結構”對等(教材是自編課件)。此外有兩門專業基礎數學課:“機率系統分析”(教授自編教材)和“計算機科學數學”,後者的教材是國外院校普遍採用的rosen所著《離散數學及其套用》(中文版由機械工業出版社出版)。

對mit的學生而言,實驗課程有多種選擇:電氣工程和計算機科學實驗,模擬電子實驗,數字系統實驗,微機項目實驗,半導體設備項目實驗。此外,無論何種專業,都有軟體工程實驗課。值得注意的是,本科生各專業的必修課程中並沒有軟體工程課程。也就是說,軟體工程的內容都在實踐中完成了。帶軟體工程實驗課的是因為提出liskov替換原則而知名的女教授barbara liskov,她剛剛獲得了2004年度的馮·諾依曼獎。作為美國工程院和藝術科學院的雙院士,她幾十年在軟體開發研究方面的經驗,將有力地保證這門實驗課程的質量。

分析與總結

由上面的材料可以看出,各個學校的教學體系之間還是有不小差異的。這首先得歸因於歷史沿革形成的專業側重、機構設定上的不同。其中mit算是一極,由於和電子電氣專業深深地融合,計算機專業帶有很強的“硬派”色彩。而cmu可以算作另一極,計算機科學有自己的獨立學院,非常罕見,因此它的課程設定“軟化嚴重”——與硬體相關的只用一門課就解決了。uiuc和斯坦福由於都擁有獨立的科系,所以可以歸入後一陣營。伯克利可以認為處於兩極中間,但是仔細分析起來,它的計算機科學專業目前雖然仍屬於電子電氣和計算機科學系,但是有相當大的獨立性,1973年創立以來,一直有自己的主席和教學安排,所以離後者更近一些。

此外,各校在專業導入課程的設定上差別也非常明顯。基本上可以分為三類。按ieee-acm《computer curricula 2001》(以下簡稱cc2001)的分法,斯坦福屬於廣度優先(有明確的注重廣度的導引課程),mit的屬於函式為先(採用函式式語言),cmu和uiuc屬於對象為先(直接採用java)。伯克利有些特殊,它有導引課,但是廣度稍差,緊接著又採用函式語言,同時開設學生自學為主可以任選的多種語言課程,屬於混合多元型。應該說各個學校在剛入門時如何調動學生積極性,培養對專業的感情上都有自己的思考。無論哪種類型,將課堂變得有趣,能夠容納更多計算機科學的方面,都已經成為一種趨勢。

無論如何,各校存在的差異並不妨礙各自培養出同樣優秀的人才,這也給我們提供了一種有益的啟示,辦學思路和方法應該是因地制宜的。

當然,總的來說,各學校之間的共性還是主要的。歸納起來,有這么幾個特點,值得我們思考:

1. 硬體課程整體在減少

偏軟類的三所院校中,cmu最為徹底,硬體課程只有一門課,而uiuc也只有兩門必修(兩門體系結構),斯坦福也是兩門(電子學、體系結構或數字系統)。其中的原因,前面引述的randal e. bryant所言作出了解釋,畢竟計算機科學需要關注的在計算機系統層次中已經越來越高,底層越來越變得透明了。事實上,cc2001中制定的硬體課程也只有一門。而國內目前一般還開設數字邏輯、微機原理、計算機組成與結構、微機實驗等硬體類課程。

2. 程式設計日益重視

在cmu,uiuc和斯坦福,必修的程式設計類課程往往在四五門左右。伯克利加起來也有四門。mit雖然沒有大量前導性的編程課程,但是由於在後面計算機系統工程、計算機語言工程、軟體工程實驗、web軟體工程諸課程都有實際的項目要完成,所以實際學時也很多,uiuc的改革更說明了這一點。同時,還出現了強調提高程式設計技巧,與軟體工程環境和工具相結合,提倡團隊合作,高級程式設計課程與數據結構、算法課融合的趨勢。這方面的代表有斯坦福。該校副系主任eric roberts曾執教入門類課程多年,總結了一套在語言教學中融入軟體工程和現代程式設計觀念,結合算法和數據結構教學的經驗。其成果就是《c語言的科學和藝術》和《c程式設計的抽象思維》兩本書(影印版已由機械工業出版社出版)。作為cc2001工作組兩位主席之一,他在c語言教學中強調庫與接口設計、編程風格的重要性,並進而介紹抽象、封裝的概念,產生了很大影響。反觀國內目前很多學校的語言教學和程式設計教學,不僅學時偏少,與其他課程孤立,而且脫離實際,造成語言學習和相關專業課學習都變得非常枯燥,不利於調動學生的積極性。

應該說,這些名校的教學體系、教材和經驗都是豐富的寶藏,值得好好挖掘,比如每門核心課程的教學法,實驗課程的安排,各門課程的銜接,大型項目的選材等。