2010年3月22日 星期一

差異

Ref.: 王克明, 軟體設計必讀經典(11)反覆測試與修正,讓錯誤消失, iThome

有一位軟體設計的夥伴,是我看過上千軟體人員之中唯一的天才。他不只學習能力快速,更具備靈活的頭腦與身段,抽象思考能力極高,擅長把軟體作「軟」的他,作品總是令人嘆為觀止。不過,我覺得他與國外的軟體先驅仍差了一截,並不是實作或學習能力不夠好,最主要的差距在於「創新能力」。

什麼是創新能力?舉個例子,我可以看得出早期EJB規格的問題點(軟體結構會被該規格綁死死的),所以會批判與避免使用它。Rod Johnson 卻不只是批判反對而已,而且還身體力行,寫出Spring Framework,實現IoC(Inversion of Control)、AOP(Aspect-Oriented Programming)的輕量級開發框架,釐清軟體開發人員與系統層級服務的責任。

另外,《Test Driven Development By Examples》作者Kent Beck在輔導專案的過程,有感於測試應伴隨所開發的程式碼,而不是延遲,所以主張「測試先行」(Test First),他甚至設計免費開放的JUnit Framework等測試框架,並寫書推廣正確觀念,讓開發者了解測試先行是維繫軟體品質的重要關鍵。太多大型單位把測試當作一個重要製程,但又交給其他部門,而且在開發後才展開測試,這樣的應變測試效果令人懷疑。
的確, 以華人的頭腦和努力, 很多人都在工程界或科學界嶄露頭角, 但是真正頂尖的卻非常少. 以理論計算機科學來說, 應該就是姚期智了吧. 當然有很多人是非常努力, 解題能力非常強的, 他們解決了很多問題, 改進了很多算法. 但是姚期智教授特別的地方應該就在於原創性吧.

由於我是一個閱讀廣泛的人, 所以我常常會翻看或查找一些跟我研究無關的問題, 而其中, 往往會看到姚期智教授的名字, 例如資料結構的 cell probe model 或者計算理論的 communication complexity 等等. 這些開創性的大師在提出他們的理論時, 通常也提出很好的結果, 但通常不是最好 (不然後人就沒得做了). 所以有時候會決得奇怪, 這些大師有些也沒解決什麼經典的問題, 為什麼這麼廣受推崇. 一個很好的例子我想就是 Knuth, 以他為名的演算法其實不少, 但是很少是最好的, 他的論文發表量也不多 (比起現代很多強者來說). 為什麼他會變成大師? 我覺得有些原創性或者啟發性的特質, 往往是我們最缺乏的.

要如何培育這些能力, 我們所知非常有限, 但是或許我們的制度可以更容忍更珍惜這種差異(的可能性).

沒有留言: