那些年我們一起逃過的軟件工程課


2016年閱讀了鄒欣老師的《構建之法—現代軟件工程》,刷新了我對大學時期軟件工程課程的認知,對它是那么地接地氣而感到無比的親切,特別是在我走出學校進入公司參加實習與正式工作加起來的3個年頭后,回頭看看這本書,覺得更像是一本提前告訴你應該怎樣成長的導引。剛好上個周末和我的研究生導師,以及一些師兄師弟一起吃飯,交流技術與人才培養,我不禁回想起鄒欣老師這本書對我的影響,我又想起當年我曾經逃過的軟件工程課了。此文並非我原創,我只是內容的總結和搬運工,以下內容皆為鄒欣老師所寫。

一、大馬哈魚洄游模型

  相信大家在大學階段都學過軟件工程,但學完總覺得好像學了很多,畫了很多圖,寫了很多文檔,但又好像啥都沒學到。計算機/軟件學院的老師們也總是抱怨,軟件工程這門課看似容易,實則太難,老師們反映的問題通常有以下這些:

  

  而在事實上,現實世界中,大部分軟件工程師的職業發展好像剛好與瀑布流程剛好相反。

  

  對於以上的實際流程,我個人就真實地經歷一遍。記得在S公司實習時,老板首先讓我維護一些已有系統,並小打小鬧地改一些存在的Bug,然后小規模地發布補丁。然后漸漸地開始重寫或新增一個較小的模塊,自己開始寫很多代碼和單元測試。然后漸漸地,新版本的開發工作來了,於是開始估計新版本的需求實現難度,從設計到開發,再到單元測試與QA測試,最后發布上線,然后又開始了維護。

  記得在軟件工程中我們經常聽到兩個關鍵詞:Alpha階段和Beta階段,其實在軟件工程師的個人發展中也存在這樣兩個階段:

  

  如果將這兩個階段應用到課程教學中,它看起來更像是從瀑布下方一步一步上溯到源頭,然后又從源頭流下去,鄒欣老師叫它“大馬哈魚洄游模型”。

二、心目中的師生關系

  對於大學專業課程的學習,特別是像軟件工程這種綜合專業課程,正如鄒欣老師所說,我們需要明確要求的師生關系是什么?

  (1)餐館/食客

        

       一些學生說,我既然交了學費來上學、就像進餐廳一樣,吃飯,想吃多少,想吃什么,我說了算。如果不喜歡,就去另一個餐廳就好了。上課能這樣嗎?在飲食行業,顧客可以拍拍屁股走人,在一些學校里,也有不同的老師上同一門課,同學們可以根據老師的介紹選擇適合自己的老師,但學生必須要在一定時間內做出選擇(必修課),老師掌握着最后給學生的分數,學校則掌握着畢業證。所以不能把餐館/食客的關系照搬過來,學生們不但不能成為主動權的顧客,反而會被人以分數/學位/畢業證相要挾,成為下一種關系的弱者。

  (2)老板/雇員?

  

  在學校里,很多學生都把自己的指導老師叫做“老板”,學生編程打工仔或打工妹。不光有大老板,還有小老板,因為大老板太忙,平時都是小老板在管理。學生雖然是“雇員”,但是並沒有相應的權利,倒像是一個“長工”。這樣的關系其實並不利於教學相長。

  (3)保姆/幼兒?

  

  另外一種情況,老師像保姆一樣,為學生操辦了一切,把課程內容煮成嬰兒食品,一勺一說地喂食。同學們有什么問題,都去找老師搞定。學生把老師反復咀嚼過的東西在咀嚼一遍,這個模式與我們所提倡的“做中學”(Learning by Doing)的模式有很大差別。

  (4)哥們/哥們?

  

  還有一種情況就是,老師與學生心照不宣一起混,“你對我好,我就對你好”。這里有一條新聞:

  

  (5)獄警/犯人?

  

  老師想法設法讓學生來上課(點名、突擊考試、指紋打卡),學生則想方設法地逃課。學生視上課為坐牢,巴不得早一點解放。對於一些同學來說,老師就是自己和“自由”之間的一道障礙。但是,沒有任何約束的自由真的是大學生需要的嗎?

  看了這么種師生關系,那么理想的軟件工程課程(或者說專業技術課程)的師生關系是什么?是“健身教練/健身學員”的關系。

  

  我們可以從各種各樣的健身房中看到這樣的關系,在這種關系中,是誰想要提高自己的水平?是那些學員,他們的想法得足夠強烈,他們才會花錢去參加這樣的健身活動。在健身活動中,誰要做各種運動,誰要流汗呢?是學員。誰在這個活動中對別人進行批評指導?是教練。那為什么教練可以這樣做呢?因為教練有下面的資源。

  1. 教練是很有經驗的身體力行着,並且有足夠的理論知識。
  2. 教練有一套訓練計划和各種練習方法,教練(場館)有儀器、工具、設備,不是每一個人都打算在家里放一套各種重量的啞鈴和杠鈴。
  3. 教練可以隨時指出學員的進步和不足,給予具體指導。
  4. 教練能夠召集到一群有相似基礎的隊友,這對有些類型的鍛煉是很重要的。

  教練和學員的關系一旦確定了,這就好辦了。每一個來學習的學生,都是想學好專業技術課程的來的,各人的先天條件不同,目標也未必相同。有些同學想成為改變世界的一流程序員,那老師就會以世界一流的標准來要求和評價學生。

  • 誰要在這門課程中寫代碼,做實驗,找需求,修Bug?→是學生,不是老師。
  • 誰要看各種與此課程相關的書籍、博客,並定期報告?→是學生。
  • 誰給各個學生設計練習,並回答疑問?→是老師和助教。
  • 如果學生的努力低於既定目標的要求,誰會批評這個學生?→是老師和助教。

  這時有些學生會說:老師,你講課特別好,我很想提高,但是我太忙了(忙着寫其他課程作業,忙着復習重點期末考試,忙着各種課程設計,忙着談戀愛,就是沒空鳥你),沒時間寫程序,我就來聽聽......

  這種情況放在健身學員的類比中就會是這樣:

