在我國著名學者查建中教授和汕頭大學顧佩華副校長的大力倡導下,在教育部有關部門的大力支持下,90年代末期發源自美國麻省理工(MIT)的CDIO工程教育模式獲得我國大批教育機構的重視,并在很多大學和專業試行。本文擬探討這一模式能否在我國計算機工程教育中借鑒,以及相應的實驗建設應該注意哪些問題。
大凡歐美模式,一律都是歐美人士或業界根據歐美文化和體制的特點,針對歐美社會的問題(例如這里是工程教育問題)所提出的解決方案,其是否有效的標準也是根據歐美社會實踐來判斷的,如果生搬丑中國就可能消化不良,其效果適得其反。如果我們的主管部門、學校和企業一律照抄歐美模式,結果只會造成金錢、人力和設備的浪費,卻得不到什么效果。
回到CDIO正題:我們應該學習外國經驗,但務必要明了中西文化差異、中西體制差異以及教育體制差異,什么該學、什么不該學以及該學的要怎樣學,走出適合中國國情的計算機教育之路。
本文討論以下6個問題:
(1)正確理解CDIO本意及其歐美教育背景;
(2)服務貿易時代正確對待軟件產業及教育;
(3)借CDIO東風解決中國教育的根本問題:
(4)中國如何培養出自己的軟件系統架構師;
(5)計算機教育首倡培養學生的主觀能動性:
(6)教學相長、校企結合、共創CDIO環境。
1 正確理解CDIO本意及其歐美教育背景
CDIO于上世紀90年代末發源于美國麻省理工的航空航天工程系(MIT的Aero&Astro),后又發展為國際組織(www.CDIO.org)。查建中教授和顧佩華副校長向我國學界介紹了CDIO的有關理論和實踐,并大力推動我國多家高校組成中國自己的CDIO組織(www.ChinaCDIO.cn)。在比較這兩個組織的網站與發起校美國MIT的網站(http://web.mit.edu/aeroastro/academics/cdio.html)之后,我們就會發現這樣幾條關鍵信息:
(1)MIT的航空航天系于90年代末創立CDIO教育模式,又于2000年聯合三家瑞典大學完善了CDIO模式、創立了12條標準,并于2004年正式創立國際組織,其后續發起單位還包括北美(美國、加拿大)、英國、北歐和南非等國的一些大學。
(2)CDIO模式及其12條標準原則上也適用于其他工程專業。但CDIO國際組織首要強調的專業仍然是航空航天、機械工程和電子工程三大專業。軟件工程并不屬于該國際組織明確宣布的專業,但“軟件(software)”一詞在該組織的諸多工程領域和環境建設宣傳中頻繁出現,分析其原因是:現在無論工科、商科的什么專業都離不開軟件,任何系統(或產品)在其實現階段(即CDIO的“I”)都無法離開軟件。
(3)美國卡內基·梅隆大學和加拿大滑鐵盧大學的計算機教育都強調與產業相結合(http://mse.isri.cmu.edu及www.eng.uwaterloo.ca),其歷史悠久,制度安排也比較完善。實際上,他們都比MIT航空航天系更早地采用了類似CDIO的教育模式,但他們從未用CDIO來稱呼自己的教育模式。

(4)CDIO是構思(Conceive)、設計(Design)、實現(Implement)和運行(Operate)4個英文單詞字頭的連寫,涵蓋了產品(或系統)從構思、研發、應用到反復改進的完整生命周期。幫助學生理解和體驗產品或系統的“完整生命周期”,對發揮其主觀能動性具有極其重要的意義。在全生命周期環境中,學生個人技能、協作精神和創新能力都將獲得全面的發展。
筆者恰好是三十年前去北美留學的,也是我國第一位從那里獲得計算機科學博士學位的學者,并且在計算機教育領域和產業領域供職至今,因此對中、美計算機教育的差異有著比較深刻的認識。筆者認為,中國完全可以在計算機教育領域嘗試CDIO原則,只是我們務必要避免教條主義,務必要根據中國文化特點,根據計算機教育的特點,以及根據世界科技和市場的新發展,專門探索出一套適合中國計算機工程(包括或者主要是軟件工程)教育的模式。
2 服務貿易時代正確對待軟件產業及教育
WTO將計算機軟件劃歸“服務貿易”類別。現代服務貿易是20世紀70年代逐步興起的領域,現在在美國的產業比重已經高達85%。與制造業不同,服務貿易各領域大體有以下幾個特點:
(1)購買前客戶看不到服務;
(2)服務的生產與消費同步;
(3)服務質量具有不穩定性;
(4)客戶是無法儲存服務的。
顯然,航天航空、機械工程和電子工程三大領域都不具備這幾條特點。不難想象,來源于并首先適用于三大首要領域的CDIO模式,其原始形式必須經過一定調整才可能適用于軟件工程領域。這里所需的調整未必是增加了困難。例如MIT航空航天系在其網站上介紹說,為了實施CDIO,他們建設了如圖1所示的“Learning Laboratory”:光這個“CDIO環境”就花費了好幾百萬美金。相比之下,軟件工程環境就不必花那么多錢。我們完全可以根據各個學校當前的財力條件,根據學校的重點專業布局,建設可大可小的環境來滿足CDIO教育模式的需要。
在CDIO的4個環節中,D和I的環境幾乎就是原有的計算機教學條件,只是c和O分別作為用戶的使用需求和系統的運行環境,或者要求師生到現場,或者可以在學校實驗室模擬客戶環境,環境模擬的費用也不高,我們甚至可以鼓勵師生發揮主觀能動性,充分利用實驗室原有條件以及互聯網、開放源代碼等資源,花費不多的資金和精力,就可能建成CDIO環境。這樣做,我們的師生反而成長得更快。
3 借CDIO東風解決中國教育的根本問題
筆者除擔任教職之外,還自2000年起在南開大學的海外公司(南開越洋)兼職。因為公司主要從事海外業務,國內市場上“有經驗”的員工反而不適應我們的業務,因此我們不得不常年招聘應屆畢業生,連骨干員工也都是自己來培養。但十年下來,我們感到國內畢業生(無論是計算機專業還是其他專業)解決問題的能力越來越差,尤其是在問題面前缺乏“主觀能動性”。
作為教育者,筆者對其原因有自己的判斷,那就是從西方搬來的“學位教育”到中國都“走了味”,家長、教師和學生本人都將“學士”、“碩士”和“博士”當成了中國歷史上的“秀才”、“舉人”和“進士”,“十年寒窗苦…暮登天子堂”,完全脫離三大社會實踐,用人單位也往往重學歷、輕能力,培養出來的畢業生只有分數、沒有能力,尤其在面對難題時完全喪失主觀能動性。
在這樣的背景下,筆者特別贊成在計算機教育領域嘗試CDIO模式,因為它向工程領域的師生們特別強調了,一定要對產品或系統的“全生命周期”負責,就是說一定要執行教育方針與生產勞動相結合。針對中國教育問題,CDIO中的C和O最重要:
(1)Conceive就是要我們的學生從客戶或用戶(用戶不一定是“客戶”,而可能是客戶的“員工”或者客戶的“顧客”)的實際需要出發去構思產品或者系統的功能、性能和結構。
90年代初,筆者在美國硅谷領導的工程隊有30多名工程師,其中一半是國內名校的博士、碩士生,另一半是從當地聘請的“洋人”,兩類工程師相比,國內的人好像功課更好一些,但想象力遠遠不及國外的工程師,或者說不能從調研材料出發想象用戶,給不出產品或系統的完善功能定義來。
(2)Operate就是要我們的學生想到,你所設計、研發的系統和產品必須能在客戶或者用戶的環境中運行,滿足他們的實際需要。如果有問題,那你就必須糾正錯誤或改進系統,到其能夠正常運行、完成用戶業務為止。
我國教育所培養的工程師都很重視軟件編程和功能實現,但一般都不關心軟件是否好用,用戶是否容易上手等,嫌這些事情瑣碎、沒有水平。待換到用戶的運行環境,那問題就更多了,甚至暴露原有設計的根本性問題,不做大的改動簡直無法使用。
CDIO的D和I環節往往就是原有教學方式中考核分數之處,但若沒有C和O的目標,學生參加這種考核是很被動的。如果我們的學生能夠理解、想象和掌控C和O這兩個環節,那他在學習D和I時就有了明確的目標,他的主觀能動性就調動起來了。當然,一個產品或者一個系統的全生命周期遠遠不是這樣簡單,CDIO 4個環節往往也難于這樣機械地分割,但我們若能特別注意C和O,那“科考文化”的糟粕就很容易去除,我們的學生也就有機會提高能力了,我們的教員、家長和用人單位也就不會死盯分數了。
4 計算機教育首倡培養學生的主觀能動性
讀過《實踐論》的人們都知道毛澤東的一句名言:“從感性認識而能動地發展到理性認識,又從理性認識而能動地指導革命實踐,改造主觀世界和客觀世界”。
這句話好就好在其中的兩個“能動地”,而我們當今畢業生所普遍缺乏的也正是這兩個“能動性”。CDIO好就好在它恰好涵蓋了這兩個能動。
(1)第一個“能動”是從C到D·I的飛躍:學生在調UpRNKp2E68rXdrnevHjMEYT8qmfqcnqyt3T3fp3aaRs=研客戶需求、占有大量素材之后,就會產生反映客觀實際的“概念”,即客戶到底需要的是什么軟件。有了這樣的概念,他再根據已經掌握的計算機知識(或者補充調研到的計算機知識)進行判斷和推理,就會構思一個解決方案,從而完成了第一個飛躍,并為其后的D和I創造了條件。
我前面說到“洋人工程師”比我們名校研究生強的地方正是在這里。如果我們的教育能夠讓學生在畢業之前就具備了這種飛躍的自覺性,那我們的畢業生就是舉世無雙的了。
(2)第二個“能動”是從D·I到O的飛躍:學生在設計、研發了軟件產品或系統之后,還要在客戶環境或模擬的客戶環境中運行他所研發的系統,看看它是否符合自己原來的設想,尤其要檢驗它是否符合客戶的真實需求(一般來說,不走到這一步就無法最終驗證客戶的“真實需求”)。如果不合,就要糾正錯誤或者繼續改進。
只有到了這一步,學生才真正地搞明白客戶要什么,搞明白自己所構思的是否正確,以及自己的D·I是否達到了客戶的要求。過了這個坎,學生當然就明白了什么叫“兩個飛躍”,也就體驗到如何發揮“兩個能動性”。
當然,以上的敘述比實際過程要簡化多了,因為學生往往會遭受多次挫折、往往要經過“實踐一認識一再實踐”的多次循環才能完成任務。但那正是他們磨練自己、長真本領的過程。這樣培養出來的學生,別人就再也不會指責“分數高、能力低”了。因此,我特別贊成在計算機工程領域嘗試CDIO教育模式,并根據中國情況,根據計算機工程的條件發展出適合中國教育和建設的最佳模式來。
5 中國如何培養出自己的軟件系統架構師
大約十年前,軟件業界常常有人說“我們的學校培養不出系統架構師來”。后來,大家明白了,原來架構師不是學校培養的,而是實踐中鍛煉出來的。這就好像新畢業生不可能當“總工程師”一樣,門門功課都滿分的畢業生也不可能擔當系統架構師。
業界的第二個誤解是“架構師只需要軟件技術或者計算機知識”。這個誤解也消融了,現在大家都已知道:架構師必須懂得客戶所在的領域以及客戶的具體需求,或者說在某種意義上成為“客戶領域的專家”。只有同時考慮“客戶業務架構”和“系統技術架構”,他們才有可能創造出好的軟件系統。
這樣說來,架構師就只能靠畢業后在企業里“煎熬”了,那還與計算機教育有什么關系呢?我們說,是大有關系的!一個人畢業后在企業里進步的快慢,與他在學校里接受教育的內容和方式都有著很大的關系:設想一個學生只學習了編程語言、數據結構、數據庫、操作系統和網絡等基礎課程和相應的實驗或實習,但卻沒有做過完整的軟件系統,那他在工作單位就難以表現出主觀能動性,也就難于獲得最好的成長機會;如果一個學生念書時學會了設計和執行,但還是不會分析客戶需求并給出方案(C)、不曾完成并最終運行一個系統(O),那他就聽不懂客戶在講什么,也聽不懂經理在要求什么,因而也就難于發揮主觀能動性,難于爭取到快速成長的機會。
卡內基·梅隆大學和加拿大滑鐵盧大學等學校并未使用CDIO這種稱呼,但他們的教育模式與CDIO是類似的,因此他們的畢業生能夠較快地成長為架構師。為了幫助我們的學生將來快速成長,我們也要考慮采用類似CDIO的模式來培養計算機專業的畢業生。這里要特別強調的是,CDIO教育模式在學校條件下就給了學生提前體會“架構設計”的機會,他們在工作中就能表現出更強的競爭力,在群體中奪得機會、脫穎而出。
6 教學相長、校企結合、共創CDIO環境
軟件工程的CDIO環境不像MIT航空航天工程系的CDIO環境那樣復雜、那樣昂貴,但我們要注意其環境建設的特點:
(1)教學相長、與時俱進。
IT技術或者軟件技術幾乎是發展最快的科技領域。我們教師在接受新鮮事物方面,就是趕不上自己的學生,尤其是他們上網什么都能搜索得到。這個領域的快速發展,同時也就決定了其CDIO實驗室必須跟上時代、不斷更新。為此,我們必須努力發掘和充分利用學生的積極因素,讓他們成為CDIO實驗室建設的生力軍,我們自己則在旁指揮,甚至只當參謀。
我們要幫助學生總結網絡調研的方法和經驗,并為以后的師生積累教材:要學會調研和搜集企業信息、行業知識和典型的IT應用系統;要學會調研、搜集和管理各種軟件資源,如開源代碼、軟件說明、免費的或比較便宜的常用構件;要學會整理、打包、積累各個項目的源碼、注解、說明、開發文檔、測試文檔、發布文檔、糾錯(Bug Fix)數據庫和完整客戶以及內部通訊記錄:要學會搜索、選擇、開發和管理測試工具,學會編制測試案例(case)和測試用數據庫等。
我們要一邊帶著學生做,一邊向他們學,很多時候要先當學生、后當先生。這樣,他們只需花很少的錢就能建成很實用的CDIO實驗室。“三人行必有吾師”,到了信息技術時代,我們就推崇“二人行必有吾師”了。
(2)積極開展校企合作。
上述第(1)條主要是講CDIO中的D和I部分的建設,但兩頭的C和O才是關鍵。C是客戶的實際需求,沒有這種需求,學生就無以構思;O是運行軟件的客戶環境或者客戶模擬環境,不這樣運行軟件,學生就無法實現第二次飛躍。C和O一般都需要與企業合作共同創建。事實上,CDIO國際組織在其網站上也明確指出:CDIO教育模式實際是由學界、工業界、工程師和學生共同提倡創立的(The CDIOInitiative was developed with input from academics,indus