2004-2005學年,Pam Rostal和Dave West在NMHU(New Mexico Highlands University)啟動了一個獨特的學位教學計劃:要求學生在實際項目中廣泛開展靈活實踐。本文講述的就是有關這個教學計劃的故事——雖然此計劃目前已經停止,但很可能隻是暫時的,他們正在争取2007學年重新啟動。但不管計劃是否重新開機,這次實踐無論是對學術界,還是産業界,都将點燃思想的火花:我們要大膽創新,敢于開展一些以前未曾想及的實踐,努力提升我們對開發、測試和項目管理人員的教學成果。
最初,我們是想建立這樣一個大的群體——大家可以全身心投入軟體開發藝術的學習和掌握,一起為“人人為軟體,軟體為人人”(譯者注:原文為“software by people for people”)的目标努力。
一片雪花,必須有凝結核才能形成其複雜的晶體結構。在我們期望建立的群體中,同樣需要這樣的催化劑。教育(以及再教育),是形成新群體的基本要求;曆史悠久的學校——如最早的古希臘學園和西藏寺院——恰是專門開展群體教育的場所。
對于我們來說,這個凝結核就是在一個較小的(3000學生左右)公立大學(我們選擇的是在新墨西哥州拉斯維加斯的NMHU)展開的新學位教學計劃。這個教學計劃在幾乎所有方面都有考慮,其基準點,就是我們辨別中展示的核心價值觀。
下圖所示的辨別,涵蓋了軟體開發的核心理念,包括它是一門專注于現實構造(Reality Construction1)的規律性藝術、在平台軟體上展開工作、以不同但充滿熱情的人為中心、依靠集體力量、又全體參與貢獻的群體實踐等等。如果辨別中五邊形各邊所示關注點能彼此維持一個良性關系,那麼這個團隊就能創造出令人驚訝的軟體開發能力,進而實作教學計劃的核心目标——由被教育者組成的研發團隊,達到10倍于平均水準的生産力。
從2004年8月開始,20個學生和兩位教師開始一起努力。以下就是有關他們的故事了。
為什麼現在來講兩年前的故事?因為計算機科學教育工作者和社會需要知道計劃的完成情況。當學生發現需要真正掌握,而不是滿足于用給定工具實作目标時,需要一個合适的群體環境,引導他們克服困難。即便非學術界也能從這些教訓中學到東西,最終,無論是教育機構還是軟體開發組織,都需要形成價值群(Value Shop2)——擁有能根據使用者的實際情況提供解決問題服務的能力。
請到我們的學生活動室來——接待室的門一直是開着的。讀書小組會議、拜訪名人大家等通知都帖在門上。請注意門左邊的微波爐和右邊的顯示器,即使屋裡沒人的時候,路人也可以駐足觀看PowerPoint幻燈片,它展示了我們最近的工作進展和計劃中的一些事情。
教學計劃
具有開創意義的NMHU軟體開發學習班(Software Development Apprenticeship,SDA),設在新墨西哥州拉斯維加斯的一個小鎮上,這裡海拔6500英尺,人口約15000,緊靠崎岖綿延的Sangre de Cristo山脈。這些矗立在人們面前的大山,就像我們的教學計劃,看起來似乎難以逾越。隻有到達山巅的人,才能得到應有的獎賞;常人不可及的美景,屬于選擇攀登的人。
在新墨西哥北部地區,絕大多數家庭壓力大、普遍貧窮,是以這裡的學生,在很小年齡時就必須與命運搏擊。是以,這些學生非常希望改變自己和自己所在群體的生活面貌。他們能深刻了解家庭和群體的涵義,是以自然也就能認識到成為我們正在建立的群體中一員的潛在價值。我們的辨別和SDA手冊,對這個理想模型做了明确定義:
X*10(意味着10倍),即非常有名的、某些開發人員的能力為平均水準的10倍——這也是我們對所有畢業生的期望。
- 人(People)——記住,我們的目标最終是服務于人,是以開發人員必須和其他人一樣得到尊重。
- 系統(Systems)——我們要改進現有商業和社會系統,而不是去制造過時的老古董。
- 靈活(Agility)——我們對結果感興趣,我們不是形式主義崇拜者。
- 工藝(Craft)——我們認為軟體開發是一種藝術,而非機械的生産過程。
- 軟體(Software)——是我們開展藝術活動的載體。
我們一直在與ACM、IEEE3的相關标準鼓吹的能力模型做鬥争,保持了對我們自己信念的執着。當然,現有一些好的能力标準成為了我們定義模型的一個子集,此外,在其他很多方面增加了大量超越現有技術和實踐規範的要求——畢竟,我們對學生的期望遠遠超過世界上任何其他學校的教學規劃。我們希望學生完成六年的學習計劃,其中大部分和培養正規畢業生的目标類似,但同時要求培育對現實中開發工作的深入經驗,這在目前任何正規大學的大學學位四年學習計劃中,是不存在的。我們計劃開設的所有科目,都可以說是跨學科,或者說與具體課程獨立的;在很多方面,與傳統做法都有很大不同,比如允許多門課程同時規劃、在同一個地點由多位教師教授,再如對實體空間的要求等等。是以,我們希望灌輸給學生的這種意識,隻能通過非傳統的、強調責任、回報、協作和面對問題4時創新解決辦法的教育模式,才能逐漸培養起來。
在目前已經為大家認可的教育模型中,我們選擇了系統思想(Systems Thinking5)、誠信上司力(Authentic Leadership6)等,對這些概念的學習,有利于縮國小生對世界的理想認知和世界實際模樣之間的差距。另外,我們還在模拟學生将來真實工作環境方面下了大公司,白闆、圓桌、轉椅、粉筆等一樣都沒有少,如下圖:
培養模型
第一步,是要為我們的教學計劃設計辨別——辨別會織在用不同顔色表征主人學業等級的襯衫上。具體如下:
- 軟體開發新手
- 褐色襯衫
- 資格:所有學生的必經點
- 在資助項目中可獲得的報酬:$xxx/小時
- 主要目标:熟悉商業應用中的詞彙和工具,以及對軟體開發文化的适應
- 學徒級軟體開發者
- 綠色襯衫
- 資格:取得75項資質(或同等水準)
- 在商業項目中可獲得的報酬:$xxx+2/小時
- 主要目标:掌握應用開發中的基本技能
- 資深軟體開發者
- 紫色襯衫
- 資格:獲得150項資質(或同等水準)
- 在商業項目中可獲得的報酬:$xxx+4/小時
- 主要目标:獲得獨立的應用開發項目中的進階技能
- 軟體開發管理者
- 藍色襯衫
- 資格:獲得225項資質(或同等水準)
- 在商業項目中可獲得的報酬:$xxx+6/小時
- 主要目标:上司研發活動和與外部軟體開發組織的合作
這裡所說的資質,指的是iii級能力,資質掌握水準的定義如下:
- 概念和詞彙(書本知識);
- 在得到指導的前提下對知識的運用能力(類似于自然學科中在實驗室的工作);
- 獨立的應用開發能力(類似于其他學科中的實地考察、案例研究等);
- 陌生環境中的應用開發能力(類似于實習);
- 在項目環境中指導他人進行開發的能力;
- 創造可供他人利用的材料和工具的能力;
- 能為此資質學科領域帶來原創性貢獻(如發明工具、創造算法、提出新概念等)的能力(通常在專業會議或刊物上首先提出)。
每個學生畢業至少需要獲得64個學分,他們可以在每學期的3-15個學分中任意選擇科目。是以教學計劃必須考慮到這一點。為此,我們提出了能力水準的概念,也就是将每學期的15個學分對應到15個能力等級。一個學生要想在一個學期内拿到15個學分,可以在将3項能力掌握到等級5、5項能力掌握到等級3、15項能力掌握到等級1等組合中自由選擇。
每個學生還需指定個人學習計劃(Individual Education Plan,IEP),說明自己将在目前階段(通常包括8周;或每學期分兩個階段)掌握哪些能力。IEP中的硬名額,是其包含的待學習能力必須反映7被指派給他們的項目相關的知識和技能。
是以,課程不是預先指定的。教師必須根據每個學生的IEP準備和實施對應的教學計劃。如果IEP的要求超出了現有教師的專業水準,則外面的大師(世界著名的專家)會來接替。
我們會請求各種客戶為學生提供實習項目,但無法保證客戶的需求能完全覆寫要求的全部能力資質。是以,我們也會開展一些内部項目,如在商業世界中的一些非熱點領域,人工智能、非标準語言(比如Squeak/Smalltalk)、嵌入式軟體等等。
能力的跨度範圍很大(如下表),必須保證學生根據自己的IEP總能選擇到所有合适的科目:
History and Philosophy of Software Development | Modeling at All Levels | Design & Program Evaluation |
SDA Mission | Building Executables | Problem Diagnosis |
Software Development Community | Test Frameworks | System Integration |
Systems | Middleware | Programming Styles |
Teams | Artificial Intelligence | Programming Principles |
Leadership | Server Management | Interaction Principles |
Organizational Change | Version Control | Interaction Testing |
Usability | Security Fundamentals | Interaction Testing |
Collaboration | Network Security | Verification and Validation |
Interpersonal Relations | Project Management | Professional Communication |
Hardware | Database Fundamentals | Principles of Communication |
Software | Programming Languages | Communication Theory |
Networking | Literature - Science Fiction and Fiction | Software Development Methodology |
Communicating with People | Futurists | Analysis and Design Evaluation |
IDEs | Complexity Theory | Process Theory |
Programming Languages | Biology | Management Overview |
Programming Frameworks | World Decomposition | Management Levels |
Databases | Program Decomposition | Management Techniques |
Operating Systems | Program Composition | Management Tools |
教學工具
我們沒有标準的教科書,選擇範圍很大,比如,第一學期的書目表如下:
- Steve McConnell的《Code Complete》第二版。
- David West的《Object Thinking》。
- Ken Schwaber和Mike Beedle合著的《Agile Software Development with Scrum》。
- Robin Williams的《The Non-Designer’s Design Book》第二版。
- Peter Coad、Eric Lefebvre和Jeff DeLuca合著的《Java Modeling in Color with UML》。
- Kent Beck的《Extreme Programming Explained: Embrace Change》(第二版)。
- Frederick P. Brooks, Jr.的《The Mythical Man-Month》。
- Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides合著的《Design Patterns: Elements of Reusable Object-Oriented Software》。
- Martin Fowler的《Analysis Patterns : Reusable Object Models》。
- Alistair Cockburn的《Writing Effective Use Cases》。
- Alistair Cockburn的《Agile Software Development》。
- Jerry Weinberg的《Systems Thinking》。
- Jerry Weinberg的《The Psychology of Programmers》。
- Linda Rising的《The Patterns Literature》。
其中一些(如《The Mythical Man-Month》)作為經典推薦,其他一些(如《Agile Software Development with Scrum》)則是因為教學計劃對這些内容的強制要求。我們采用Scrum作為教學和項目中的管理方法。還有一些,被推薦原因是我們認為這些書可以幫助學生了解創新在産業标準和生産工具進步中的應用——比如《Java Modeling in Color with UML》,講述了顔色在辨別原型模式(archetypal pattern)、反模式(anti-pattern)中的應用。
學士學位所要求的非SDA課程包括:
- 文科專業标準的核心課程;
- SDA特别推薦的課程,如技術寫作、人類學研究方法等等;
- SDA定義的但在其他系教授的課程,如現代哲學和哲學解釋學。
通過鼓勵學生在SDA範疇内完成各項課程的學習任務,我們希望能在每天的交流中持續、反複強化跨學科理念。每周的讀書小組會議,也為跨學科問題讨論提供了機會。星期三下午或晚上,我們還會聚在一起讨論描繪軟體開發曆史中激動人心時期大人大事的圖書(如《Dealers of Lightning》和《he Dream Machine》)、網絡發展過程中做出了巨大貢獻的人物(如Ted Nelson、Jason Lanier)、個性測試(如Meyers-Briggs Type Index,幾乎每個人都作過),甚至與計算機相關的一些散文(如Alan Kay的《The Early History of Smalltalk》)。會議可能在咖啡館、實驗室舉行,可能是在白天,也可能安排在晚餐時(因為需要和學生們課程外的時間調配)。
師資團隊
在每個學期,我們舉行兩次授職儀式,因為學生已經到達新水準,襯衫和名片可以更換了,其行為準則(Code of Conduct)也需要做相應調整。下圖即授職儀式現場,因為學校規定,圖中沒有出現學生肖像。
授職期間,每個人都有在3-7天内與大師分享專業知識的機會。其中一些人在業界可是赫赫大名,如:
- Linda Rising,例理結合,教授靈活回顧(Agile Retrospectives)和寫作知識。
- 他不僅使用Java和Squeak教授極限程式設計實踐,還會指導那些在痛苦中掙紮的團隊如何走出困境。
- Charlie Poole,教授TDD、FIT(一個內建測試架構),以及結對程式設計。
其他一些在明尼蘇達州當地也是享有盛名的,比如:
- Dion Stewart,幫助我們搭建了此教學計劃所需的程式設計和伺服器全套環境。
- Jeff Goodman,精力旺盛者的典範,體驗式教育(Experiential Education)的推崇者。
TDD的好處直接從教室擴散到了我們的使用者——新墨西哥州政府辦事處、本地一個小型非營利機構和拉斯維加斯城裡的一個校區。州工程處辦公室可利用我們的客戶管理工具直接給我們傳遞開發相關材料,共同參與任務。這樣,通過Scrum和TDD在此項目中的實施,使用者不再需要向以前那樣耐着性子,在漫長的釋出周期内默默等待。
日常學術和項目活動
我們日常工作重點主要放在學習班上,每周召開一次計劃會議,介紹本周的課程情況,并對上周情況作一次回顧。
團隊内部的日常會議,不定期舉行,因為每個學生也有自己的安排。像eWaters組曾規定每天12:30舉行例會,但因為實際中很少人能參加,白闆就逐漸成了主要的資訊源。下圖展示的是開發中心建設項目——安裝BEA WebLogic、Informix,確定整個腳本能在Eclipse中執行,且伺服器能通路資料庫——的進展過程。圖中白闆的内容包括每個學生需要完成的任務,還有我們wiki的URL位址(學生們在這裡可以記錄他們每天的進展情況)。
學術讨論會是了解學生本周對所學内容掌握情況的極好方式——從學生的學習計劃來看,每周安排兩次為宜。上圖中的白闆描述了一次典型的學術讨論會的情況,包括Java小應用和Java應用開發、向檔案和資料庫寫入資料等内容,展示了應用程式疊代式和遞增式的實作過程。讨論會特别注重體驗,通常由兩或多個學生坐在一起展開。我們發現,一些帶有探索性的、非确定性的任務,最好由兩個學生先獨立學習,直到他們覺得事情有了大緻眉目再坐到一起。而确定性的活動和工作讨論會,則最好由兩個學生結對完成,特别是其中一個學生比另一個經驗豐富的時候。從我們的實踐來看,鼓勵學生與不同的人結對學習,勢在必行;否則,一個學生可能越學越有動力,而另一個越來越被動。在我們的學習班中,尤其在一個是男同學,另一個是經驗更少的女同學時,這種情況特别明顯。
當然,結對并不僅限于學生,教師結對工作時,也可以像學生結對那樣實作師生交流——直率地指出問題,同時也要能提出建設性意見;可以激烈争論,但常常也可以用點小幽默化解大家的情緒。
實踐證明,與客戶配合是所有結對方式中最為困難的(和學校管理人員結對除外)。最為成功的是維護本地校區計算機實驗室PC的工作,因為其中的任務是彼此獨立的,可以由多個小組在不同學校同步進行,而且任務的要求清楚,幾乎所有學生都力所能及。另一個比較成功的項目是為位于60公裡外聖達菲的州工程處辦公室更新JSP代碼,任務獨立且難度不高。我們在這個項目上一個優勢是學生開發組在本地搭建了使用者的開發環境,是以我們需要安裝應用伺服器軟體、配置連接配接池、做好版本控制、用異常複雜的ANT腳本實作代碼編譯和釋出, 并做好需求整理工作。
第三個項目周期為三年,要求SDA為某非營利企業開發一個财務和市場活動管理系統。此項目要求按照企業資源管理計劃,實作訂單、庫存、網站以及帳目管理。開發小組成員會在每天下午5:00一起讨論項目進度,評估剩下任務所需的開發時間。在這個項目中,我們遇到了很多困難,比如使用者參與少、新手對行業概念了解的難度大、項目組内部壓力大,以及平台、過程、角色和責任等任何商業開發組織都會面臨的決策問題。但是,項目組成員在這個過程中收獲了很多東西,如項目管理、社會交往和使用者關系等從來不可能在非真實使用者和非真實項目中得到的知識。
自己向自己學習
日常經曆是我們每周回顧會的素材。每周五,在團隊的回顧會上,将對一周的成果做出總結——我們學到了什麼,我們不應該忘記什麼,應該忘記什麼,下周我們應該有什麼改進。一般,回顧會都是緊跟着耗時一小時左右的午餐——匹薩、三明治或者便餐——舉行。通過這種方式,可以增進大家感情,暢所欲言。有人會搶占門旁的軟椅(見下圖),有音樂天賦的學生還可以操起吉他,在角落裡低彈慢吟!
每次的周末回顧會都會有不同的特點。比如初期時,他們最關注的是後勤準備工作,因為此時計劃的階段性時間難以确定、沒有裝置、計算機環境沒有搭建好、彼此溝通管道不明确等。對這些學生來說,有太多不确定性因素了。但慢慢地,他們的分析、表達、決策和根據問題設計解決方案的能力會随着一次次回顧會的延續而逐漸提高。
類似“我們知道星期三的讨論會是一種浪費(因為我們當時就做過評估了),是以沒有再舉行的必要”這樣的評論,是實作真實、自然、可用行動或語言在彼此之間,或對教師以及來訪人員反映看法的一種嘗試。其他系的教師看到我們的學生在自己老師和指導員不在的情況下,能自發舉行回顧會議并對下周任務提出建議時,肯定會大吃一驚。
結果
與上司層接觸的機會,以及通過閱讀、研究課程和項目工作得來的經驗,可以直接促成某些學員就業。我們的一個學員,現在澳洲負責一家銀行的國際事務(不可否認,她本來就經驗豐富,但她認為SDA給了她承擔這樣一個極富挑戰性工作的工具——尤其是Scrum和用例——和信心。還有兩個客戶雇用了我們的學員,繼續在學習班時啟動的工作。有些學員已經在半工半讀,不斷積累和運用着學到的管理、社交和技術知識。
有一個學員已經去了明尼蘇達州,希望推廣他在新墨西哥州開發的一項技術——FIT,是他在為州工程處辦公室做項目時,在Charlie Poole指導下開發的一個測試工具。還有一個去了離家更近的一所加拿大大學,計劃完成M.B.A學位,并充分開發他在各種環境下讓計算機工作方面的豐富知識。其他方面的結果則不太理想。一個助教因為不能适應環境差異而離開了我們。計劃本身也已被NMHU校長Manny Aragon(現在已經被學校解雇)停止。絕大多數學員四散離去,不過比較核心的六個人還在繼續工作,等着計劃在聖達菲的另一所大學重新啟動。其他人還彼此保持着聯系,如果計劃重新開機,他們還可能再次加入。希望在2007年春,我們能夢想成真吧。
意義
在OOPSLA 2005上,一些教學模式研究機構負責人和我們一起讨論了他們的模式如何與我們模式的結合,以及還可能存在的缺失等問題。
最後,我們讨論認為的成功模式,主要圍繞三個方面展開——團隊内交流(Community Interaction)、社會實踐(Social Interaction)和學習(Learning)——如下面三圖所示。其中藍色節點未列為模式,與粉紅節點并存;六邊形節點是模式語言(Pattern Language)而非單個模式。
SDA模式——團隊内交流(Community Interaction)
SDA模式——社會實踐(Social Interaction)
SDA模式——學習(Learning)
後來對系統思想8的研究也證明了我們所列的三個次元在所有社會系統中的通用性;另外,我們忽略的第四維是對市場——如可能參加計劃的學生、大學管理者、各團體負責人甚至潛在使用者(現存使用者已被定義為我們群體的成員)——中風險承擔者的外部接口。盡管不對這第四維多加注意看似可以降低計劃複雜度和成本,但對它的忽略,其實是暗藏風險的。
計劃停止後,我們以系統思想為手段,努力總結歸納我們已經發現和應用的一些模式,希望能給那些渴望提高團隊、院系群組織能力水準的人一些幫助。我們用一個叫作autochthony的工具整理了我們的研究成果,不過在這裡就不贅述了,那又是另一個話題。
在這次會議上,隻有我們的學生得到了自我展示機會。觀衆相繼被我們的巨大變化震驚了,羨慕這些學生在知識和能力上取得的巨大成功。
因為在教學計劃中強調靈活原則,并在教學實踐中成功運用了這些原則,我們引起了靈活聯盟(Agile Alliance)的巨大興趣,并得到了支援。在上月于明尼阿波利斯舉行的Agile2006大會上,很多教師、學者和學生都表示非常希望加入可能在聖達菲重新開機的SDA計劃;在這次會議上,該計劃的重新開機成了一個熱門話題。
1此短語來自于Christiane Floyd和其同僚的圖書《Software Development and Reality Construction》,Springer-Verlag出版公司,1991年。
2Stabell, C.和Fjelstadt, O.的《Configuring Value for Competitive Advantage: On Chains, Shops and Networks》,見《Strategic Management Journal》第1998.19期,第413-437頁。
3Computing Curricula 2005,參看 http://www.acm.org/education/curric_vols/CC2005-March06Final.pdf。
4 http://www.pedagogicalpatterns.org/。
5Gharajedaghi, J.的《Systems Thinking: Managing Chaos and Complexity: A Platform for Designing Business Architecture》(第二版),Butterworth-Heinemann出版社,波士頓,2005年。
6Terry, R.的《Authentic Leadership: Courage in Action》,Jossey-Bass出版社, 美國舊金山,1993年;以及Terry, R.的《Seven Zones for Leadership: Acting Authentically in Stability and Chaos》,Davies-Black出版社,美國Palo Alto,2001年。
7IEP還要反映學生的興趣、能力趨勢,并考慮與他所修非SDA課程的協同。
8Gharajedaghi, J.的《Systems Thinking: Managing Chaos and Complexity: A Platform for Designing Business Architecture》(第二版),Butterworth-Heinemann出版社,波士頓,2005年。
作者簡介
Pam Rostal,位于雙子城的面向對象技術使用者組(Object Technology User Group,OTUG)負責人,Trissential公司通過資訊技術實作組織提升領域的專家。她在應用和企業的架構設計、業務和技術過程管理、組織結構調整和業務分析等方面具有豐富實踐經驗。2004-2005年,她與Dave Wes在NMHU合作創立了軟體開發學習班。目前的研究方向是本土化研發,這是一個以系統為基礎的組織架構模型。她希望研究成果能成為她在諾瓦東南大學(位于Fort Lauderdale)的博士論文的一個部分。
Dave West,自1968年進入軟體行業,1988年成為高校教師。他是《Object Thinking》的作者和《User Stories》的合作者(與Kent Beck)。發表過大量論文,并經常在OOPSLA和靈活技術大會上做報告。目前正在撰寫一本圖書——《Developing Systems》,2007年春天出版。他生活在新墨西哥州,但經常為全國各地企業做咨詢服務。他希望在2008年春天到來時,能夠呆在如本文描述的那種教室裡。
檢視英文原文: Experience Report: Agile Development Apprenticeship at NMHU 譯者簡介:羅小平,上海某大型公司網際網路中心技術總監, CSDN大版主,網絡ID為lxpbuaa(桂枝香在故國晚秋),曾著有 《Delphi精要》一書。個人部落格為 http://blog.csdn.net/lxpbuaa,現在CSDN主持翻譯國外專家 Herb Sutter的中文部落格。他的Email和MSN為 lxpbuaa AT 263.net。