《軟體故事》:軟體和程式設計藝術的興起

李潔發表於2014-07-01

秋高氣爽的黃昏,憑窗遠眺,華盛頓湖碧波盪漾,一葉孤舟劃過,泛起層層漣漪。遠處的地平線上,依稀可見西雅圖市的輪廓。這就是從查爾斯·西蒙尼位於華盛頓湖畔的家中看到的景象。1966年,這位年僅17歲的電腦程式設計奇才離開了匈牙利首都布達佩斯,遠走他鄉,從此開始了非凡的人生歷程。他這幢房子依山傍水,佔地1800多平方米,配有圖書館、計算機實驗室、健身中心和游泳池。不過,從公路上幾乎完全看不到。整套房子從內到外都由玻璃、木頭和鋼材建造而成,堪稱現代主義的典範。黑色的磨光石地板閃閃發光,訪客需要換鞋方可進入。牆上僅掛了幾幅洛伊·李奇登斯坦、賈斯培·瓊斯和維克托·瓦薩雷裡的現代主義畫作。除了這些藝術品,西蒙尼還收藏噴氣式飛機。他收藏了兩架飛機,其中包括他駕駛過的一架已經退役的北約戰鬥機。此外,他慷慨大方,曾捐贈數百萬美元支援高校科研,牛津大學因此設立了一個以他的名字命名的教授席位,普林斯頓高階研究院還將他的名字刻在了數學系大樓上。年少的西蒙尼逃離匈牙利時一無所有,但是現在,已是億萬富翁的他卻視金錢為無物。他說:“我現在已經不再為了逐利而做事。”1

1.2000年10月10日,作者訪談。

談起他所取得的成績,西蒙尼把這一切都歸功於軟體業的興起,以及他在編寫計算機程式碼方面的天賦異稟,當然,還有機遇、運氣以及資本市場的反覆無常。他的職業生涯始於20世紀60年代中期,那時他在匈牙利中央統計局工作,有點像美國青少年電腦黑客。他涉獵廣泛,不斷充實自己,自學瞭如何在俄製的Ural II電腦上進行程式設計。論計算機發展水平,布達佩斯還處於20世紀50年代早期的技術水平,比西方落後了幾十年。多年來,軟體不斷髮展,程式設計人員的視線不再侷限於二進位制數字或數位——機器語言0和1。但是,西蒙尼嘗試用純粹的機器語言與計算機對話。“那是程式設計的石器時代,”他回憶道,“我穿越了時間隧道。”

移民美國後,西蒙尼就把他的名字卡羅利改為了查爾斯。他先後進入加州大學伯克利分校和史丹佛大學學習,畢業後就職於施樂公司帕洛阿爾託研究中心(Xerox PARC)。那時正值20世紀70年代的黃金時期,他們的團隊進行了大量的研究和開發工作,正是這些工作使人們使用個人電腦的方式初具雛形。在施樂帕洛阿爾託研究中心,西蒙尼是Bravo最重要的開發者。Bravo是一種全新的書寫和文字編輯程式,可以在電腦螢幕上顯示單詞,就像熟練的排字工撿字那樣。這就是後來廣為人知的“所見即所得”(WYSIWYG,What You See Is What You Get)功能,它開啟了桌面出版(desktop publishing)的大門,個人電腦從而成為提高個體創造力的工具。

但是,施樂公司並沒有真正意識到帕洛阿爾托實驗室工作的重要性。西蒙尼看透了這一點,並開始另謀高就。1980年夏季,他低調地拜訪了西雅圖城外一家在個人電腦行業初出茅廬的小公司——微軟。雖然公司剛剛起步,僅有40名員工,但在這裡,西蒙尼看到了希望。他和比爾•蓋茨一見如故,於是加入了微軟。

微軟的Word文字編輯器如今已是世界上使用最廣泛的軟體程式之一,它是Bravo的商業化產物,西蒙尼則是當之無愧的“Word之父”。在他看來,個人電腦只是軟體的傳遞載體,給使用者很大幫助,並使程式設計人員如虎添翼。“寫下幾行程式碼,瞬間就能改變億萬人的生活,”他說,“這就是軟體。”2

2.1999年11月18日,作者訪談。

從微軟退休前的最後幾年中,西蒙尼一直致力於一個重要的研發專案,旨在大大提高計算機程式設計人員的生產力。他認為程式設計人員目前使用的工具和方法依然過於原始,限制了人類智力在軟體開發過程中的發揮,從而阻礙了軟體業的發展。儘管如此,西蒙尼還是對軟體的興起讚歎不已:“這表明軟體的力量強大無比。即使用現有的簡單工具,軟體也能做那麼多事,這太神奇了!”

