探索軟件的起源與演進,呈現(xiàn)軟件發(fā)展史上的重要人物和事件。按軟件的孕育、誕生、發(fā)展、改進、壯大過程分為六篇。
第一篇 潛龍勿用 追溯二進制數(shù)與中國文化的淵源、萊布尼茨發(fā)明二進制算術(shù)的動機和背景、穿孔卡片與二進制數(shù)的結(jié)合、穿孔卡片在自動提花機和自動計算中的應用、巴貝奇制作分析引擎的艱辛歷程、世界上第一個計算機程序的誕生過程。
第二篇 見龍在田 1936年圖靈機模型橫空出世。世界各地的發(fā)明家陸續(xù)開始制作計算機,世界上第一臺可編程計算機在德國誕生,第一臺電子數(shù)字計算機ABC在美國誕生,隨后為曼哈頓項目做出重要貢獻的機械式通用計算機馬克一號悄悄登場,第一臺通用數(shù)字計算機ENIAC問世。馮?諾依曼完成在計算機歷史上具有里程碑意義的《第一草稿》。
第三篇 終日乾乾 1945年圖靈提出ACE提案,著手制造電子計算機,同時構(gòu)思了廣闊的軟件藍圖。1946年,威廉姆斯和基爾伯恩發(fā)明了用電子方式訪問的CRT內(nèi)存,為實現(xiàn)存儲程序計算機鋪平了道路。英國國家物理實驗室、曼徹斯特大學、劍橋大學和費蘭蒂公司紛紛加入制造電子計算機的行列。
第四篇 或躍在淵 美洲大陸的商業(yè)化大型機紛紛出現(xiàn),格蕾絲發(fā)明的編譯器為軟件大生產(chǎn)做好了準備。1952年IBM的第一臺商業(yè)化的科學計算機IBM 701問世,開啟了藍色巨人的電子計算機征程。1956年第一臺全晶體管的現(xiàn)代計算機TX-0在MIT誕生,從此晶體管取代電子管成為構(gòu)建現(xiàn)代計算機的基本材料。1957年第一種被廣泛使用的高級編程語言FORTRAN誕生。
第五篇 飛龍在天 1960年DEC公司推出PDP-1小型機,進一步降低計算機的成本,向更多人展示了計算機和軟件的魅力。MIT和BBN公司開始研發(fā)分時操作系統(tǒng),IBM投入巨資打造的OS/360,貝爾實驗室的UNIX操作系統(tǒng)問世,操作系統(tǒng)的功能日臻完善。系統(tǒng)軟件和應用軟件的分工逐步形成,軟件的社會化大生產(chǎn)即將爆發(fā)。
第六篇 亢龍有悔 集成電路技術(shù)逐漸成熟,硬件體積變得越來越小,價格越來越低。20世紀80年代個人計算機(PC)登上歷史舞臺。各種高級編程語言、應用軟件紛紛出現(xiàn);ヂ(lián)網(wǎng)走上前臺,自由軟件運動和開源軟件大放光彩。
全方位展現(xiàn)軟件發(fā)展的歷史脈絡,講述軟件發(fā)展歷程中的動人故事,作者10余年搜查集考證,直接采訪書中人物或親歷者,包括C 之父本賈尼·斯特勞斯特魯普、自由軟件之父理查德·馬修·斯托爾曼、Winows NT內(nèi)核之父卡特勒等,耗時4年寫就,呈現(xiàn)數(shù)百張珍貴歷史照片。
大約700萬年前,在東非大峽谷西側(cè)的廣袤原野上,生活著一群人。我們對他們知之甚少,不知道他們來自哪里,如何生活,忙碌之余想些什么。我們只知道他們中的一位死后,頭骨變成了一塊化石。2001年,法國-乍得古人類學聯(lián)合考古隊的隊員阿溫塔?蒂姆都瑪貝(Ahounta Djimdoumalbaye)在乍得北部的朱布拉沙漠(Djurab Desert)發(fā)現(xiàn)了這塊化石。2002年7月10日,在關(guān)于這塊化石的論文即將在《自然》雜志上發(fā)表的前一天,乍得總統(tǒng)將這塊化石取名為圖邁(Touma?)出自當?shù)馗晏m游牧部落的語言,意思是生命的希望。
如果將這顆頭骨化石正對前方,面部垂直,那么它的大腦顱底與脊髓銜接的枕骨大孔剛好垂直向下,這表明頭垂直位于脊柱上,古生物學家據(jù)此判斷它的主人已經(jīng)習慣兩腿直立行走。這是區(qū)別人和猿的關(guān)鍵特征。
在圖邁生活的年代過去600多萬年之后,距今大約7000多年前,在長江和黃河之間的中原大地上,生活著另一群人。他們將丹頂鶴的翅骨做成笛子,起初可能是為了發(fā)出聲音吸引獵物,后來逐漸當作樂器,吹出各種旋律。1984年,在河南舞陽的賈湖遺址中,河南省文物考古研究所考古研究員張居中發(fā)現(xiàn)了一支骨笛,在之后的幾年中,考古人員又發(fā)現(xiàn)了幾十支骨笛。同樣是在賈湖遺址中,考古人員還發(fā)現(xiàn)一些刻有符號的龜甲和骨頭,這些符號看起來是象形文字,有的看似眼睛的目字,有的與日字很像。
公元前3500年左右,在兩河流域的美索不達米亞地區(qū)(今伊拉克南部),生活著一群黑頭發(fā)的人,他們稱自己為黑頭人。他們發(fā)明了楔形文字,寫在黏土片上。他們用豐富的詞匯來表達運河、堤壩、水庫這些對他們生活很重要的概念。他們還用文字記錄生活、傳遞思想。他們被稱為蘇美爾人,至今已發(fā)現(xiàn)的蘇美爾文文獻已有數(shù)萬篇,內(nèi)容有信件、法律文獻、贊美歌等。
大約在公元前3400年,古埃及也有了完整的象形文字系統(tǒng)。
公元前約1400年,中國的文字逐漸系統(tǒng)化。人們有時把文字刻在龜甲或獸骨上,有時把文字銘刻或鑄造在青銅器上,它們后來分別被稱為甲骨文和金文。
文字的力量是巨大的。有了文字后,人類可以書寫自己的思想,人與人之間可以通過文字進行跨越時空的交流,先進的技術(shù)和偉大的思想可以得到更廣泛的傳播?梢哉f,文字是第一種可以清晰記錄和廣泛傳播人類思想的載體。
文字出現(xiàn)后,人類文明的發(fā)展速度大大加快,人口的數(shù)量也隨之增長,人與人之間的矛盾和紛爭也日益復雜化。
文字的進步意義不容置疑,但文字作為人類語言的一種書面形式,也有著與生俱來的不足,那就是可能有歧義,特別是當出現(xiàn)糾紛時,不同人出于不同的目的,可能做出不同的解釋。被稱為通才的德國哲學家和數(shù)學家萊布尼茨(16461716)曾反復思考這個問題。雖然有很多頭銜,但萊布尼茨的主要職業(yè)是律師。1661年,15歲的萊布尼茨進入萊比錫大學學習法律專業(yè),兩年后便獲得學士學位。1666年,獲得博士學位的萊布尼茨放棄學校的教職,到美茵茨(德國萊茵蘭-普法爾茨州的首府和最大城市)的高等法庭工作。從此,萊布尼茨一邊從事律師工作,一邊鉆研自己喜愛的數(shù)學和哲學問題。萊布尼茨持續(xù)努力的一個重要方向是開發(fā)一套更好的表達方法。為此,萊布尼茨在1677年發(fā)現(xiàn)了微積分基本定理。但他仍繼續(xù)尋找,萊布尼茨說:如果能找到合適的字符或符號清晰且準確地表達我們的思想,就像算術(shù)里表達數(shù)字、幾何里表達直線那樣,那么很明顯,我們就可以用算術(shù)和幾何領(lǐng)域的方法來處理所有事情。
1679年,萊布尼茨發(fā)明了二進制算術(shù)。在深入思索二進制表達方法后,萊布尼茨驚喜萬分,他認為自己找到一種可以完美表達一切的簡單方式,并且這種方式是可以計算的,便于使用機械來實現(xiàn)。萊布尼茨寫信給在中國的法國傳教士白晉,希望白晉把自己的發(fā)明介紹給中國的皇帝。1701年11月14日,白晉回信給萊布尼茨,告訴萊布尼茨中國已經(jīng)有一套二進制系統(tǒng),稱為八卦,白晉還在回信中詳細介紹了《周易》。
1703年,萊布尼茨把自己關(guān)于二進制算術(shù)的思考以及對《周易》的理解寫成一篇論文,提交給了巴黎科學院(Paris Academy of Sciences),這篇論文的主標題是二進制算術(shù)解說,副標題是關(guān)于僅使用字符0和1的二進制算術(shù)的闡釋,并說明其對理解中國古代神話人物伏羲的意義。
萊布尼茨認為二進制數(shù)是一種可以表達世界的萬能方式,有了這種精確的表達方式后,在面對糾紛時,便可以通過計算來消除分歧。在寫于1685年的《發(fā)現(xiàn)的藝術(shù)》(The Art of Discovery)一文中,萊布尼茨說:精煉我們推理的唯一方式是使它們同數(shù)學一樣切實,這樣我們就能一眼找出我們的錯誤,并且在有爭議時,我們就可以簡單地說,讓我們來計算吧,不需要無謂地糾纏,就能看出誰是正確的。
在萊布尼茨去世100多年后,英國數(shù)學家巴貝奇(17911871)設計出一種機器,稱為分析引擎。巴貝奇用穿孔卡片記錄由0和1組成的二進制數(shù),并專門設計了一類卡片,用來表達指令,通過組合不同的指令即可實現(xiàn)不同的計算任務。有了這種方法,人們就可以用一串串的指令表達自己的思想和智慧。如今,我們把這種表達方式稱為軟件。
在巴貝奇去世60多年后,另一位英國人圖靈(19121954)發(fā)表了一篇偉大的論文。在這篇論文中,圖靈設計了一臺通用的機器。一條長長的紙帶穿過這臺機器,紙帶上有要計算的二進制數(shù)。這臺機器可以從指令表中獲取指令,然后執(zhí)行。這臺機器后來被稱為圖靈機。
在圖靈的這篇偉大論文發(fā)表后的第10年,匈牙利裔美國數(shù)學家馮?諾依曼設計了一套實現(xiàn)圖靈機的方案,他將圖靈機分解為中央算術(shù)(CA)單元、中央控制(CC)單元、內(nèi)存(M)、輸入(I)和輸出(O)共5大部分。馮?諾依曼設計的數(shù)字化自動計算系統(tǒng)成稿后,成為指導自動計算技術(shù)的一份綱領(lǐng)性文件。不久之后,按照馮?諾依曼的設計生產(chǎn)的機器便在英國和美國出現(xiàn)了,而且數(shù)量不斷增多。逐漸地,這些機器有了一個共同的名字計算機,它們所遵守的設計架構(gòu)被稱為馮?諾依曼架構(gòu)。
如今,我們每天的工作和生活已經(jīng)離不開計算了:上班坐地鐵時,通過計算進站,過一會兒通過計算付費出站;到了單位后,很多工作需要依賴計算完成;周末外出時,通過計算確定最佳路線,通過計算尋找好評多的餐館就餐。
這些不同形式的計算都具有相同的本質(zhì),它們都使用萊布尼茨青睞的二進制形式表達信息。它們的基本原理都是巴貝奇開創(chuàng)并由圖靈抽象化的圖靈機模型,通過不停獲取和執(zhí)行指令來實現(xiàn)各種功能。從組成結(jié)構(gòu)的角度看,它們采用的都是馮?諾依曼架構(gòu)。
如果把圖邁看作人類歷史的開端,把契刻符號看作人類文字的起點,把巴貝奇發(fā)明分析引擎看作人類擁有計算機和軟件的起點,把馮?諾依曼架構(gòu)看作現(xiàn)代計算機規(guī)模化生產(chǎn)的起點,然后把人類歷史的這幾個關(guān)鍵節(jié)點標注在一條一米長的坐標軸上,那么文字歷史的長度只有0.1毫米,計算機和軟件歷史的長度只有2.68微米,現(xiàn)代計算機歷史的長度只有1.08微米。在長達700萬年的人類歷史中,大部分時間是沒有文字的;而在有文字的歷史中,大部分時間是沒有計算機和軟件的。
誠然,計算機和軟件的歷史很短,但它們對人類的生產(chǎn)和生活已經(jīng)產(chǎn)生了巨大的影響,并且影響還在繼續(xù)。
與人類此前發(fā)明的其他機器一旦完成就擁有確定的功能不同,計算機的功能是由軟件賦予的。如果沒有軟件,那么單獨的硬件就無法工作,沒有任何實用功能。但是一旦為計算機設計好軟件,計算機就會按照軟件的指示來工作,具有軟件賦予的功能,并且只要換上不同的軟件,就會具有不同的功能。正如巴貝奇的學生埃達所言:分析引擎根本不會自詡生下來就能做多少工作,但分析引擎能夠做我們知道如何讓它去做的任何事情。埃達是大詩人拜倫的女兒,她是深刻思考軟件的第一人。埃達不僅預見到軟件的無限潛能和光輝前景,并且還用詩一般的文字將其描繪了出來。
從這個意義上說,軟件是計算機系統(tǒng)的靈魂,是關(guān)鍵所在。雖然本書不可避免地涉及計算機硬件的發(fā)展歷史,但主角仍然是軟件。
軟件不是一朝一夕就發(fā)明出來的,而是人類文明長期積累的結(jié)果。沒有這些基本的積累,軟件之夢就是空中樓閣。在某種程度上,軟件的歷史是人類歷史的延續(xù)。人類很早就有自動計算的夢想,如果從伏羲設計最早的二進制系統(tǒng)算起,那么這個夢想出現(xiàn)的時間比文字出現(xiàn)的時間還要早。從這個意義上講,完整的軟件史幾乎就是人類的文明史,跨越數(shù)千年。這個過程猶如一場漫長的接力跑,很多人參加了前面的接力跑,但他們沒能看到抵達終點的那一刻。從漫長的歷史長河中找到曾參加軟件接力跑的那些人,把他們參跑時的精彩表現(xiàn)以及所做所想記錄下來,讓他們的貢獻隨著軟件文明的發(fā)展被照得越來越亮,而不是日漸暗淡和泯滅,這是激發(fā)我寫這本書的原因,也是激勵我完成本書的力量,更代表本書的選材原則。本書記錄的是那些沖鋒陷陣、舍我其誰的場上運動員而不是圍觀者。本書的主角是那些開路的英雄和拓荒者。
張銀奎,國內(nèi)知名的調(diào)試技術(shù)專家。畢業(yè)于上海交通大學信息與控制工程系,長期從事軟件開發(fā)和研究工作,曾在英特爾工作13年,對IA-32架構(gòu)、操作系統(tǒng)內(nèi)核、驅(qū)動程序,尤其是對軟件調(diào)試有較深入的研究。著有暢銷書《軟件調(diào)試》《格蠹匯編》等,格蠹科技(xedge.ai)創(chuàng)始人,高端調(diào)試網(wǎng)站(advdbg.org)創(chuàng)建者。翻譯(合譯)作品有《二十一世紀機器人》《觀止微軟創(chuàng)建NT 和未來的奪命狂奔》《數(shù)據(jù)挖掘原理》《機器學習》《人工智能:復雜問題求解的結(jié)構(gòu)和策略》等。
1 第一篇 潛龍勿用 1
第 1 章 史前,二進制符號 3
第 2 章 1679 年,二進制算術(shù) 11
第 3 章 1725 年,布雄織機 21
第 4 章 1745 年,沃康松織機 35
第 5 章 1804 年,雅卡爾織機 41
第 6 章 1834 年,分析引擎 53
第 7 章 1843 年,計算機程序 71
第 8 章 1847 年,布爾邏輯 81
第 9 章 1890 年,電動制表機 87
95 第二篇 見龍在田
第 10 章 1936 年,圖靈機 97
第 11 章 1938 年,Z1 113
第 12 章 1939 年,ABC 127
第 13 章 1943 年,巨神計算機 143
第 14 章 1943 年,馬克一號 149
第 15 章 1945 年,ENIAC 159
第 16 章 1945 年,《第一草稿》 183
第 17 章 1945 年,最初六人組 213
第 18 章 1946 年,摩爾學院講座 227
231 第三篇 終日乾乾
第 19 章 1945 年,ACE 提案 233
第 20 章 1946 年,CRT 內(nèi)存 243
第 21 章 1947 年,圖靈-威爾金森講座 253
第 22 章 1948 年,曼徹斯特嬰兒 257
第 23 章 1949 年,EDSAC 269
第 24 章 1949 年,曼徹斯特馬克一號 279
第 25 章 1950 年,試驗型 ACE 285
第 26 章 1951 年,《第一手冊》 291
第 27 章 1951 年,費蘭蒂馬克一號 305
第 28 章 1951 年,計算機機房 311
第 29 章 1951 年,加載器和系統(tǒng)軟件 317
第 30 章 1951 年,第一銷售員 321
第 31 章 1951 年,錫屋里的程序員 325
第 32 章 1952 年,加拿大的第一臺計算機 333
第 33 章 1954 年,圖靈的最后程序 349
1 第四篇 或躍在淵
第 34 章 1951 年,UNIVAC 一號 5
第 35 章 1951 年,旋風 1 號和磁核內(nèi)存 17
第 36 章 1952 年,IAS 計算機 29
第 37 章 1952 年,A-0 編譯器 37
第 38 章 1953 年,IBM 701 49
第 39 章 1954 年,IBM 704 和 IBM 705 59
第 40 章 1954 年,高級編碼暑假班 63
第 41 章 1956 年,TX-0 69
第 42 章 1956 年,UNIVAC 1103A 77
第 43 章 1957 年,F(xiàn)ORTRAN 語言 85
第 44 章 1958 年,ALGOL 58 93
第 45 章 1959 年,命名棧 105
117 第五篇 飛龍在天
第 46 章 1960 年,PDP-1 119
第 47 章 1962 年,BBN 分時操作系統(tǒng) 127
第 48 章 1963 年,KDF 9 135
第 49 章 1966 年,OS/360 147
第 50 章 1970 年,PDP-11 163
第 51 章 1971 年,UNIX 系統(tǒng) 169
第 52 章 1972 年,C 語言 195
第 53 章 1974 年,關(guān)系模型和 SQL 203
第 54 章 1978 年,VMS 219
239 第六篇 亢龍有悔
第 55 章 1972 年,4004 241
第 56 章 1974 年,CP/M 253
第 57 章 1981 年,DOS 263
第 58 章 1983 年,Word 1.0 271
第 59 章 1983 年,Turbo Pascal 277
第 60 章 1984 年,GNU 283
第 61 章 1985 年,C 297
第 62 章 1985 年,Windows 1.0 309
第 63 章 1990 年,萬維網(wǎng) 317
第 64 章 1991 年,Linux 327
第 65 章 1993 年,NT 3.1 339
第 66 章 1993 年,Debian 353
361 跋
365 人名表