对大学 IT 专业教育的反馈
[這是2009 年 寫的文章, 一部分收集到 <IT 小小鳥> 這本書里了。 這兩天看到軟件學院同學對教學的反饋,? 看來好些問題都沒有得到解決。 教育部門時不時會開教學研討會, 去世界有名的大學, 公司參觀, 他們還要參觀多少年?? 他們會請已經畢業的學生來提意見么? 學生要年復一年地等它變好?? (2011,2015,2016年都做過少量更新。)]
?
中國的大學生教育體系中,大約有10% 的學生屬于 IT 相關的專業 (計算機科學,軟件,MIS,電子工程, 軟件工程,網絡工程,電子商務,等)。 這些學生畢業之后,就成為IT 產業的從業者或用戶,他們是IT 行業的希望。 這些學生在接受了 4-6 年的教育之后,對這個教育系統有什么反饋呢? 我問了一些剛剛畢業的軟件專業的同學,軟件教育迫切要改變的做法是什么? 下面是一些回答:
?
*** 同學們想說什么 ***
a) 實踐! 軟件教育離不開實踐,不要太強調閉卷考試, 老師一定要讓學生實踐,實習。給一個真實的客戶做項目和自己幻想一個需求來做項目是有很大區別的。自己從頭寫程序和維護別人寫的代碼是有很大區別的。 沒有真實的需求,沒有軟件的增量開發,沒有團隊合作,程序設計和軟件工程中的大部分理論都淪為空談。
b) 講為什么! 學生上了很多課,反而覺得很迷茫,這些課的意義是什么? 為什么有這么多的原理,數據結構, 紅的樹,黑的樹,模式和算法? 不知道我學的東西有什么用,怎么用。老師似乎不想告訴我們這些課程在實踐中的意義 (或者他們也沒實踐過? )。學生只有死記硬背來應付考試,考試后全忘記。
c) 打好基礎,其他自學! 好好學基礎課,特別是算法, 數據結構, 編譯原理,操作系統 。 其他課的內容用到了自己學就可以了。
d) IT 教育不光是代碼! 軟件教育不是孤立體,希望在軟件教育中把文科的知識聯系進來,和設計聯系起來; 把軟件/IT 行業有趣的發展歷史放進來 (講講圖靈,馮·諾依曼,講講Smalltalk, 各種語言的源和流)。培養學生對這個行業的興趣、熱情和敏感。 提倡互動,介紹同學上相關的論壇,網站,開拓視野。
[建議大家看 《浪潮之巔》]
?
*** 我看到的現象 ***
由于工作的關系,我在過去的幾年中訪問了十多所軟件學院或計算機學院,和不少老師,學生座談過。我在微軟亞洲研究院里也接觸了來自各個學校的學生,談得多了,就有下面的一些想法。這里我主要談計算機軟件的教育。
想來的人來不了
學校里都是按照高考/考研的成績決定專業去向,我聽到一些喜歡玩游戲的學生特別想來軟件學院,但是由于成績不夠好,來不了。 一些成績挺好的學生優先選擇了軟件專業,因為大家都說這個專業好找工作。 但是到了快畢業的時候才發現 不對勁, 于是有人后悔: “其實我不喜歡寫程序,我想轉行。” 咳,如果你的位置留給當初那些喜歡玩游戲的學生該多好。
?
教務處的規定
老師反映說,本來想鍛煉同學的團隊協作精神,期末大作業讓同學們分組合作完成一個項目,但是沒想到教務處不同意。 教務處堅持大作業必須每個同學單獨做,不能搞團隊協作,其理由是團隊協作之后,有人就會偷懶!
其實,讓學生一個人去做,他/她也有可能去糊弄,抄襲。 而且正因為缺少協作,一個人不能完成很高質量的軟件,單干的同學更有可能去抄。 最后老師爭不過教務處,只好讓每個同學單獨做一個項目了事,一個普通學生很難做完一個項目,怎么辦? 那只好 “參考” 別人的東西,有人負責測試么? 沒有。這也是每個班的四五十個學生作業只有4-5 個版本的原因之一。這么多項目,老師能一一仔細審閱么? 顯然也不行。 但是這事教務處的規定,就這么糊弄過去吧。 據說在一些學校里,教務處非常強勢,能決定老師的績效考核。
?
知識和技能
很多人認為,大學是傳授知識的地方。很多知識 (Knowledge)可以講授,同學們也可以自己查找,學習。 例如程序設計語言的一些邊邊角角的規定,在工作中如果忘了,那就現查資料,或者寫一個測試程序驗證一下。 但是技能 (Skill) 則要通過實際的反復訓練,才能獲得,并優化。 我看到同學們經常能夠背誦 “在設計中應該高內聚,低耦合”, 但是在實際中根本不知道如何應用。 就如同大家都可以在理論上掌握如何下圍棋 - “要讓每一步占領全局最有價值的要點”, 但是在實戰中下的棋卻支離破碎,潰不成軍。
我們在考試的時候,能不能少考一些死的知識,而多考一些技能? 學校里能練習什么技能呢?很多:
- 自己學習的能力 (能不能自己學習一門語言,然后應用? 為什么非得先要老師講解?)
- 理解別人的意思和動機 (inter-personal awareness)
- 表達自己想法的能力 (不妨分析已有軟件的優劣, 明明白白地寫一篇博客,描述自己項目的規劃,等等)
- 說服,影響同伴的能力 (大家一起合作,如何能讓團隊按自己的想法前進?)
- 制定計劃,并執行計劃的能力 (是自己的計劃,而不是老師給訂的計劃,能堅持到底)
- 總結,改進的能力 (一個項目之后,能否心平氣和地總結,改進?)
更多關于知識, 技能, 和技能的反面:
技能的反面 - 魔方和模仿
基礎知識很扎實 - 但是面試就是做不出來, 怎么辦?
?
新的,舊的,合適的,用心的,還是圖省事的
很多同學對IT 相關課程的第一個抱怨就是 “我們那里還在用VC6.0!”, 用老的工具來教學,合適么?這要看情況,如果是講授數據結構和算法入門,VC6.0, Turbo C,或者三十年前的Unix 系統上的C 就足夠了,問題是,老師用了這些舊的(穩定的)工具,給學生們講了什么呢? 老師是否用心改進課程呢? 老師是否意識到,當所有學生都有自己的筆記本電腦的時候, 是否還要堅持大家去 “機房” 上機,是否利用便利的網絡環境給大家分享閱讀和視頻教學的內容? 老師是否意識到,當所有學生都有手機的時候, 是否可以不在要求做傳統的 “圖書館管理系統”, 而是做一些手機端的軟件,同樣也能鍛煉學生的專業能力??一步一步追問下去,大家可能意識到老師也就是要圖省事,用最少的精力把教學任務完成了,把主要精力花在 “科研”, “橫向項目”,“申報課題” ... 上面去。
說到用老的教材,二十多年來,國外一些一流大學一直在用 SCIP 作為新生的編程入門教程,怎么樣,我們敢用么?
大學之道 vs. 職業培訓
在我和許多中國大學老師交流的過程中,當我介紹了 “構建之法”的教學方法之后, 一定會出現這樣的反饋: “我們大學的教育使命,和職業培訓是有區別的...”,似乎在教學中使用了工業界流行的工具, 使用了流行的博客、MOOC 等方法,讓學生為職業做了很好的準備,就是不入大學法眼的 “職業培訓” ?!??雖然絕大多數的學生上大學的目的就是要找好的工作,但是很多專家不以為然,從他們的言談中,可以看出,他們認為大學是培養完整的人, 高尚的人,是培養科學家的,而不是做一般工作的...?? 科學家和其他工作類別的高低且不論, 我們退一萬步,姑且同意大學就是培養科學家的, 那么:
- 科學家也是一種職業,大學在找科研帶頭人的時候,也是和公司招人一樣,列出各種條件,為何大學不能把科學家的職業要求明明白白地教給學生呢?
- 中國的大學在招 “科學家” 的時候,招聘流程和其他行業招人也很類似,說明也是按 “職業” 的規律來招人的, 而且有些學校通常會限定許多條件, 例如必須在國外獲得某些學位等等, 這么說中國的大學培養不了科學家? 這不是和上面提到的中國大學主要目的互相打臉了么?
- 科學家(或者說科技工作者)也是一類職業,也有它本身的規律,也有原理,知識,技能。 它不是隔絕于其他職業之外,而是和其他職業有很多共性。成功的科學家和成功的其他職業人士一樣,展現出良好的分析,表達,個人管理,時間管理的能力,正確處理 “合作+競爭”的關系,還有項目管理的能力,等等。 這些能力的獲得,都需要練習,特別是 “專注的,有反饋的,持續改進的” 練習。為何這些技能不能在大學里訓練呢?這樣的訓練不就是職業培訓的一種方式么?
- 科學家作為一種職業,也要持續地給自己充電,通過出席研討會、閱讀、或參加課程來學習。例如最近一些科學家都參加了如何使用 “云計算” 來幫助科研的課程,或者參加 “教育心理學” 的課程。 科學家在參加這種課程的時候, 也有企業的人員或中小學老師參加, 大家不都是一樣職業的培訓么? 為何看不起職業培訓呢? 在培訓過程中,有人獲得頓悟,立即成為 “完整的人,高尚的人”; 也有人是漸悟,逐漸提高了自己的修養;還有人就是學到了一些技能,這也無妨,對吧?
- 或曰:"大學是培養人心智的地方,急于把自己安塞到社會中的某個崗位會讓大學生急功近利,失去本真的學習快樂。"? 對IT 專業來說,心智如何培養?平時抄作業,考前哀求老師畫重點,就能得到心智? 想偷懶,不想面對現實,那就直說,不要拿“心智”來搪塞,?要格物致知,要深入研究,練習,要分析IT行業發展的源和流。 沒有腳踏實地的實踐而奢談 “心智”, 仿佛臨淵羨魚,或幻想空中樓閣。
- “大學之道,在明明德...” ?, "為天地立心,為生民立命,為往圣繼絕學..."? 古人的話,真的很美。但別自我麻痹太多,現代的大學之道應該能分解為可衡量的,可執行的,可具體傳授的各個部分。教育者要分而治之,把大學生的職業培養搞好,讓大學生畢業后能躋身于一流的研究院或大學,一流的企業。或者,畢業生去了一些普通的單位,甚至沒有單位,但是他們有信心在社會上自立。這,就是最基本的大學之道。
很多持有“大學之道” 這種心態的人, 他們想象中的老師就是不食人間煙火的得道之人,學生是來求道,但是有時你看老師的生活和工作也很憋屈,他們得 “道” 了么?如果沒得道,怎么能教學生呢?大學的師生關系應該如何?請看這個詳解。?
學校教育的目的
有一年, 我教的一個班是大三的學生, 他們反映課程壓力很大 (同時上編譯原理, 數據庫等), 我跟系里建議是否把軟件工程挪到大四去上, 這樣他們學的數據庫知識能更好地用上. 系里的老師列出了很多擔心, 其中最重要的一點是 - 學生們大四的時候要考研, 所以不能上太累的課, 要讓他們有時間為考研復習! 我們談論了許久, 我終于明白學校在選擇 “讓學生上有意義的課” 和 "讓學生有時間準備考研" 兩者之間, 選擇了后者。 其實天朝學校的目的大抵如此 - 讓學生順利地升入下一個階段, 就成功了。 在這種思想指導下:
小學六年級開始復習, 準備小升初;
初三開始復習, 準備升好的高中;
高三開始復習, 準備升好的大學;
大四開始復習, 準備考研;
有些同學還要花很多時間準備考一個 “國考”。
最后, 學生到了社會上, 發現再也沒有考試了, 要靠真本事, 怎么辦? 學校可曾教過他們? 老師們, 你自己銳意改革過么? 你們可曾真的教過學生 “銳意改革, 開拓創新”??
想創新, 如何教創新
到大學里聽領導的報告,你會聽到很多次 “創新”和與“創新”相關的詞匯。 你覺得這個學校的領導的確非常想創新。 但是另一方面,我聽到一些同學反映教材,教案,教學方法都是幾年甚至十多年不變的老一套,和實際非常脫節。 難道老師們不想在教學上創新么? 后來有比較了解內情的人跟我說,現在軟件相關的專業非常熱門,畢業前景也不錯,一些計算機系的老師能拿到不少項目,資金也不少, 老師和領導都忙著開公司去了。他們為什么要在教學上創新? 重用幾年前的教案不也這樣過來了么?!
在軟件學院里,怎么教創新? 除了讓學生打下堅實的專業基礎之外,學校可以做的一件事就是 -
?
允許學生實驗,失敗,再實驗,再失敗。
?
我不用重復愛迪生經過幾千次失敗才發明可以實用的電燈的故事了,創新不是公式推導,不是一旦學好例題,就能模仿炮制的解題方法。 要給同學們試驗和失敗的機會。 有人問 - 學生失敗了,課程怎么給分呢? 如果同學們能夠認真總結經驗。同樣也可以得到比較好的分數。 這些同學真正到了工作中, 以前失敗經驗教訓就能幫助他們更好地創新。我在給學生上《軟件工程》課程的時候的評分標準大致是:
一些關于創新的博客:
創新 - 王屋村的魔方們
IT 行業的創新 - 創新的迷思
?
清一色
一方面,計算機系和軟件學院的各年級學生年齡一樣,背景一樣。 老師像種莊稼一樣,一茬一茬的播種和收割。每次課程和作業,同學們都是從頭開始。大家懂得一樣多, 大家都是理工科學生的思維。
一些軟件學院收了雙證的學生后,情況好了一些,畢竟有一些別的行業,別的經歷的同學進來了。這些人組成的團隊能互相取長補短,對學生們很有幫助。 我建議要盡量打破 “清一色” 的配置模式, 很多學校有 “工業設計” 等設計類專業,“經濟管理”等管理類專業,他們其實可以在學校里就和軟件專業的學生一起上課, 做項目, 拿學分。
?
三文魚模型
很多學生在學校里認真學習了很多軟件知識,在同學中間也很牛的樣子,于是他們躊躇滿志地畢業了。 但是到了工作單位,他們發現項目組中老中青,各種背景的人都有。 沒有人請自己從頭設計全新的軟件, 自己得從讀別人的代碼,維護軟件系統上手。 我在《移山之道》 這本書里寫過 “三文魚模型”:
?
軟件學院的小慧老師對阿超抱怨,軟件工程這門課看似容易,實際太難教。
小慧說:我是按照經典的瀑布模型來講課的,本來以為會是高屋建瓴,一瀉千里,但是實際情況是這樣的:
1. 需求分析:學生們都不懂企業的需求是什么,上課睡覺。
2. 設計階段:學生們畫了許多 UML 圖,用設計工具畫了各種形狀的圖形,僅此而已。
3. 實現階段:學生們開始熱烈討論,UML 圖早已經扔到一邊。
4. 穩定階段:學生們中十分之一的人開始寫代碼,其他人不知道在干什么.代碼大部分情況下都不能工作,所有設計過的種種黑箱和白箱測試都無從開始。
5. 發布階段:這個階段只有一天時間,就是最后檢查的那一天,同時還有人在調試程序.
6. 維護階段:課程結束了,同學們對自己的產品沒有任何維護,放假了!
最后大部分同學們都說自己根本沒學到什么本事,然后下個學期,新的一批學生進來重復這一過程。。。
阿超沉吟半晌,說,事實上,一個軟件工程師在現實世界中的職業發展好像和瀑布相反:
1. 畢業進入公司,開始維護一些已有的軟件(維護階段)
2. 能夠在項目中改一些bug,然后發布小規模的更新版本 (穩定/發布階段)
3. 負責重寫一個小小的模塊,沒有文檔,寫很多代碼(實現階段)
如果做得還可以, 就會進入下一階段:
?
4. 有機會設計比較大的模塊,自己寫一些文檔 (設計階段)
?
過了很長時間,才發展到下面這個階段…
5. 有機會去和用戶談新的項目 (需求分析)
?
那軟件工程的課程能否也像這樣安排? 可以試一試這樣的流程:
1. 開始維護以前同學開發出來的程序,理解程序。
2. 找bug,改bug,重構小部分代碼,以滿足用戶的需求。
3. 一部分同學可以開發測試用例
4. 在現有版本的基礎上做增量開發
??? a) 理解需求 (這個時候理解了客戶需求是什么)
??? b) 設計
??? c) 開發
??? d) 回歸測試 (用到上面開發的測試用例來保證軟件質量)
小慧問:那這是什么模型?
阿超說:嗯,看起來像是從瀑布下方一步一步上溯到源頭,不妨叫“大馬哈魚洄游模型” , 或者簡稱“三文魚模型”
我們在學校里,不妨多實驗一些不同的模型和學習方法。
?
參觀學習
很多學校貌似也很重視和業界交流, 他們的領導經常去世界高水平的學校和公司考察。 參觀, 感慨, 吃飯, 合影, 回國 … 又參觀, 感慨, …
我就不多說什么了, 看下面的兩則笑話:
?
http://sports.sina.com.cn/c/2011-10-27/08005804467.shtml
前日本足協主席川淵三郎這樣說,在他的記憶中,中國足協幾乎每年都會派考察團到日本學習。 至于效果,他直言不諱:“這么多次考察,都白來了,中國足球沒有任何提高。”
還有日本足壇人士提到:你們總是喜歡強調“國情”,當然我們也很理解,畢竟大家屬于兩種不同的社會制度,但這絕對不是理由,也不應該老掛在嘴邊。
?
王屋村的果凍到阿超家, 說是找一個東西, 阿超幫他找了半天, 無果。 最后兩人都累了, 阿超請果凍吃了炸醬面。
阿超問: 你想想, 東西到底是在哪里丟的?
答: 很可能在我自己家里。
問: 那為什么來我家找?
答: 我家沒燈, 你這兒有燈, 亮堂! (還有炸醬面...)
?
期望
很多人都對學校有各種期望, 我也有過期望, 希望 (http://www.cnblogs.com/xinz/archive/2010/11/27/1889829.html).
但是, 期望越高, 反而被動, 失望也越大, 就像有人說的 - 上大學, 結果卻被大學上了.
馬克·吐溫說過一句話:
I have never let my schooling interfere with my education.
?
我年輕的時候不知道這句話是什么意思, 現在好像懂一點了.? 人的成長, 成熟, 也許絕大多數都不能只依賴于學校, 去埋怨學校說 - 你為什么沒有把我教好??
?
你不但不應該浪費時間去依賴, 埋怨學校, 而且還要有意地擺脫學校 (以及其他”體制”) 對你的影響 – you own your own education, don’t let your school interfere with it.?? 你對你自己的教育和成長負責, 課本不好? 有網絡, 象牙塔不爽? 到社會去。?
有人說:
人都是在路上成熟的
?
但是你得上路啊, 靠體制, 靠青年導師, 靠... 都不如靠自己, 自己走吧.
"青年又何須尋那掛著金字招牌的導師呢?不如尋朋友,聯合起來,同向著似乎可以生存的方向走。你們所多的是生力,遇見深林,可以辟成平地的,遇見曠野,可以栽種樹木的,遇見沙漠,可以開掘井泉的。問什么荊棘塞途的老路,尋什么烏煙瘴氣的鳥導師 ! "
?
總結
以上是生活随笔為你收集整理的对大学 IT 专业教育的反馈的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小象优品打款中是不是成功了
- 下一篇: 助农贷款需要什么条件