程式設計人生:15位軟體先驅訪談錄

李潔發表於2014-11-27

拋開Ada Lovelace(被譽為世界上第一位程式設計師,著名詩人拜倫之女,她為Charles Babbage未完成的分析機設計了演算法)的工作不說,人類在計算機程式設計領域奮鬥的時間還不及一個人的壽命長,從1941年Konrad Zuse完成Z3電子機械計算機(首個可執行的通用計算機)算起,只有短短68年。曾有6位女性(Kay Antonelli、Jean Bartik、Betty Holberton、Marlyn Meltzer、Frances Spence和Ruth Teitelbaum)在美軍的計算機部隊工作,她們手工計算彈道資料表,後來被調去做ENIAC(首臺通用電子計算機)最早的程式設計師。若從這時候算起,人類的程式設計歷史則只有64年。在嬰兒潮早期出生的人們以及他們的父母,很多至今仍然健在,他們出生時世界上還不存在計算機程式設計師。

當然,這些已經是歷史了。現在世界上有很多程式設計師。勞動統計局在2008年對美國125萬人進行了統計,大約每106個工作者當中就有1個是計算機程式設計師或軟體工程師。這還沒算美國之外的職業程式設計師、數不清的學生和業餘程式設計愛好者,還有很多人從事其他正式工作,但卻花費了一部分或很多時間來試圖馴服計算機。雖然有數以百萬計的人寫過程式碼,雖然在程式設計出現後人們寫過的程式碼沒有數萬億行也有數十億行,我們仍然不斷地在這一領域進行創造。人們仍然在爭論程式設計到底是數學還是工程,是工藝、藝術還是科學。我們仍然在(經常是帶有強烈情緒地)爭論程式設計的最佳方式,因特網上有無數的部落格文章和論壇帖子來討論這些問題。書店也擺滿了各種論述新程式語言、新程式設計方法、新程式設計思想的書。

enter image description here

Unix的發明者Ken Thompson

本書按照文學期刊《巴黎評論》(The Paris Review)的傳統,採取了一種不同的方法來講述什麼是程式設計。這家期刊曾派了兩位教授去採訪小說家E. M. Forster,這次採訪和隨後的一系列問答式的採訪後來輯錄為Writers at Work一書。

我採訪了15位成就斐然、經驗豐富的程式設計師,其中有些人是系統黑客,如Ken Thompson(Unix的發明者)和Bernie Cosell(ARPANET早期實現者之一);有些人既有強大學術實力,本身又是著名黑客,如Donald Knuth、Guy Steele和Simon Peyton Jones;有些人是業界的研究員,如IBM的Fran Allen,愛立信的Joe Armstrong,Google的Peter Norvig,以及曾在施樂帕克研究中心工作過的Dan Ingalls和L Peter Deutsch;有些人是Netscape的早期實現者,如Jamie Zawinski和Brendan Eich;有些人蔘與設計和實現了現在的全球資訊網,如剛才提到的Eich,以及Douglas Crockford和Joshua Bloch;還有Live Journal的發明人Brad Fitzpatrick(在伴隨Web成長起來的一代程式設計師當中,他是一個當之無愧的典型)。

在採訪中,我問他們有關程式設計的問題,問他們是怎麼學習程式設計的,在程式設計過程中發現了什麼,以及他們對未來的看法。而且我很用心地請他們多談談長久以來程式設計師一直在苦苦思索的那些問題:我們應該如何設計軟體?程式語言在幫助我們提高生產力和避免錯誤方面扮演了什麼角色?有什麼辦法可以更容易地查出難以發現的bug?

這些問題遠遠還沒有解決,所以我的採訪物件持有非常不同的觀點也就不那麼奇怪了。Jamie Zawinski和Dan Ingalls強調儘早讓程式碼跑起來的重要性,而Joshua Bloch則描述了在實現之前,他如何設計API並測試它們能否支援要寫的程式碼。Donald Knuth講述了他在編寫排版軟體TeX的時候,怎樣在敲程式碼之前先用鉛筆在紙上完整地實現整個系統。Fran Allen大力批判近幾十年來人們躺在C語言的腳下對電腦科學的興趣越來越低,Bernie Cosell稱之為“現代計算機最嚴重的安全問題”,Ken Thompson卻認為安全問題是程式設計師而不是程式語言造成的,Donald Knuth也說C的指標是他所看到過的“最令人讚歎的記法改進之一”。一些受訪者對“形式化證明可能有助於改善軟體質量”這一觀點嗤之以鼻,而Guy Steele則漂亮地展示了這種做法的優點和限制。

然而,仍然有一些主題是大家都認同的。幾乎所有人都強調保持程式碼可讀性是很重要的。大部分受訪者都認為最難查詢的bug出現在併發程式碼中。沒有人認為程式設計問題已經完全解決了,他們大多數人仍然在尋找編寫軟體的更好辦法,比如怎樣自動分析程式碼,如何讓程式設計師更好地協作,或者尋找(或設計)更好的程式語言。同時幾乎所有人都認為多核CPU的大量採用將會給軟體開發帶來重大改變。

這些談話發生在計算機發展史的一個特定時刻。因此,本書中討論的一些話題在當前是緊迫問題,今後將不再是問題而變成了歷史。但即使是像程式設計這種新興領域,歷史也能為我們提供很多教訓。除此之外,我覺得我的受訪者們可能有一些共識,包括什麼是程式設計,如何更好地程式設計,等等,不僅現在的程式設計師會從中受益,未來幾代程式設計師也將從中受益。

最後提一下本書的書名:Coders at Work。這個書名與前面提到的《巴黎評論》出的Writers at Work系列以及Apress的Founders at Work (該書講述如何創辦技術公司,而本書討論計算機程式設計)相呼應。我意識到程式設計涵蓋的範圍太廣了,而“編碼”(coding)則可以特指其中一個很窄的部分。我個人從不認為一個糟糕的程式設計師會是一個優秀的編碼者,也不相信好的程式設計師會不是出色的設計者、溝通者和思考者。毋庸置疑,這些受訪者都是優秀的編碼者、程式設計師、設計者和思考者,而且還不僅僅如此。我相信接下來你在閱讀他們的談話內容時一定能夠體會到這一點。希望你能喜歡這本書!

enter image description here

相關文章