老派程序員:徒手實現(xiàn)偉大成就
當(dāng)在讀Peter Seibel的精彩著作《編程人生:15位軟件先驅(qū)訪談錄(Coders at Work)》的時候,我發(fā)現(xiàn)一些老派的程序員(我是這樣尊敬的稱呼他們的)是非常的有趣,比如Ken Thompson, Joe Armstrong 和 Jamie Zawinski,他們開發(fā)軟件時幾乎不用任何現(xiàn)代的工具和技術(shù)技巧。
ken thompson
Ken Thompson是B語言(C語言的前身)的設(shè)計者,也是Go語言的設(shè)計者(與 Rob Pike合作)。在貝爾實驗室工作的時候,他和Dennis Ritchie一起開發(fā)實現(xiàn)了C 語言和最初的Unix操作系統(tǒng)。一次在新澤西的晚飯上,當(dāng)他在餐具墊上設(shè)計出來UTF-8字符編碼方法后,他通宵工作,在貝爾實驗室的Plan 9 操作系統(tǒng)里實現(xiàn)了對UTF-8的全面支持。就編程風(fēng)格而言,他只通過printf語句來調(diào)試,幾乎沒有單元測試,他開發(fā)軟件是先設(shè)計數(shù)據(jù)結(jié)構(gòu),然后從局部開始實現(xiàn),中間利用臨時的測試接口,最終到達(dá)整體完成,
Jamie Zawinski
Jamie Zawinski 在麻省理工的人工智能實驗室使用Lisp工作,之后他領(lǐng)導(dǎo)開發(fā)了Lucid Emacs,也是用的Lisp語言,這個軟件就是后來被人們熟悉的XEmacs。此后他加入了Netscape項目,開發(fā)Unix版的Netscape瀏覽器的前端部分,之后他又領(lǐng)導(dǎo)了Netscape Mail的開發(fā)(兩個項目都是用的C語言)。他也是只喜歡用print語句來調(diào)試代碼。他的開發(fā)過程有時是先整體后局部,有時是先局部后整體,順其自然,在必要的時候進(jìn)行重構(gòu)。開發(fā)時他幾乎不做單元測試,他認(rèn)為單元測試會耽誤時間——他認(rèn)為***次就應(yīng)該把代碼編對,他反復(fù)這樣強調(diào)。在他的觀念里,這是個優(yōu)先級問題,“你是愿意去開發(fā)出一個沒問題的軟件,還是愿意下星期就把它完成,選擇一個,你們不能兼得。”
joe_armstrong
Joe Armstrong開發(fā)了Erlang編程語言,他還為愛立信開發(fā)開源的 Open Telecom Platform(OTP)框架。開發(fā)軟件時,他喜歡在寫代碼前寫盡可能完備的文檔,特別是對有難度的項目,比如有關(guān)實時網(wǎng)絡(luò)協(xié)議的。對于有難度的問題他喜歡先用原型解決,對于調(diào)試,他只是有print語句。他是一個面向?qū)ο缶幊痰呐u者,他喜歡像Haskell這樣的函數(shù)式編程語言。他從未使用過IDE,他喜歡使用的是Emacs和命令行(不需要用鍵盤)這樣的開發(fā)工具。
所以,什么樣的工具和技術(shù)技巧是你成為一個偉大程序員的所必須的?是這些TDD、BDD、Scrum、敏捷開發(fā)、設(shè)計模式、極限編程等現(xiàn)代技術(shù)嗎?這些只是花瓶?還是為了用來實現(xiàn)更大的目標(biāo)?或者這只是說明了有天賦的程序員不管使用什么工具都能走上自己成為偉大程序員的道路?
我個人的觀點是,做一定程度的TDD、保證合適數(shù)量的單元測試,這些都是作用巨大的。因此這些現(xiàn)代技術(shù)才被看作是能夠讓我們工作更加容易、更有效率的科技進(jìn)步——尤其是對那些非天才級別的程序員。
英文原文:Old school developers - achieving a lot with little
本文鏈接:http://www.aqee.net/old-school-developers-achieving-a-lot-with-little/