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