戰後,軟體業作為一個探索領域、一個行業以及通訊與商業之間的媒介,取得了令人矚目的迅速發展,而這一切幾乎都發生得悄無聲息。計算機程式設計的起源至少可追溯到19世紀。當時英國數學家查爾斯·巴貝奇正致力於解決分析機的計算問題;分析機是現代計算機概念化的雛形。今天,我們可以將其所做的事情稱為程式設計。程式設計中最基本的概念是演算法,即執行某種操作的一組指令,或者說是計算的方法。追根溯源的話,演算法(algorithm)最早出現在巴比倫3,而algorithm這個詞則是對波斯學者Muhammad ibn Musa al-Khwarizmi4姓氏的訛傳,他寫過一篇關於代數方法的專著。

3.馬丁·坎貝爾-凱利和威廉·埃斯普瑞,Computer: A History of the Information Machine,第181頁。
4.波斯數學家。高德納,《計算機程式設計藝術,卷1:基本演算法》,第1-2頁。

但是,在第二次世界大戰之前,電子技術還不夠先進,人們尚未開發出有用的計算機。早期的程式設計只是後期任務的附屬工作,更像是技術人員煩瑣的勞動,通常被認為是機器的“設定”或“編碼”。真正吸引人的是硬體,因為它被認為是真正的科學和工程。人們普遍認為,電子數字整合器和計算器,即ENIAC(Electronic Numerical Integrator and Computer),才是開啟數位電子計算時代的關鍵所在。其實,這臺存放於賓夕法尼亞大學的機器只是一臺裸機。操作人員必須對這臺機器進行手動設定,插拔那些讓人眼花繚亂的線纜,並把一排一排的開關放到正確的位置。每解決一個新問題似乎都要重建機器,因為它採用的是硬接線方式。為此,當局僱用了一些具備數學技能的年輕女士,並對她們進行了培訓。這些女性程式設計師稱為“計算員”(computer),這個詞可追溯至18世紀,專門指那些為繪製地圖或航海圖而編制統計表的計算者。

對ENIAC進行程式設計,使其計算出火炮的彈道軌跡,這是一項艱難的工作,但卻是美國國防部指定的任務。為此,這些女程式設計師想出了一些技巧來簡化流程。她們先在紙上畫出詳盡的圖表,並標出在這臺機器上可以解決問題的最有效方法。然後,她們再對機器進行手動設定。珍·巴蒂克這樣回憶道5:“我們清楚地知道如何設定每一條線和每一個開關。”這種操作可能會花費好幾個星期的時間。不過,正是由於她們的努力,ENIAC的公開演示才獲得了巨大成功:一條炮彈軌跡用很短的時間就能計算出來,比炮彈本身的飛行速度還快。巴蒂克回憶道:“那簡直棒極了,是我一生中最激動的一天。”6當時已是戰後,1946年的春天。

5.2000年9月11日,訪談。
6.摘自1995年2月10日出版的珍·巴蒂克21頁的個人史,第9頁。

對於新興職業的從業者來說,他們的職業稱謂變化很快。人工的“計算員”(computer)變成了“編碼員”(coder),然後,這個平淡無奇的稱謂又被“程式設計師”(programmer)勢不可當地取代了。事實上,這是英國從業者的貢獻。很明顯,新稱謂聽起來更有身份,也更具文學氣息。葛麗絲·霍普是軟體方面的領軍人物,於1944年開始在哈佛Mark I上從事戰備方程式的計算。她一直認為,用“程式設計”(programming)這個詞來形容初期的工作過於高尚。“直到從英國傳過來,‘程式設計師’這個詞才開始廣泛使用。”她回憶道,“事實上,我認為,書寫機器程式碼的過程就是編碼,我們應該留著‘程式設計’這個詞來描述更高一級的工作。但是,它是從英國傳過來的,而且比編碼員要好聽得多,於是每個人都想被稱為程式設計師。”7

7.克里斯托弗·埃文斯1976在加州對葛麗絲·霍普的訪談,現為查爾斯·巴貝奇研究所口述歷史專案的一部分,印刷本,第8頁。