教練,你講得特別好,我特別想減肥健美,但是我太忙了,沒時間練,所以我辦了卡,放在錢包里面,有時候拿出來看看......

  忽然感覺這TM好像當年的自己,哈哈!

三、他山之石課程改革

  鄒欣老師在清華大學和北京航空航天大學以及微軟亞洲研究院實踐過多次軟件工程的改革和與美國工程教育接軌,寫出來《構建之法》一書。在此我也希望我的母校CUIT參與這項改革,並以《構建之法》一書為基礎,讓那些我們一起逃過的軟件工程課變為那些年我們一起追過的軟件工程課。

  (1)課程安排

  

  

  (2)授課建議

  

  

四、從課程到企業導師

  從去年開始,我的母校CUIT計算機學院開始了企業導師的模式,也就是說在本科生的培養中,引入一些企業中的一線程序員/設計師等,作為教學師資的補充力量,帶領學生少走彎路,往更接地氣更與企業接軌的方向發展。我覺得這也是一個非常好的實踐,就我所知,目前大部分院校中的老師們都在忙着搞科研,評職稱,對於教學所花費的時間少之又少(當然,也有一些老師執着的堅持在教學一線並以提高教學水平為榮,我深深地向這些老師鞠躬)。當然,由於我個人的時間沖突,第一期我沒有參加。

  其實從以上理想的師生關系和他山之石中,我說說我心目中的企業導師。首先,他是一個教練,他有豐富的實戰開發經驗,能夠在高層為學生們指引方向。其次,他是一個學長/學姐,他有豐富的個人成長經驗,能夠在幫助學生們在業界道路上慢慢(請注意我說的是慢慢,而不是迅速,因為欲速則不達)成長。最后,他是一個有“情懷”的人,記得吳軍博士在硅谷之謎中曾經寫到:在世界范圍內,能掙大錢的公司比比皆是,而能改變世界、改變人類生活的偉大公司卻不多。但是,在硅谷,這種偉大的公司卻在不斷地涌現,這和硅谷擁有很多具有世界情懷的夢想着有很大的關系。這也讓我了解到世界上真的有那么一些為了將世界變得更美好的理想主義者,他們做事情真的是為了一個夢想,而不僅僅是從某一個市場掙到錢。用吳軍博士的話說:是否具有這樣的情懷,決定了一個人辦公司能走多遠!同理,是否有這樣的情懷,也決定了一個學生在IT這條路上能走多遠!

  有時我時常在想:如果我做企業導師,我會怎么帶我的學生?今天借着軟件工程課程,我想我會讓他們經歷接地氣的軟件工程,為成為一名合格的軟降工程師打下准備。為什么是軟件工程而不是其他課程?因為我覺得軟件工程的“綜合”(請注意我說的是綜合,而不是技術層面)復雜度其實遠遠超過了其他課程,記得在《人月神話》中曾說形象地說到軟件工程的復雜度是沒有銀彈的。在實際工作中,我們常常是做了很多,但卻收獲很少,而這很多時候恰恰是我們在軟件工程這條道路上不停地在補坑。

  上周天在CUIT附近的酒店應老師的邀請,和許多卓有成就的師兄師姐,學弟們一起交流,受益匪淺。特別是還碰到了我以前公司部門的老板,甚是驚喜。希望我們CUIT計算機學院能夠在校內老師們和企業導師們的共同努力下,讓CUIT貼上一個計算機強校的標簽!同時也希望,下一期的企業導師中,我會有時間加入,也希望會有學弟學妹們選我,哈哈!

參考資料

  

鄒欣,《構建之法—現代軟件工程》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM