美國的學校喜歡動不動就讓你來一篇課後專題設計。從小學開始這裏的孩子就有這樣那樣的專題設計。孩子們普遍倒是拿專題設計挺當回事兒的,也挺喜歡和享受這樣的動手或實踐機會。但是,大學裏的專題設計就往往會把你搞得筋疲力竭,苦不堪言。我們在學習一門叫計算機編譯器(Compiler)的課程時,對專題設計就有刻骨銘心的感受。
那是一個在暑假短學期中開的課。講課的K教授是七十年代賓夕法尼亞大學畢業的博士。他對學生的嚴格在我們計算機係裏是出了名的。本來總共就隻有六周十一次的上課時間,K教授卻給我們安排了四個課後的專題程序設計。你可以用任何程序語言,分階段完成詞匯分析(Lexical Analysis) 、語法分析(Syntax Analysis)、剖析器(Parser)和編碼器(Code Generator) 等四個部分,最終產生你自己的程序編譯器。從第二周開始,一禮拜一個。每一個設計,不僅要有程序編碼,還要附上你的輸出結果。為防止作弊行為,他要求學生把程序存入軟盤,一並上交,以便於他的抽查。另外還對課程設計的包裝也做了嚴格的規定,非得用某某牌子的文件夾裝訂方可。否則自動下調一個分數段。
那次的專題程序設計是四個姊妹式的題目。就是說,隻要是你第一個設計失敗,後麵的設計你就不會走得通。結果是你的成績會不及格,下次還得重修。即浪費時間,又浪費金錢。所以,每一個學生都是加著十二分的小心聽課、記筆記。
那時,我們有很多人都是非計算機專業的人改行的。之前,還沒有寫過大型的軟件。甚至有人連微軟的可視C++編程器都是第一次使用。要在短短的四五個星期內完成編譯器的編程,無疑是一次巨大的挑戰。大家根據K教授給出的一段有五十幾行程序指令的題目,開始了我們的第一個程序設計。K教授要求我們在三天後交設計。允許三人一個小組進行討論。但是,三個人必須獨立完成各自的編程設計。
K教授給出的題目,是一環扣一環。而且盡是那種牆角旮旯兒都難得找得到的程序表述方式。“這整個是一個變態,題目出的如此刁鑽。” 有同學們在忿忿地抱怨著。
為了最大限度地節約時間,我與另外兩個同學組成了一個小組。我們一起分析題目,一起設計程序流程。當時,我們對計算機編程還沒有象現在這樣的概念理解及經驗。一切設想,都要經過反複的摸索,反複的實驗。很少有一次就通的程序。有時,為了排除一個邏輯錯誤,要反複調試上幾十次。深夜兩三點鍾大家還在電話上交流討論,更是家常便飯。
第三天上課時,人人都交上了一本厚厚的、裝訂精良的程序設計。每一個人紅腫的眼睛,告訴我們在過去的三天裏,大家都沒有怎麽休息。不止一個的同學在課間幾分鍾的休息時間裏,就把自己送入了夢鄉。
在K教授給出第一個設計的成績後,本來有二十七個學生的教室,隻剩下了十九個人。那些同學都知難而退了。
在接下來的幾個編程設計中,我們小組的幾個人又是沒日沒夜地寫程序,一條一條地調試指令。沒有一個人能在淩晨三點鍾以前休息的。有一次,我們在調試指令剖析器時,大家對如何解釋記號模式(Token)時有了分歧。大家的工作也隨之停了下來。有人提議給K教授發電子郵件問問。
令我們感到意外的是,K教授幾乎是立即就回答了我們問題。當時已經是早上三點半了。“很高興你們仍然在工作,注意休息。”
“沒想到老K也沒有睡啊。還在網上趴著哪。” 我們在心裏對K教授有了一些別樣的感覺。
“實在是盯不住了。這次就自動下調到B吧”有幾次,我們中有同學想放棄。
“再試試,說不定能通” ,“既然老K能出出這種題來,咱們就能給他做出來。” 我們又相互鼓勵著。
最後一次的編碼器設計我是在交設計的截止日期當天的清晨四點鍾左右才基本完成的。雖然,還有些結果輸出方麵的問題,但已經是我當時所能得到的最好結果了。我有些激動地撥動電話給我的同學。對方拿起了電話,卻是已經累得無力在電話裏分享我的快樂了。
我們小組的三個同學最終都順利地通過了K教授的考評。盡管後來大家對K教授的評價有褒有貶,但我心裏總是非常地感謝K教授。是他給了我第一次大型編程的機會,也是他第一次教會了我們用軟件工程師的思路來考慮問題,使我們的邏輯思維方式、程序語言知識和編程技能等方麵都得到了很好的鍛煉。使我們又一次體會了挑戰自我、戰勝自我的感覺,自信心也增強了許多。為我在日後的工作奠定了良好的基礎。
小組同學的緊密合作,即讓我們充分體會到了團隊合作的真諦,也使我們之間產生了一種同甘共苦的朋友之誼。其中的兩位後來還結成了表親。
“噓噓,告訴你一個小秘密,老K沒查出我設計中的錯誤。嘿嘿。”
金一
2005年3月於美國康涅狄格州