由於計算機設計上的突破,更高一級的程式設計很快就成為現實。這個想法最初源於ENIAC工作團隊,隨後,1945年6月發表的由約翰·馮·諾依曼撰寫的文章“關於EDVAC的報告初稿”(A First Draft of a Report on the EDVAC)對其進行了詳盡的闡述。作為著名的數學家和博弈理論家,馮·諾依曼受聘擔任原子彈開發專案“曼哈頓計劃”的顧問。原子彈的設計需要成千上萬次的計算,當時主要是由大量計算員藉助臺式計算機來完成的。計算機的潛力引起了馮·諾依曼的興趣,於是他在1944年成為了ENIAC專案的顧問。後來,在ENIAC的基礎之上,經過改進,又有了EDVAC(Electronic Discrete Variable Automatic Computer),即電子離散型變數自動計算機。除了馮·諾依曼,還有很多人蔘與設計了EDVAC,其中最為著名的便是ENIAC專案負責人J. 普雷斯普爾·埃克特和約翰·莫克利,但由於最終負責撰寫報告的是馮·諾依曼,因此他獲得了設計“儲存程式式計算機”的殊榮。這種設計思路就是後來廣為人知的馮·諾依曼架構。事實上,現在所有的計算機使用的都是馮·諾依曼架構。

第二次世界大戰後,早期的儲存程式式計算機才真正開始出現。儲存程式的理念在於,不僅計算機的資料——當時用於計算的主要是數字——而且程式指令也會儲存在機器中。從某種程度上來說,這無疑能夠提高效率,並能實現計算自動化。由於程式指令可以設定到打孔卡片或紙帶上,與將要處理的資料一起存入計算機中,所以,再也不用手動設定開關和線纜了。

然而,儲存程式這個概念還有更深刻的含義。用電腦科學家巴特勒·蘭普森的話來說,它使軟體構建成為了一門“獨特的自引用”8工程學科,因為所有的計算機制都可以應用在自身中。也就是說,儲存程式式計算機可使程式修改其他程式或建立新的程式。正是有了這種以計算機為中介的程式設計互動方式,如今的計算機程式語言才遠遠超越二進位制0和1的組合,更易於人類理解。這種程式設計互動方式相當於計算機內部的數字生態環境:一段程式碼迅速跳到程式外去修改其他程式碼,而後者又會迴圈回來與其他程式碼混合。無論是電腦遊戲、網際網路,還是人工智慧,所有這一切都源於程式碼的這種組合、重組以及持續地自我修正的能力。

8.2001年1月5日,訪談。

早期儲存程式式計算機的開發人員最早體會到了程式設計的複雜性,而且這種複雜性常常是無法預料的。劍橋大學的莫里斯·威爾克斯率領的團隊製造了第一臺儲存程式式計算機,並投入執行。這臺機器稱為EDSAC(Electronic Delay Storage Automatic Calculator,電子延時儲存自動計算器)。在回憶錄中,威爾克斯還清楚地回憶起第一次認識到bug註定是程式設計師的剋星時的情景。他這樣寫道:“到了1949年6月,人們已經意識到,要得到正確無誤的程式並不像看起來那麼容易。”9當時,威爾克斯正在研究他的第一個“重大專案”,而當他在劍橋大學的事業更上一層樓時,他回憶道:“我突然強烈地意識到,我接下來的時間都要花費在尋找程式的bug上了。”

9.莫里斯·威爾克斯,Memoirs of a Computer Pioneer,第145頁。

計算機投入應用很長一段時間之後,“軟體”這個詞才出現,可見人們對這種相當麻煩的技術只是勉強認同。1958年,在《美國數學月刊》上,“軟體”作為計算機術語首次在出版物上使用。10普林斯頓大學的數學家約翰·杜奇在文中這樣寫道:“如今的‘軟體’已包括精心設計的解釋路徑、編譯器以及自動化程式設計的其他方面,對於現代電子計算器而言,其重要性絲毫不亞於那些由電晶體、轉換器和線纜等構成的‘硬體’。”但這樣的觀點在當時並不普遍。

10.首次公開發表。該發現是耶魯法學院的圖書管理員弗雷德·夏皮羅做出的。“軟體一詞的來源:JSTOR電子期刊檔案中的證據”,IEEE Annals of the History of Computing, 22(2000):第69-71頁。

在當時的計算機工程文化氛圍下,程式設計師曾長期被硬體人員輕視。後者認為程式設計師只不過是從事計算行業的一群放蕩不羈的人,硬體才是真正的學科,因為硬體人員大都來自發展較完善的電子工程領域。那時,各個大學都已開設電子工程系,而且硬體的表現也符合物理、化學之類“硬科學”的嚴謹準則。雖然有些數學家也對計算機和程式設計著迷,但是他們往往沉迷於理論的高度,而不是編寫程式碼和排查程式。直到20世紀60年代,隨著電腦科學系的成立,程式設計才被學術界正式認可,並從此穩步發展。

