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