团队阅读——怎样学习软件工程
看到這個題目,我首先想到的是鄒老師對于軟件工程教學負責的態度和踐行的方法。鄒老師在課堂上跟同學們的互動一直就非常高,對同學們項目工程的進展都給予了十分詳的關注。現在相當于做個調查,讓我們從受教育者的角度,談一談對軟件工程教育中的看法。
首先我們閱讀了給出的幾篇關于軟工教學的材料:
一個是軟件工程不等于計算機科學(http://blog.sina.com.cn/s/blog_553f355101017g6l.html),另一個是軟件工程教育中實踐者的反思理論(http://blog.sina.com.cn/s/blog_553f355101017j8q.html)。兩篇都是譯文,譯者是新悅論壇的博主靈鳳。還有一個是關于軟件工程教育和多學科結合的(http://norvig.com/hybrid-research.pdf)。
軟件工程和計算機科學,都是從傳統數學發展而來的,但與傳統數學都有本質的區別。同時這兩者之間也有相互聯系的地方。計算機科學顯得更為理論化和嚴謹,許多命題有明確的,有正式的結果,即使是對于其中開放性的問題,我們期待的新的結果也有正式規定。對于軟件工程領域,相對而言令人感到有些不靠譜。許多東西沒有明確的概念界定,結果的描述都是一般(usually)或者大致(general);今天的工作對明天的幫助可能有也可能沒有;新的方法往往推翻舊的方法。軟件工程中的主題都有一個共同的屬性:直接涉及人類活動的(directly involves human activity),這些學科的結果可能被人類所用,但他們的結果不會直接影響到人類。軟件工程有人類必不可少的成分,例如軟件的可維護性,安全性,可塑性等。從聯系上看,經典的計算機科學有助于軟件工程,但不是全部。良好的軟件工程還包括創意,遠見,多學科思維和人文科學。
根據以往教育工作者反思得出的經驗,學生通過實驗室實踐——一種建筑學校的基本訓練方法——通過一個具體的軟件工程項目的開發和改進,能夠更深刻的學習與之相關的理論知識。軟件不是一種傳統意義上的產品,比如房屋,工具之類的,其設計已有設計對象的影響。這使得開發軟件系統過程中有兩個重要因素:一是復雜性,二是有效的溝通。軟件作為一個工程化的產品,強調高效,可靠,功能強大,易于維護。因此軟件開發專業化的,系統化的方法加以指導。采用實踐者反思的方法,學生不能想要什么老師就教什么,而是要訓練他們:要以自己的方式或手段來獲取成果。沒有人能看到他,他不能看到剛才自己'說'的過程,雖然說可以引導合適的他們看見,從而幫助他看到他所需要看到的。更具體地說,在軟件工程方面,如果我們能更好的理解一個軟件系統的開發過程,我們就可以更好地去指導這一過程。
假如一個杰出的結構工程師,一位對建筑材料,應力和應變,載荷分布,風切變,地震力等方面了知識如指掌的世界級的專家,在設計一棟建筑物時,可能與客戶有一個很糟糕的談話,不能設計一個令人滿意的居住的空間,白談論審美感了。成功的架構師,包括創意,遠見,多學科思維,和人文學科。搞軟件系統就像搞建筑一樣,先要由架構師設計軟件的架構,而且這個架構師應該是身經百戰的,對各方面的軟件系統都有熟悉。這類人才要具備多方面的思維和知識,特別是未來的人類將很大程度上工作、學習和生活在軟件這個虛擬社會里,如何保持一個軟件系統的可持續性至關重要,需要有這類人持續關注整個過程。
聯系到我們自己的計算機學科的學習過程,從大一到大四的課程安排上可以看出,這是一個有結構的有計劃的學習體系,先驅課程與后繼課程依序,理論課程和實踐課程結合,工科課程與人文課程相輔,因此我個人感覺還不很不錯的。關于改進,我讀了鄒老師另一篇博客:習而學的方法才有了啟發。
然后我們采訪了幾位前大班的同學,向他們了解了一下他們的軟件工程課的相關情況。相比于我們的軟件工程課,他們的課看起來確實顯得有些水。
先從作業方面來講,他們平時基本就沒有什么作業,只有一個期末要交的大作業。而我們則是做了個人作業,結對編程,團隊項目,從中收獲的東西相對比較多。個人作業,結對編程什么的他們完全沒有想過。
接著談在做項目時的開發技巧,或者說叫開發方法。我們通過上課和閱讀老師的博客了解到,做項目并不是高興了就寫一點,不高興就拖兩天這么做完的,都要有一定的系統的開發方法,比如說敏捷開發之類的。而采訪的同學說,他們的大作業也就是一個人寫一點,然后湊到一起,看看結果如何,什么時候寫完全取決于每個人自身,沒有一個固定的PM監督每天的工作,調配每個人的任務,也沒有tfs之類的東西讓大家認清楚自己的工作任務和工作時間,以及同組同學的代碼進展。
還有一點就是團隊協作。前面已經說到他們的軟件工程大作業是團隊項目,那么按我們的理解應該有固定時間的討論或者說組會。而他們說他們之間基本沒有交流,他們認為每個人的代碼風格都不同,溝通起來應該是一件比較困難的事情,特別是大神和其他組員的,碼代碼能力也不同,為了追求效率,一般都是大神完成大部分工作,其他成員打打雜,完成一些比較輕松的活,這也許是效率最高的方式。
談到對我們的軟件工程課的看法,他們說的第一點就是我們沒有考試,這是讓他們羨慕的地方。不過他們也覺得我們的軟工課和他們的軟工課完全不是一個概念,我們學到的東西確實比較多。問到他們愿不愿意上我們的軟工課,他們還是覺得作業量是他們難以接受的,不過絕對比他們的軟工課有價值。
總的來說,他們的軟工課就像一門普通的必修課,期末交個大作業,然后老師劃重點,大家復習準備考試。一個學期下來,估計學到的東西也很少,真正碼代碼的同學還能有些進步,其他的人基本就是水過了。我記得這話也聽上一屆的一個學長說過,他們的軟工課基本就是這樣水過的。這讓我又想起了大二下的面向對象,基本就是一樣的形式,最后自然是過了就過了,到現在也不理解那門課的意義。
最后談一談我們對于軟件工程應該怎么上的理解。像前大班的上課方式確實有些不足,如果不對團隊項目有系統的規劃,肯定是不合適的。但是從另一方面來說,很多大學生都喜歡作業少的課程,這也是一個矛盾。我們覺得,像我們這樣的上課方式一定是值得推崇的,它不僅是一門普通的讓我們為了學分而學習的課程,而是一門讓同學學到真正的技術,真正的軟件開發方法和技巧和課程。但是考慮到同時進行的別的課程也有相當大的作業量(特別是不低的掛科率讓人很糾結。。),我們覺得這樣的課其實可以專門拿一段時間來上,相當于一個小學期之類的東西,一段時間全用來搞這一門課,這樣也許能使這們課的意義更大。
?
參考資料:
1.《軟件工程≠計算機科學》http://blog.sina.com.cn/s/blog_553f355101017g6l.html
2.《軟件工程教育中的實踐者反思理論》http://blog.sina.com.cn/s/blog_553f355101017j8q.html
3.http://norvig.com/hybrid-research.pdf
?
轉載于:https://www.cnblogs.com/coding-hundredOfYears/archive/2012/12/12/2814276.html
總結
以上是生活随笔為你收集整理的团队阅读——怎样学习软件工程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 定制个性化的专属彩铃
- 下一篇: Image.FromStream与Ima