在20世紀50年代以及此後的一段時間裡,程式設計師的招聘和僱用幾乎沒有任何科學性可言。那時亟需程式設計技能:新員工必須經過培訓,但是並沒有可靠的方法測試其是否具備程式設計技能。“在報紙的廣告裡發現某個人,還沒了解清楚,你可能就已經決定要僱用這個人了。在程式設計的早期就是這樣,就像是在講故事,”在20世紀50年代後期擔任IBM程式設計研究部經理的羅伯特·貝莫這樣說道,“我們就好像直接從大街上招人回來一樣。”11剛剛從瓦薩學院畢業的洛伊絲·海波特於1955年加入IBM,成為FORTRAN程式語言開發團隊的一員,該團隊共有10人。她回憶道:“任何一個人,如橋牌玩家、象棋手,甚至是女性,只要看起來具備解決問題的能力,就會被他們招入麾下。”12作為IBM的經理,貝莫廣泛撒網招攬人才。“我曾經決定以登廣告的方式招募象棋手,因為我認為他們會成為相當出色的程式設計師。這招非常奏效。我們甚至招募到了全美象棋冠軍亞瑟·比斯蓋爾。此前,他大部分時間都在下棋,幾乎沒編過程式。”但是,事實證明,在程式設計領域,象棋手並不比常人更出色。1957年刊登在《紐約時報》《洛杉磯時報》以及《科學美國人》雜誌上的廣告,最終幫助貝莫招到了四五個合適的人,收穫還算不錯。貝莫估計,當時美國大概有1.5萬名專業的程式設計師,約佔全世界程式碼編寫人員的80%。

11.IEEE Annals of the History of Computing,第6卷,第一期(1984年1月),第16-17頁。
12.2000年9月11日,訪談。

如今,這種情況已大為改觀。軟體行業有了巨大的發展,全球擁有近900萬名專業程式設計師。13在學術界,電腦科學已經成為受人尊重的領域,科研人員投入大量研究資金來探索軟體的奧祕。我們有充分的理由相信,軟體不僅賦予了個人電腦和網際網路活力,還推動了電話、信用卡網路、機票預訂系統、車輛燃料加註系統以及廚房用具等領域的發展。1999年,總統的科技顧問團隊發現,軟體已經成為“資訊時代全新的物理基礎設施”,是一種不可或缺的原材料,“對經濟發展、科技研究以及國家安全至關重要”14

13.斯蒂芬·亨德里克和盧多維克·布魯諾,The 2001 IDC Professional Developer Model,2001年6月出版。2000年,國際資料公司的數字為873.9萬,預計2011年增為978.3萬。
14.總統資訊科技諮詢委員會1999年2月23日釋出的Information Technology Research: Investing in Our Future

的確,現代經濟建立在軟體基礎之上,而且這種依賴性還會繼續增強。商業週期和華爾街的狂熱周而復始,轉瞬即逝,但對軟體的需求卻從未間斷。程式設計師就是資訊時代的技師、工匠、砌磚工和建築師。這些在早期都是難以想象的,因為沒有人能預見迅猛的技術變革會帶來什麼——依賴硬體和軟體的進步,計算領域得到了前所未有的擴充。約翰·馮·諾依曼和赫爾曼·高德斯汀是當時計算機領域的卓有遠見者,他們在1946年寫道,大約1000行的程式指令是“解決目前可以想見的複雜問題的合理上限”15。如今,一個電動牙刷就可能有3000行程式碼,而個人計算機程式則有數百萬行的程式碼。

15.引自高德納的《計算機程式設計藝術,卷1:基本演算法》,第231頁。

拋開其重要性不提,對於大多數人來說,計算機程式設計仍然很神祕。這不足為奇,畢竟,軟體幾乎是完全看不見、摸不著的東西,無法被人感知。但正是軟體使計算機能夠完成那些有用的、有趣的、令人愉悅的事情。計算機只不過是機器,它很強大,但也很愚蠢。在它們的世界裡只有1和0、開或關。20世紀70年代的視訊遊戲Pong(《乒乓球》),用兩條光束作為“球拍”,擊打一個像游標一樣的“球”,執行這款遊戲的簡單計算機所能看到的世界是這個樣子的:

0011101010101000011100011010101000

而曾在1997年擊敗世界象棋冠軍加里·卡斯帕羅夫的IBM超級計算機“深藍”,它所看到的世界也是這個樣子的:

0011101010101000011100011010101000

從本質上講,這兩臺計算機只有兩點區別。一是渦輪增壓的位處理引擎使“深藍”在速度和動力上佔有優勢,再就是軟體。軟體是人類智慧的體現,是人和機器之間的中介,把我們的問題或命令傳達給計算機。

