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