现代软件工程讲义 0 课程概述
這門課的教學(xué)方案在這里. 根據(jù)學(xué)生和學(xué)校的具體情況, 可以進(jìn)行調(diào)整。?
師生關(guān)系
首先要明確的是, 在這門課中的師生關(guān)系是什么樣的.? 大學(xué)目前的師生關(guān)系是怎樣, 什么樣才是理想的師生關(guān)系?? 我們先看一些例子:
Retailer / customer (餐館/食客)?
一些學(xué)生說, 我既然交了學(xué)費來上學(xué), 就像交了錢去自助餐廳一樣, 想吃多少, 想吃什么, 都是我決定.? 如果不喜歡, 就去下一個餐廳好了。 上課能這樣么?? 在飲食行業(yè), 顧客拍拍屁股就可以離開一個餐館.? 在一些學(xué)校里, 是有不同的老師上類似的課程, 同學(xué)們可以根據(jù)老師的介紹和師兄師姐的提醒選擇適合自己的老師。 但是在學(xué)校里,? 學(xué)生必須要在一定時間內(nèi)作出選擇 (必修課), 老師掌握著最后給學(xué)生多少分, 學(xué)校掌握著畢業(yè)證。? 所以不能把餐館/食客的關(guān)系照搬過來。 學(xué)生們非但不能成為有主動權(quán)的顧客, 反而會被人以分?jǐn)?shù)/學(xué)位/畢業(yè)證相要挾, 成為下一種關(guān)系中的弱者:
Boss / employee (老板 / 雇員)?
在學(xué)校里, 很多學(xué)生把自己的指導(dǎo)老師叫做 ”老板”, 學(xué)生變成打工仔或打工妹。 不光有大老板, 還有小老板,? 因為大老板太忙, 平時都是小老板在管理。 在一些學(xué)校, 博士生要延期一年才能畢業(yè)成為了眾多潛規(guī)則之一. 學(xué)生雖然是"雇員", 但是并沒有雇員的權(quán)利。
Baby-sitter / babies (保姆 / 幼兒) ?
還有一種情況,? 老師像保姆一樣, 為學(xué)生操辦一切, 把課程內(nèi)容煮成嬰兒食品, 一勺一勺地喂給同學(xué).? 同學(xué)們有什么問題, 都去找老師搞定。 學(xué)生把老師反復(fù)咀嚼過的東西再咀嚼一遍, 這種模式也許可以叫做 Learning by re-chewing.? 這個模式和這門課的 “做中學(xué)” (Learning By Doing) 有很大的區(qū)別。
Buddies / Buddies (哥們 / 哥們) ?
還有一種情況是, 老師和學(xué)生心照不宣一起混,? “你對我好, 我就對你好". 這里有一條新聞:
http://edu.163.com/10/1106/10/6KQ4JC8800293L7F.html??
部分大學(xué)課堂師生心照不宣一起混
“老師與學(xué)生一起應(yīng)付”,這并非大學(xué)生們學(xué)習(xí)之余的調(diào)侃之語,而是不少大學(xué)課堂的真實寫照。
Stranger / Stranger (路人甲 / 路人乙)?
很多學(xué)校有巨大的新校區(qū),? 老師對著百人左右的課堂宣講幻燈片, 下課后就開車回老校區(qū)或市區(qū)的家里. 老師不認(rèn)識學(xué)生, 也未必有精力了解具體學(xué)生的情況.? 雙方形同陌路。
Prison Guard / Prisoner (獄警 / 犯人)?
還有一種情況是老師想方設(shè)法讓學(xué)生來上課,? 點名, 突然考試, 指紋打卡, 等等.? 學(xué)生則想方設(shè)法逃課。 學(xué)生視上課為坐牢, 巴不得早一點解放。對于一些同學(xué)來說,? 老師就是學(xué)生和 “自由”?之間的一道障礙。 ?
說了這么多,? 我心目中理想的師生關(guān)系是什么?? 是“健身教練 / 健身學(xué)員” 的關(guān)系。
大家可以從各種各樣的健身館中看到這樣的關(guān)系,? 像健身,減肥,瑜珈等等。 在這種關(guān)系中, 是誰想提高自己水平?? 是那些學(xué)員, 這些學(xué)員的想法得足夠強烈, 他/她才會花錢去參加這樣的健身活動。 在健身活動中, 誰要做各種運動, 流汗呢?? 是學(xué)員。 誰在這個活動中對別人指指點點, 鼓勵別人更加努力? 是教練。
那為什么教練可以這樣做?? 因為教練有下面的資源:
教練和學(xué)員的關(guān)系如果確定,? 就很好辦了。 每一個來學(xué)習(xí)的學(xué)生,? 都是想學(xué)好軟件工程這門技術(shù)才來的。? 各人的先天條件不同, 目標(biāo)也未必相同。? 有些同學(xué)想成為世界一流的程序員,? 那老師就會以世界一流的標(biāo)準(zhǔn)來要求學(xué)生。
誰要在這門課中寫代碼, 做實驗, 找需求, 修bug?
是學(xué)生, 不是老師。
誰要看各種與軟件工程相關(guān)的書籍, 博客, 并定期匯報??
是學(xué)生。?
誰給各個學(xué)生設(shè)計練習(xí), 回答疑問??
老師。
如果學(xué)生的努力低于他自己目標(biāo)的要求,? 誰會批評這個學(xué)生??
老師會。
有些學(xué)生說 - 老師, 你講的特別好, 我特別想提高, 但是我太忙了, 所以沒時間寫程序, 我就是來聽聽。。。
這種情況放在健身學(xué)員的類比中會是這樣:
??? 教練, 你講的特別好, 我特別想減肥健美,? 但我太忙了, 沒時間練, 所以我辦了卡, 就是來聽聽。。。
[這種學(xué)員還真的有,? 據(jù)說健身場館的很大一部分利潤是來自于那些辦了年卡但是很少來的人]
教學(xué)方法
那么軟件工程課一般是怎么教的呢?? 我在這一篇文章里也提到:
軟件學(xué)院的小慧老師對阿超抱怨,軟件工程這門課看似容易,實際太難教。
小慧說:我是按照經(jīng)典的瀑布模型來講課的,本來以為會是高屋建瓴,一瀉千里,但是實際情況是這樣的:
最后大部分同學(xué)們都說這門課特別沒用,自己根本沒學(xué)到什么本事,然后下個學(xué)期,新的一批學(xué)生進(jìn)來重復(fù)這一過程。。。
我在文章中建議, 軟件工程的教學(xué)應(yīng)該考慮讓學(xué)生一直能保持有具體的事情做, 而且做了之后能看到效果。? 不要在學(xué)生剛上課的時候就要求寫一個需求分析, 學(xué)生上哪里分析去?? 如何看到效果???
所以在《現(xiàn)代軟件工程》 這門課中, 我安排了個人項目, 兩個結(jié)對項目, 讓大家充分有時間把個人技術(shù)和一對一的合作技術(shù)做好, 然后再開始團(tuán)隊項目。 一個理想的流程應(yīng)該是這樣:
?
負(fù)擔(dān)問題
很多學(xué)生一聽說我給他們安排的學(xué)習(xí)計劃, 第一個反應(yīng)往往是 - 負(fù)擔(dān)太重了!? 讓我們回到健身館,? 如果一個體質(zhì)正常的青年想健美, 教練安排他舉杠鈴, 他會說什么呢 – “杠鈴太重, 我走了!”?
負(fù)擔(dān)是相對的, 這要看大家要跟誰比了。 我在清華大學(xué)上課的時候, 也有學(xué)生反映“負(fù)擔(dān)太重”, 我只好和他們一起回憶清華大學(xué)校長及各級領(lǐng)導(dǎo)提出來的目標(biāo) – “建設(shè)世界一流大學(xué)" .? 如果要建設(shè)世界一流大學(xué), 那要跟世界一流大學(xué)比。? 在軟件和軟件工程方面世界一流的大學(xué)是哪一家呢? 我想唯有跟卡內(nèi)基·梅隆大學(xué) (CMU) 相比,? 才能不辱沒清華大學(xué)的名聲。
CMU 有一門本科生的課 - Build Virtual World,?? 是由已故的Randy Pausch 教授講授的, 我們可以比較一下。
| CMU – Build Virtual World | 現(xiàn)代軟件工程 |
| 5 projects/semester 2 week/project, done by 4 person team Rotate team member in each project | 4 project/semester: ???? 1 Idividual Proj. ???? 2 Pair Proj. ???? 1 Team Proj. ? team project has 6 people. rotate team member in each project. |
他們一個學(xué)期要做 5 個項目, 我們只做 4 個。誰的負(fù)擔(dān)重?
所以, 不是我要為難大家, 而是校領(lǐng)導(dǎo)的意思, 同學(xué)們可以找校領(lǐng)導(dǎo)說 – 我們不想成為世界一流大學(xué), 成為五道口一帶的二流大學(xué)就可以了。 如果領(lǐng)導(dǎo)同意了, 我當(dāng)然可以降低負(fù)擔(dān), 而且我還可以把師生關(guān)系調(diào)整為 “哥們/哥們”, 要混還不容易嗎?!
我們可以看看古代的歷史,? 為古羅馬帝國開拓疆土的士兵, 他們是如何培訓(xùn)的呢?? 請選擇:
a) 他們不經(jīng)過培訓(xùn), 直接上戰(zhàn)場
b) 他們只學(xué)理論, 沒有實戰(zhàn)
c) 他們用比實戰(zhàn)更輕的武器訓(xùn)練
d) 他們用和實戰(zhàn)一樣重的武器訓(xùn)練
e) 他們用比實戰(zhàn)重一倍的武器訓(xùn)練
先別說成為世界級的士兵或?qū)④? 如果大家想在戰(zhàn)場上活得比別人長, 你會選哪一項呢????
這個道理對IT 行業(yè)的學(xué)生也是一樣的, 在人潮洶涌的招聘市場, 我們可以問一下那些學(xué)生 -
你平時在學(xué)校里是如何為將來的職業(yè)準(zhǔn)備的?
a) 不經(jīng)過準(zhǔn)備, 直接上
b) 只學(xué)理論, 沒有實戰(zhàn)
c) 用比實際工作要求更低的水平訓(xùn)練
d) 用和實際工作一樣的要求訓(xùn)練
e) 用比實際工作高一倍的要求訓(xùn)練
在這片神奇的土地上, 我們或許還可以聽到 f) 的回答:
f) 我不用準(zhǔn)備, 我爹叫阿剛。?
負(fù)擔(dān)通常會帶來痛苦, 但是和將來的后悔相比, 哪個更痛一些? 這個問題也寫在 NBA 凱爾特人隊的訓(xùn)練館里:
?
??
如何判分
“分, 分, 學(xué)生的命根。 ”
我在剛開始教這門課的時候, 我看到助教給同學(xué)們的作業(yè)判分是這樣的模式:
最好的作業(yè)10分, 次好的9.5, 然后依次平滑下降, 有些學(xué)生交作業(yè)很遲, 有些學(xué)生寫的程序都不能編譯, 這些學(xué)生都得到6分左右。
這樣的分?jǐn)?shù)體系看起來非常和諧, 但這不是軟件業(yè)的實際情況.? 我們?nèi)芜x一種軟件類型,? 例如字處理軟件, 最好的軟件在市場上有多少份額? 第二名占有多少?? 第三名呢? 第四名? 誰知道字處理軟件市場的第四名是誰? 搜索引擎呢?? 第一名的占有率是多少? 第二, 第三, 第四呢?? 第四名的軟件也是由優(yōu)秀的軟件人員開發(fā)的, 他們也許加班更多,? 那為什么只有那么少的份額? 這公平么?
由于軟件市場有 ”贏者通吃” 的規(guī)律 (第一名會占據(jù) 50% 以上的份額),? 我們在訓(xùn)練中也要體現(xiàn)這一規(guī)律. 所以我規(guī)定:
如果大家做同樣類型的作業(yè), 則采用以下規(guī)則:
完成質(zhì)量在第一檔次的同學(xué)(一個或多個), 得滿分。
完成質(zhì)量在第二檔次的同學(xué), 得 1/2 的分。
在第三檔次的同學(xué), 得1/3 的分?jǐn)?shù)。
以此類推…
在很多作業(yè)中,? 我或TA會寫一個比較平庸的解法 (例如用冒泡排序或線性查找)參加作業(yè)評比。 這個平庸的作業(yè)會得0分, 那比這個還差的作業(yè), 就會得負(fù)分,? 從-1, –2, –3 類推下去.? 下面是兩個評分體系的比較:
這樣公平么?? 很多人會問。? 如果一個同學(xué)寫了沒有任何bug 的程序, 得到10分, 另外的同學(xué)程序有 1 個bug, 得到9.5 分, 程序編譯都不過的同學(xué), 也得6分, 那你覺得這樣對寫了全對程序的同學(xué)公平么?? 如果一個同學(xué)的程序連普通的冒泡排序都比不過, 老師和TA在花時間陪他玩,? 他欠我們分?jǐn)?shù), 這樣的人不得負(fù)分得什么?
做中學(xué)
上《現(xiàn)代軟件工程》 的同學(xué), 都是大三到研一的同學(xué),? 應(yīng)該具備基本的學(xué)習(xí)能力和開發(fā)能力,? 軟件工程和其他類的工程 (如航天工程, 化學(xué)工程) 不一樣, 我們每天都可以用到軟件工程的產(chǎn)物 (軟件),? 搭建, 學(xué)習(xí)一個軟件開發(fā)平臺比航天化工要容易很多 (注: 在自家后院放二踢腳不是航天工程), 相關(guān)的學(xué)習(xí)資料也是非常容易獲得。 在這個情況下,? 學(xué)生們可以在“做”的過程中學(xué)習(xí), 這也叫”做中學(xué)”.? 做了, 有疑問, 再問老師, 問專家, 這樣學(xué)習(xí)的效果會好很多。 我為這門課準(zhǔn)備了三本課本, 一本指定的閱讀教材, 二十本參考書 (對, 20 本), 同學(xué)們平時可以多看書。
真實的項目
在這門課中, 我鼓勵學(xué)生做自己決定的項目, 但是要求他們要做”真實的項目” – 有真正用戶的軟件。? 那些 “經(jīng)典” 的項目, 例如圖書館管理系統(tǒng), 學(xué)生學(xué)籍管理系統(tǒng)等, 是不符合我的要求的。? 項目要有活的用戶, 只有活的用戶才有活的需求, 才有活的場景, 活的測試用例。 只有活的用戶才決定同學(xué)們寫的軟件是否值得使用, 有些團(tuán)隊寫的小軟件很好用,? 在合適的用戶群中引起共鳴, 短短時間內(nèi), 就會有幾千到幾萬個用戶 (像北航團(tuán)隊開發(fā)的魔方程序), 也有的團(tuán)隊費了老鼻子勁, 寫出來的東西用戶量小于10, 自己團(tuán)隊成員包括在內(nèi)。 這些不同的用戶數(shù)量會迫使項目團(tuán)隊反思當(dāng)初在需求分析, 設(shè)計上的問題。 另外這門課并不是算法競賽, 或者代碼集中營, 大家比的不是如何快速敲打出某個算法, 而是如何在有限的時間內(nèi)交付有價值的軟件給特定的用戶。 “真實”這一條件也促使大家做 “現(xiàn)實”的項目和項目管理。 很多學(xué)生有宏大的夢想,? 但是在短短的 8 周團(tuán)隊項目時間內(nèi), 甚至短短的 16 周課程時間內(nèi), 他們發(fā)現(xiàn)宏大的構(gòu)想被自己程序的bug 搞得千瘡百孔, 轟然倒地。?
?
學(xué)生的收獲
在這門課里, 有付出, 就會有收獲, 收獲體現(xiàn)在下列方面:
這個課程不講什么?? 這個課程不具體講某一個程序設(shè)計語言, 也不講 UML, 設(shè)計模式。 這些內(nèi)容都應(yīng)該屬于其它課程。
但是從課后的自我反饋來看, 學(xué)生往往在某一門“程序設(shè)計語言”很有收獲, 為什么呢?? 第一是因為這門課的個人項目和結(jié)對項目讓他們有充分的機會學(xué)習(xí)和鞏固關(guān)于某一語言的知識;? 另外, 他們第一次把某一門語言用到了一個有分量的實際項目中去, 從而深入地了解這個語言的特性。這可以說是<現(xiàn)代軟件工程> 的一個好的副作用。
任何一門課都不會一帆風(fēng)順地講下來, 所有人皆大歡喜。 老師學(xué)生需要時間來適應(yīng),交流,? 才能逐步提高。 吹了這么多, 到底學(xué)生反映如何? 下面是清華大學(xué)的學(xué)生對這門課的不記名評價。
| 評分內(nèi)容 | 2007 | 2008 | 2009 |
| 熱情、認(rèn)真、投入、嚴(yán)謹(jǐn),教書育人 | 95.45±3.80 | 95.00±3.42 | 98.90±2.21 |
| 講課思路清晰,重點、難點突出 | 94.55±4.04 | 89.29±5.77 | 98.90±2.21 |
| 講解生動、有吸引力,能激發(fā)學(xué)生的求知欲 | 92.73±5.15 | 90.71±5.37 | 98.91±2.21 |
| 師生互動,鼓勵學(xué)生質(zhì)疑,并給予思路的引導(dǎo) | 94.55±4.04 | 93.57±3.69 | 98.91±2.21 |
| 提供或推薦的教學(xué)資料有助于學(xué)生學(xué)習(xí) | 93.64±4.23 | 86.43±8.19 | 99.00±2.21 |
| 作業(yè)等課程訓(xùn)練有利于課程內(nèi)容的學(xué)習(xí) | 94.55±4.04 | 90.00±4.95 | 99.00±2.21 |
| 考核及評價方式能激勵學(xué)生主動學(xué)習(xí)與鉆研 | 92.73±5.15 | 87.86±4.88 | 97.89±3.04 |
| 注重學(xué)生創(chuàng)新意識和獨立思考能力的培養(yǎng) | 92.73±4.37 | 91.43±4.44 | 98.91±2.21 |
| 對學(xué)生課外學(xué)習(xí)給予指導(dǎo)、建議 | 92.73±4.37 | 91.43±4.92 | 99.00±2.21 |
| 學(xué)習(xí)本門課程后有收獲 | 92.73±4.37 | 90.00±5.38 | 97.91±3.04 |
上好課很難, 老師, 學(xué)生都不容易, 這個博客講了一些。
一些學(xué)生清澈的, 充滿求知欲的眼神告訴我, 他們最關(guān)心的是 -
??????????????? 怎么用最小的代價, 讓我過了這門課!
上了這門課就知道代價了。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的现代软件工程讲义 0 课程概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux7端口聚合,centos7配置
- 下一篇: 现代软件工程讲义 个人项目和结对项目练习