作為一個專業,程式設計是藝術、科學和工程的奇妙結合。軟體開發仍然是一項異常艱苦、循序漸進的工作,它更像是手工藝,而不是機器魔法,它是一種以軟體為中介的創造形式。正如廚師烹飪食物,畫家創作油畫一樣,程式設計師編寫程式碼。不過程式設計仍是一種實踐性很強的藝術形式,熱愛它的人們都會為程式有效執行的魅力以及創造事物的渴望所深深吸引。

還是個孩子的時候,葛麗絲·霍普就會拆裝鬧鐘;Unix作業系統的創始人肯·湯普森,在後院製作了火箭;電子表格軟體的合作開發者丹·布里克林,用希斯套件(Heathkit)組裝了家用電視機;Java程式語言的發明者詹姆斯·高斯林,在他祖父位於加拿大卡爾加里市的院子裡,改裝了舊農機。對那些天生迷戀程式設計的人來說,創造事物似乎能帶來真正的快感,軟體尤其能帶給他們這種體驗,因為它是沒有實體約束的中間體。程式設計師不用鋼筋、玻璃和混凝土,就能夠建造模擬的城市;不用鋁、噴氣發動機和輪胎,就能夠製造模擬的飛機;不用光、熱和水,就能夠模擬天氣。程式設計師可以用計算機把想法變成現實,至少是視覺上的真實感,並在自己創造的虛擬世界中對其進行測試。

計算機程式設計的大部分歷史可看成是努力擴大其使用範圍的過程,即讓更多的人能夠更容易地程式設計。FORTRAN是第一個真正意義上的程式語言,旨在使科研人員和工程技術人員輕鬆自如地程式設計。COBOL則是為了讓商務人士能隨心所欲地進行程式設計。經過多年的發展,程式設計已經不像原來那麼繁重困難了。不過,理想的情況是讓每個人都能程式設計。早在20世紀60年代,就有人提出這種願景,但至今仍未實現,雖然程式設計已取得了長足的進步。現在,幾乎每個人都會使用計算機,數萬甚至數百萬人都能夠完成諸如製作網頁或者在電子表格中建立財務模型所需要的基本程式設計。

然而,更重要也更值得一提的是,迄今為止,大部分程式設計仍然侷限於精英階層。目前,人們已針對熟練的程式設計師開展了研究。研究表明,他們在智力上的確具備某種特質。他們屬於那種對工作之外的事情同樣懷有濃厚興趣的人。例如,對科幻小說感興趣的程式設計師會特別關注一兩個作者,對音樂、休閒活動或者其他方面感興趣的程式設計師也是如此。這種較高的智商和高度的專注正是程式設計所需要的。心理學領域的研究人員在研究心流時曾觀察過軟體程式設計師。“心流”狀態指的是,注意力高度集中,全身心投入,心智水平達到最高。這種身心合一的境界就如同運動員進入“狀態”。

不過,這類研究只能表明如何才能成為天才程式設計師以及哪些人具備這樣的潛質。“某些人確實非常適合做程式設計師,他們比具有其他同等教育水平和同等智商的人在這一方面好很多倍,”萊斯大學的電腦科學教授肯•肯尼迪這樣說道,“現在我們還不能真正理解這種現象。”16這進一步表明,程式設計不僅是一門科學,還是一門藝術。

16.2000年6月19日,訪談。

史丹佛大學的榮譽教授高德納終生都在教授學生掌握這項技能。電腦科學能夠成為一門學科,高德納功不可沒。他以編寫軟體方面的權威著作《計算機程式設計藝術》而聞名於世。他從1962年開始動筆撰寫,目前已出版了三卷。17他的家在史丹佛大學後面的山丘上,二樓的書房裡擺著一排排的書。高德納在書房裡說道:“確實有少部分大學生——大概2%左右——具備異於常人的心智,擅長計算機程式設計。他們精於此道,智慧如同泉湧……只有這些人才能讓計算機做到令人驚歎的事情。我希望這不是真的,但是事實就是如此。”18

17.2011年出版了第4卷的第一部分4A卷。——編者注
18.2000年12月7日,訪談。

本書講述的就是這些具有特殊心智的極少數人的故事,他們能夠利用程式碼創造出神奇的世界。本書只是代表性地——絕非結論性地——對計算機程式設計歷史進行回顧,主要講述那些著名人物的生平事蹟以及他們開發的軟體。

本文內容選自《軟體故事》

《軟體故事》:軟體和程式設計藝術的興起

相關文章