這兩天很多老師都在討論課程總結和改革的事情,大概也是到了學期末,老師們詩性大發,一個學期和熊孩子們斗法,總算松口氣來點格局,要不然整個人感覺都不好了。
作為吃貨,總感覺再復雜的道理,如果能夠和吃關聯起來,那都不是事。北航的OO課總是那么累,在我看來就好比:OO課不是走親戚和吃喜宴,而是要每個人做出一桌菜來,做的好,大家都來品嘗,做不好,自己含淚吃完,再來下一鍋,實在無法下咽,明年再來練。。。
從教多年,基本觀察,學生吐槽的課程都是讓他付出很多時間的課。凡是能夠在學校規定的合理課程規則下來榨取學生時間的老師,都是熱愛教學(吃貨)的老師,就從這一點來說,都應該受到應有的支持和尊重(學校應單發吃貨基金以資鼓勵)。事實上,要做到合理和有效的榨取同學們的時間,必須自己首先投入大量時間。
食材為先。首先,得有合適的食材來做菜,巧婦難為無米之炊。整體對着菜譜去各種YY炒菜的力道,油溫的把握,其實是自欺欺人。2019年的OO,准備了四組食材:符號求導食材、電梯模擬食材、地鐵系統查詢食材、UML模型解析食材。相比較往年,我們做了減法(熊孩子們浪費了好多好食材-:))。這四組食材無一例外都是融合了架構設計、算法設計、工程規范、測試和debug等活動,既有陽春白雪,也有瑣碎繁雜。
不可不講究烹飪之道。再好的食材,一股腦亂煮亂燉,只能讓人皺眉。我們采取迭代的方式,在確保已有食材味道出來后,逐步加入新的食材。必須得說,做菜過程中,如果只是到最后才能感受到食材的香味,這菜恐怕就很“菜”了。每個項目,我們設計成三次迭代,逐步增加難度和設計要求,基本上第三次都是一個集成式提高,完整感受到在設計上的訓練要求。比如符號求導訓練的重點是借助於面向對象的抽象、繼承和接口等機制來訓練層次化的架構設計,即如何通過層次化抽象來獲得歸一化的解決方案。這樣結構清晰,代碼量也少,新需求出現后只需增加一點局部細節,且仍然可以被抽象高層所歸一。電梯模擬則考究的是如何把線程安全融入到層次化設計中,使之稱為自然的組成部分;地鐵系統查詢強調的是規格化的設計,形成圖和計算模型分層,確保圖層的穩定性,而模型層可以針對需求變化來靈活調整;UML模型解析強調的如何基於元結構(即UML元模型)來構造模型解析器,解決的核心問題是如何在結構化輸入解析、建圖和檢索中識別層次結構。三次迭代一方面使得每次作業的工作量和難度可控(一周內能夠搞定),同時也為老師帶來了觀察機會,可以了解到同學們的問題。我們觀察到,優秀的同學在第一次迭代中就開始預判后面可能的變化,從而在架構設計上做准備;而中間層次的同學往往在第二次,甚至第三次會發現之前的設計不得不扔掉從來,否則幾乎無法完成作業要求。在三次迭代之后,我們稍微松松氣,品味一下端上來的菜。每個同學做出來的菜各有不同,有的色香味俱全,有的勉強能吃,有的,哎,只能扔了。。。不管怎么樣,都要寫一篇烹調與品嘗報告,酸甜苦辣咸,各自去寫。
好廚師是被挑剔出來的。初學做菜時,是三五好友一起,每次必然互相點評一番,嗯,這個不錯啊,就是有點咸;這個看起來不錯,顯然油少了,凡此種種。不嘗嘗,怎么知道味道怎么樣呢?不僅每個同學自己要嘗,老師和助教也來嘗,同時同學們還要相互嘗,而且不能顧面子,好吃的要表揚,不好吃的必須指出來。這就是OO課讓同學們倍感壓力的測試機制,公測和互測。公測使用事先准備好的測試用例,確保了公平性。好吧,西紅柿雞蛋湯按照什么次序放食材?水-雞蛋-西紅柿;西紅柿-雞蛋-水;雞蛋-水-西紅柿???我們在公測中引入了交互性,允許試錯。允許同學查看公測結果,然后修復bug,這樣就基本解決了食材次序問題(確保基本能夠出來一道菜),當然公測還有一道強測環節,相當於把同學們的菜都搬上來,由老師和助教挨個品嘗和打分。根據品嘗結果進行分組,然同學們互相品嘗和評價,這就是互測。避免味蕾的過於個性化偏好,我們今年使用了群體互測,即引入一個互測ROOM(7個人),每個人都可以提交測試用例,系統記錄評測結果。當然匿名機制是必須的。
好廚師都是吃貨。如果一個人不愛美食,我想無論如何是成不了好廚師的。因此,課程在訓練內容和環節上注重引入探索性。必須說,吃貨也是培養出來的。沒吃過炸醬面的,不能說是北京吃貨。基本上第三次迭代都給同學們留有足夠的設計探索和算法探索空間,這樣可以極大激發同學們的積極性(好吧,其實我知道他們好多是被逼無奈。。。)。
上述幾點形成了北航OO廚師培訓的基本大法,從2014年新OO誕生之起就一直堅持的原則。但我們不否認存在的問題,所以每一年都在改進。
2019年在制度上引入了研討課,即每兩周一次按照授課班級組織研討,同學們上講台報告和分享自己的做菜心得,如何防油炸鍋,如何保證鹽不會放多,如何在出鍋前再來一波小操作,看起來更亮眼一些等等。當然,我們也請了外面館子里的大廚(企業的資深工程師)來交流心得,目前看來效果不是很好,根本原因是請來的廚師主要討論菜品設計和面向吃貨的過程控制等,同學們還不了解自己怎么用這些知識來做出起碼可吃的菜。不過,定位就在於讓同學們知道館子里大廚都思考啥和做啥。
欣慰的是,每一年課程都在改進。逐漸的,我們的二年級本科生在暑期真的能去館子里炒菜,甚至直接敢把炒出來的菜端給顧客,似乎不少大顧客都豎起了大拇指。果然,天下吃貨都是有一顆包容的心。
有同學在知乎上喊話,讓介紹這門課的設計初衷。很簡單,我們希望北航這個廚師培訓機制能夠給社會源源不斷的送上大廚,來服務廣大吃貨們。什么掐脖子的,斷供的,都不存在,有什么是不能通過烹調出一桌好菜來解決的問題呢?不過話說回來,光靠一個大廚恐怕是搞不定滿漢全席的,如何搭建廚師班是我從2017年開始思考的問題,經過2018年的基礎架構設計,我們再度把軟件工程拉回到必修課,並面向領域做了精心設計。2019年是第一年,貌似炒出來的菜還不錯,雖然也發現了不少問題。
seriously,OO課的改革始終是在路上。我們已經組建了新一屆助教團隊,不論是食材,烹飪程序,品嘗和評價辦法,還是烹飪工具,我們都列出來一長串改革和改進清單。也許,2020年,最值得期待的是,我們要培養一個吃貨EVA。暫且不表,還在設計中,且待明年看效果。
最后,寄語剛剛走過培訓班的廚師(雛廚),吃本是人生之大樂趣。你學會了烹飪,便對吃了有更深層次的理解和感悟。忘卻廚師培訓過程中的種種不樂和糟心事吧,幸福的去做好一個吃貨。