大學里做不出好軟件
軟件正在吞噬這個世界。盡管年景不好,非死book還是創造了650億美元的市值。這樣一個僅僅2000名開發人員的小公司竟能抵得上一個汽車制造公司。
- 大部分的教授很少編程。因為他們不編程,他們就不會特別強調像代碼審查或單元測試這樣的好的開發方法。不相信我說的嗎?那去GitHub上找找你最喜歡的教授的作品吧。他能充滿自豪的在上面展示他開發的代碼嗎?
- 因為很少有教授編程,所以你也應該不會吃驚于學校里很少有軟件發布途徑來供那些想展示自己軟件作品的人使用。于是,這也就意味著,即使你開發出高質量的軟件,也難有同行來欣賞。
- 大多數學院里的軟件都是由學生寫成,他們缺乏經驗,缺乏寫出好軟件的動機。你也許會認為,在學校里花了4年時間,上了無數堂課,做了無數的編程作 業后,大多數計算機科學/工程的學生都應該成為不錯的程序員了。但這不是我看到的。部分的原因是學校教育是一個模仿老師的過程。我相信,如果大學四年你是 跟著李納斯·托沃茲(Linus Torvalds)上課,你一定會成為一個相當不錯的操作系統內核編程高手。然而,Linus 不會、也不喜歡當一名大學教授。大學教授不花很多時間去編程,他的學生也會這樣。
所以,學校里的軟件很爛,是因為學校里的人不善于編程。但這其中還有一些其它因素:
- 編程可以像煎雞蛋或建一個鳥窩那么簡單。你也知道,寫一個PHP腳本把數據庫的內容展示到瀏覽器里并不是那么的難。但要開發出一個不凡的軟件則需要程序員表現的像一個創造者。然而,你們的編程課程也許會教如何去煎一個雞蛋(比喻),但他們不會教你如何設計一個給四星級飯店用的菜肴。創造出新奇軟件的門檻也許比你想象的要低。根據一個論文里的算法,我們可以有十幾種實現方法,但大部分都是低效率的。即使是已經有原型偽代碼提供了, 你仍然需要大量的工作經驗在身,才能給出正確的設計。判斷如何能正確的實現一個算法也許比你們想象的要難的多。理論家很少有認可這點的,他們通常相信最困 難的部分是用縝密的理論知識設計出算法。他們不知道在兩個相同計算復雜度的算法會在軟件實現上產生成幾個數量級的速度差別。事實上,假設有人告訴你了作家 Stephen King的下一部小說的大綱,你就能寫出一部能和King寫的一樣好的小說嗎?很值得懷疑。軟件開發也類似。執行是一切。再好的策劃也無效。
- 大多數的學院里的研究者是為自己寫軟件。 就像烹飪一樣:“只給自己寫軟件的人不知道給別人寫軟件時有多少工作要做。”相比起在飯店里當一個廚師,給自己做飯要簡單容易的多。這兩者之間的難度差異 如果說有兩個數量級太大,那至少也不在一個數量級上。學術界里很少有人會認可這些。他們基本上寫的都是寫完即丟的代碼:寫好程序,使用它,然后忘了它。諸 如維護和文檔之類的問題,雖然在一些課堂上也討論過,但在學院里,鮮有用于實踐的。
那么,將來會如何?我對學校里的軟件保持悲觀態度。也許會有例外,但看總體情況,我不抱太大希望。因此,當我審查一個學生的研究報告或論文時,我會 先假定實現這個理論的軟件做的不怎么樣。我希望招聘那些新程序員的人也要這樣想。鑒于我這樣的悲觀論調,實際是有一些事情可以做的:如果你想在 非死book找到一份軟件工程師的工作,你就應該多花一些時間在GitHub上,少花一些時間在課堂上。如果你幸運的話,你可以說服學校就你的開源作品給你一些學分。
[本文英文原文鏈接:On the quality of academic software ]
載自: 外刊IT評論 http://www.aqee.net/
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!