英文原文:On the quality of academic software ,翻譯:外刊IT評論
軟體正在吞噬這個世界。儘管年景不好,Facebook還是創造了650億美元的市值。這樣一個僅僅2000名開發人員的小公司竟能抵得上一個汽車製造公司。
本文作者:加拿大新不倫瑞克大學副教授Daniel Lemire
學生應該注意。我是希望無數學生進大學可以接受拔尖的軟體培訓。我是希望學生能寫出優美的程式。
然而高校中做出來的軟體有點可怕。下面是我的解釋:
1)大部分的教授很少程式設計。因為他們不程式設計,他們就不會特別強調像程式碼審查或單元測試這樣的好的開發方法。不相信我說的嗎?那去GitHub上找找你最喜歡的教授的作品吧。他能充滿自豪的在上面展示他開發的程式碼嗎?
2)因為很少有教授程式設計,所以你也應該不會吃驚於學校裡很少有軟體釋出途徑來供那些想展示自己軟體作品的人使用。於是,這也就意味著,即使你開發出高質量的軟體,也難有同行來欣賞。
3)大多數學術軟體都是由學生寫成,他們缺乏經驗,缺乏寫出好軟體的動機。你也許會認為,在學校裡花了4年時間,上了無數堂課,做了無數的程式設計作業後,大多數電腦科學/工程的學生都應該成為不錯的程式設計師了。但這不是我看到的。部分的原因是學校教育是一個模仿老師的過程。我相信,如果大學四年你是跟著李納斯·託沃茲(Linus Torvalds)上課,你一定會成為一個相當不錯的作業系統核心程式設計高手。然而,Linus 不會、也不喜歡當一名大學教授。大學教授不花很多時間去程式設計,他的學生也會這樣。
所以,學術軟體很爛,是因為學校裡的人不善於程式設計。但這其中還有一些其它因素:
1)程式設計可以像煎雞蛋或建一個鳥窩那麼簡單。你也知道,寫一個PHP指令碼把資料庫的內容展示到瀏覽器裡並不是那麼的難。但要開發出一個不凡的軟體則需要程式設計師表現的像一個創造者。然而,你們的程式設計課程也許會教如何去煎一個雞蛋(比喻),但他們不會教你如何設計一個給四星級飯店用的菜餚。創造出新奇軟體的門檻也許比你想象的要低。根據一個論文裡的演算法,我們可以有十幾種實現方法,但大部分都是低效率的。即使是已經有原型虛擬碼提供了,你仍然需要大量的工作經驗在身,才能給出正確的設計。判斷如何能正確的實現一個演算法也許比你們想象的要難的多。理論家很少有認可這點的,他們通常相信最困難的部分是用縝密的理論知識設計出演算法。他們不知道在兩個相同計算複雜度的演算法會在軟體實現上產生成幾個數量級的速度差別。事實上,假設有人告訴你了作家Stephen King的下一部小說的大綱,你就能寫出一部能和King寫的一樣好的小說嗎?很值得懷疑。軟體開發也類似。執行是一切。再好的策劃也無效。
2)大多數的學院裡的研究者是為自己寫軟體。就像烹飪一樣:“只給自己寫軟體的人不知道給別人寫軟體時有多少工作要做。”相比起在飯店裡當一個廚師,給自己做飯要簡單容易的多。這兩者之間的難度差異如果說有兩個數量級太大,那至少也不在一個數量級上。學術界裡很少有人會認可這些。他們基本上寫的都是寫完即丟的程式碼:寫好程式,使用它,然後忘了它。諸如維護和文件之類的問題,雖然在一些課堂上也討論過,但在學院裡,鮮有用於實踐的。
那麼,將來會如何?我對學術軟體保持悲觀態度。也許會有例外,但看總體情況,我不抱太大希望。因此,當我審查一個學生的研究報告或論文時,我會先假定實現這個理論的軟體做的不怎麼樣。我希望招聘那些新程式設計師的人也要這樣想。鑑於我這樣的悲觀論調,實際是有一些事情可以做的:如果你想在Facebook找到一份軟體工程師的工作,你就應該多花一些時間在GitHub上,少花一些時間在課堂上。如果你幸運的話,你可以說服學校就你的開源作品給你一些學分。