團隊閱讀之 "Is 'Computer Science != Software Engineering' an excuse to teach programming poorly?"


這是鄒老師博客給的第三個網址

http://programmers.stackexchange.com/questions/11721/is-computer-science-software-engineering-an-excuse-to-teach-programming-poo

這是一個叫programers的論壇里的一聲吶喊引發的故事......

這聲吶喊如題:CS!=SE是不好好教programming的借口嗎?

發帖者說,常常聽到抱怨說CS畢業生的開發技能低下,然后大家最后達成的解釋是:CS!=SE。但是CS的課程里面明明有軟件開發課,不過教的很弱,既然開設了為什么不好好教呢?他請大家回答兩個問題:

  1).CS!=SE是不是不好好教programming的借口

  2).如果大家能選擇,是否會在CS課程中強調programming的教育?

關於這個問題,論壇中的討論很激烈,從憤青的學生到經驗老到的開發人員都給出了不同的回答。

討論的最多的還是CS!=SE。大多數人都認為這不是借口,而是事實

CS主要是定義問題,本質上是數學,是academia(學術界)的事。甚至有人說computer science應該改名為the science of computing,或者干脆造個詞叫computology。因為CS的名字讓人們誤解了它,其實它和計算機的關系不大,它是一門計算的科學。Edsger Wybe Dijkstra是1972年圖靈獎的獲得者,他說過:“COMPUTER SCIENCE IS NO MORE ABOUT COMPUTERS THAN ASTROMY IS ABOUT TELESCOPES”,也就是說CS和計算機的關系就像天文學和望遠鏡的關系。它的主要研究領域是圖論,算法分析,數據結構等,利用而不依賴於計算機這個機器,也不需要糾結用什么編程語言運行我的“計算”,我關注的是我要解決什么問題,怎么設計解決方法,不需要太關注怎么把它投入使用。

而SE是industry(產業)的事,是將現實問題轉化成計算機的事的過程,這個轉化往往不需要設計多么復雜的算法,有多么良好的數據結構。它關注的是實用性,功能實現了嗎?是否易維護?是否可靠?是否可移植?最終落腳點是它的商業價值。那么SE涵蓋的內容就非常豐富了,包括市場,包裝,發布,維護等等。

打個比方,CS就像葯劑師,SE就像葯店。CS不需要關心怎么大批量的生產葯品,只需要做一個又一個的實驗去提升葯物的性能,為SE提供生產的理論,而SE則會把粗糙的經過證明有用的葯物生產成五顏六色、入口不苦、緩慢釋放葯性的葯丸葯片沖劑。

因此,CS!=SE是個很明顯的事實,這一點我也很同意。為了不再這個問題上繞圈子,我把發帖者的問題作一點修改:CS!=SE是不好好教programming的原因嗎?

有一部分人用CS!=SE這個事實,想要證明CS不需要學programming,他們的論據就是幾個類比:難道物理學家就要學着造汽車?難道建築師就要造房子?難道宇航員就要造飛船?也有一部分人認為CS應該學programming,因為這樣當畢業生轉向工作領域時才能夠適應。這個時候辯論的焦點又將問題改成了:CS!=SE是不需要學programming的原因嗎?

對這個問題首先我想明確一下討論范圍,我們不暫考慮畢業生由CS轉向SE的那一部分,也就是說我們看看純粹做CS的畢業生需要學programming嗎?我認為需要,因為CS盡管是學術上的事,也不應該閉門造車,需要向外交流和展示,那么一個好算法的不能死在公式上吧,有個好的展示效果可以提供更為清晰的數據,並有可能發現隱藏更深的結論。同時,現在的CS是一個綜合學科交叉時代下的CS,和醫學、語言學等結合在一起就對programming的要求更高了。一個好的算法的價值也是體現在運用中,CSer創建一個運用性的項目,我想,應該也可以稱作一個產品吧,它會隨着算法的改進而維護擴展,對programming有更多認識的話,在這一部分是可以提高很多效率的。

同時,CS的目的也是為了將好的算法、好的理論運用在現實生活中,那么CSer或者SEer必須有二者之一要擔當起將理論轉化為實際的橋梁,學過programming的CSer就和學過算法等理論的SEer一樣,在合作交流過程中一定能更好的相互理解。研究汽車的物理學家不需要親手去造汽車,但也要在研究一種新的發動理論之后,先做一個小型的發動機來展示理論的優越性,並能在汽車制造商上門運用其理論的時候能有一定的生產知識指導新型發動機的開發。

所以我的結論是CS需要學習programming,再加上CSer的職業可能轉向更多領域,programming就更是重要了。既然需要學,那么回到原來的問題:CS!=SE是不好好教programming的原因嗎?

大家討論的原因主要是,大學4年時間有限,CS的涵蓋內容太豐富,而programming又是個費力不討好的內容,所以往往即便開設了programming課程,老師也沒辦法讓新手真正學到什么。這時候,問題似乎開始有了答案:不好好教programming的原因不是CS!=SE,而是時間太有限,算法等理論很重要,programming本身就不好教(而且相比於理論,似乎看得到的效果微乎其微),因此只好讓位。

那么怎么辦呢?網友有3個建議:

  1).請企業中的開發者參與programming的教學

  2).學生自己應該有自我發現的能力,you develop software on your own,teacher give you time to develop your skills semi--autonomously

  3).programming更需要在實際的工作經驗中學習

我認為這3個建議都很有道理。第一個建議可不就是我們的軟工課嗎,鄒老師帶給我們的是全新的體驗,用企業化的模式讓我們實實在在的動手做了很多,並在動手的過程中嵌入並體會了很多programming的知識,我認為這樣的教學模式的確很有幫助。第2個建議是在團隊工作中體會到的,我們的團隊項目就是因為興趣使然,大家喜歡這個想法,想做出這個游戲,就真的develop software on our own了,而且老師也給予了很多時間和支持讓我們放手去做。第3個建議是很自然的,學校畢竟是學校,我們只能管中窺豹,只有實際工作才能教會我們programming。

綜上所述呢,我對這兩個問題的答案是:

  1).不好好教programming的原因不是CS!=SE

  2).CS課程里我不會為了programming而開設這門課,結果教學方法不對導致programming成了文檔課。如果能邀請到經驗豐富的企業中的開發者,就開設實戰性的programming課(也是為了提供學生一個自主學習的機會),否則作罷,因為programming的學習更多的取決於學生本身以及未來實際的工作經歷。

 


免責聲明!

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



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