老派程式設計師——徒手實現偉大成就

袁野發表於2012-12-14

英文原文:Old school developers – achieving a lot with little,翻譯:外刊IT評論

當在讀Peter Seibel的精彩著作《程式設計人生:15位軟體先驅訪談錄(Coders at Work)》的時候,我發現一些老派的程式設計師(我是這樣尊敬的稱呼他們的)是非常的有趣,比如Ken Thompson、 Joe Armstrong 和 Jamie Zawinski,他們開發軟體時幾乎不用任何現代的工具和技術技巧。

Ken Thompson是B語言(C語言的前身)的設計者,也是Go語言的設計者(與 Rob Pike合作)。在貝爾實驗室工作的時候,他和Dennis Ritchie一起開發實現了C 語言和最初的Unix作業系統。一次在新澤西的晚飯上,當他在餐具墊上設計出來UTF-8字元編碼方法後,他通宵工作,在貝爾實驗室的Plan 9 作業系統裡實現了對UTF-8的全面支援。就程式設計風格而言,他只通過printf語句來除錯,幾乎沒有單元測試,他開發軟體是先設計資料結構,然後從區域性開始實現,中間利用臨時的測試介面,最終到達整體完成,

Jamie Zawinski 在麻省理工的人工智慧實驗室使用Lisp工作,之後他領導開發了Lucid Emacs,也是用的Lisp語言,這個軟體就是後來被人們熟悉的XEmacs。此後他加入了Netscape專案,開發Unix版的Netscape瀏覽器的前端部分,之後他又領導了Netscape Mail的開發(兩個專案都是用的C語言)。他也是隻喜歡用print語句來除錯程式碼。他的開發過程有時是先整體後區域性,有時是先區域性後整體,順其自然,在必要的時候進行重構。開發時他幾乎不做單元測試,他認為單元測試會耽誤時間——他認為第一次就應該把程式碼編對,他反覆這樣強調。在他的觀念裡,這是個優先順序問題,“你是願意去開發出一個沒問題的軟體,還是願意下星期就把它完成,選擇一個,你們不能兼得。”

Joe Armstrong開發了Erlang程式語言,他還為愛立信開發開源的 Open Telecom Platform(OTP)框架。開發軟體時,他喜歡在寫程式碼前寫儘可能完備的文件,特別是對有難度的專案,比如有關實時網路協議的。對於有難度的問題他喜歡先用原型解決,對於除錯,他只是有print語句。他是一個物件導向程式設計的批評者,他喜歡像Haskell這樣的函數語言程式設計語言。他從未使用過IDE,他喜歡使用的是Emacs和命令列(不需要用滑鼠)這樣的開發工具。

所以,什麼樣的工具和技術技巧是你成為一個偉大程式設計師的所必須的?是這些TDD、BDD、Scrum、敏捷開發、設計模式、極限程式設計等現代技術嗎?這些只是花瓶?還是為了用來實現更大的目標?或者這只是說明了有天賦的程式設計師不管使用什麼工具都能走上自己成為偉大程式設計師的道路?

我個人的觀點是,做一定程度的TDD、保證合適數量的單元測試,這些都是作用巨大的。因此這些現代技術才被看作是能夠讓我們工作更加容易、更有效率的科技進步——尤其是對那些非天才級別的程式設計師。

 

 

相關文章