人類使用機械處理訊息的嘗試是由兩個看似不該有交集的英國人開啟的。
在英格蘭中部萊斯特郡的柯比—馬洛里莊園,住著一對母女。
1816年初那個多雨的季節,23歲的安妮‧伊莎貝拉‧米爾班奇(暱稱安娜貝拉)和丈夫分手,帶著剛剛出生的女兒愛達回到了娘家。在開始的幾個月裡,她依然思唸著丈夫,寫了很多充滿愛意的信件,並且她的母親也希望女婿來莊園和女兒團聚,但是信寄出去後都如石沉大海。安娜貝拉一生追求自由的丈夫已經踏上了去歐洲大陸的旅程。家裡的律師建議,他們還是離婚算了,安娜貝拉接受了律師的建議,從此她一個人撫養女兒長大。愛達從小就是一個天才,學什麼東西都很快,安娜貝拉對此感到非常欣慰。但是愛達總在詢問爸爸在哪裡,這讓安娜貝拉無法回答,她一直沒有向女兒透露父親的任何訊息。
轉眼8年過去了,一條讓整個英國都感到悲傷的噩耗傳來,也讓安娜貝拉不得不告訴女兒父親的故事。被譽為英國驕傲的大詩人拜倫在希臘病逝,而他正是女孩愛達的父親。今天沒有人知道 8 歲的愛達在得知她的身世之後是一種什麼感覺,但是這個出身非同一般的女子,注定要過一種非同常人的生活,而且要做一番常人不敢想的事情。
世界上第一位程式設計師
愛達的故事要從她的父母講起。
詩人拜倫自不用說,他是整個18 世紀和 19 世紀英國最偉大的詩人。他的代表作《唐璜》是史詩般的巨著,在英語詩歌中的地位,堪比《神曲》在義大利語、《浮士德》在德語中的地位。1815 年,27 歲的拜倫和 22 歲的安娜貝拉小姐結婚,並且很快生下了愛達。
安娜貝拉在愛達很小的時候就教她數學,這在當時英國上流社會的女子教育中是非常罕見的,而愛達無論學什麼數學知識幾乎都是一學就會。同時,愛達繼承了父親的想像力。12 歲的時候,她就對飛行器著迷,那時凱利爵士還沒有試飛他的載人滑翔機。為了研究飛行,她對鳥類的身體構造產生了興趣,但又不忍心解剖鳥類,便請母親找來了一本鳥類解剖圖解。在愛達的一生中,她一直保持著對數學和自然科學的極大熱情。
1833年,18歲的愛達正式進入英國上流的社交圈。改變了愛達一生命運的則是在一次沙龍上她見到了發明差分機的科學家巴貝奇,並且見到了被她母親稱為「能思考的機器」的差分機。
愛達比大部分大學畢業生(當時只有男性可以上大學)都有著更高的數學和機械修養。當大家還只是驚訝於這種機械能夠解題時,愛達已經琢磨出了它大致的原理,並且對此著了迷。她後來寫信給朋友寫說,那是所有機械中的珍寶,並且流露出對那台機器的渴望。
巴貝奇的科學家氣質也吸引著年輕的愛達。巴貝奇當時41歲,舉止沉穩,輪廓分明的臉上散發出機智和魅力。愛達希望借助一個高智商的頭腦,來實現當時女性在科學上難以實現的夢想,而眼前這位男子,以及他所從事的事業,正是指引她在黑暗中前行的明燈。
此時的巴貝奇,已經在計算機研究領域花了近20年的時間。前十年他是成功的,但是接下來的十年他遇到了瓶頸,而他的想法則又遠遠超出了當時他正在研製的那台機器。長期以來,他都是在孤軍奮戰,他需要一個高智商的助手。讓他沒有想到的是,這位頂著英國最有名的姓氏,後來成為勒芙蕾絲伯爵夫人的年輕女子,就是他尋找多年的合作者。
從那一刻起,兩個人一同開始了在訊息發展史上偉大而悲壯的「奧德賽」。
巴貝奇發明小型差分計算機
1792 年,巴貝奇出生於倫敦一個富有的銀行家家庭,18 歲進入著名的劍橋大學三一學院,成為牛頓的校友。後來他擔任了牛頓曾經 擔任的盧卡斯數學教授a 職務。在進入大學之前,他就顯示出了極高的數學天分。進入大學後,巴貝奇發現,當時英國人普遍接受的牛頓建立在運動基礎之上的微積分,不如萊布尼茲基於符號處理的微積分便於理解傳播。為了推廣已經被歐洲大陸普遍接受的萊布尼茲的微積分,他和其他人一同創辦了英國的(數學)分析學會。不過巴貝奇並不是一個安分的學生,他一方面顯示出超凡的智力,另一方面又不按照要求完成學業,為此他不得不轉了一個學院繼續學業。在學校裡,他還對很多超自然的現象感興趣。
如果不是趕上工業革命,巴貝奇或許會尋找某一個傳統的數學領域或者自然哲學領域做一輩子研究,並且留下一個巴貝奇定律或者巴貝奇定理。但是,工業革命的大背景讓他把畢生的精力和全部的金錢都投入研究能夠處理訊息的機械中。這也不奇怪,因為工業革命為訊息處理提供了思想上的依據、技術上的條件和廣闊的市場。
既然能想到的所有規律都可以用運動規律來描述,那麼就很容易想到讓具有特殊結構的齒輪組運動來完成計算,這便是設計機械計算機的思想基礎。這種想法早在 17 世紀就有人嘗試過。法國數學家帕斯卡發明了一種手搖計算器——雖然有時人們將它稱為最早的機械計算機,但實際上它和我們今天理解的計算機概念沒有太多的相似之處,稱之為計算器更恰當。帕斯卡計算器從外觀上看有上下兩排旋鈕,每個旋鈕上都刻著 0~9 十個數字。在做加減法時,只要將參加運算的兩個數字分別撥到相應的位置,然後轉動手柄,計算器裡的一組組齒輪就會轉動,完成計算。
帕斯卡計算器最初只能做加法,後來經過改進可以做減法和乘法,但沒法計算除法。在帕斯卡之後,萊布尼茲改進了計算器。他發明了一種以他的名字命名的轉輪(萊布尼茲輪),方便實現四則運算中的進位和借位。到了 19 世紀初,經過近兩個世紀的改進,機械計算器已經能夠完成四則運算,但是計算的速度很慢,精度也不夠高,而且設備造價昂貴。不過,這種計算器更大的缺陷在於,那些複雜的運算,比如對數運算和三角函數運算都做不了。
19世紀機械工業的發展需要進行大量的複雜計算,比如三角函數的計算、指數和對數的計算等。在微積分出現之前,完成這些函數的計算幾乎不可能。18 世紀之後,歐洲數學家使用微積分,找到了很多計算上述函數的近似方法。不過這些方法的計算量極大,需要很長的時間,而且當時除了數學家,一般人是無法完成那些計算。為了便於工程師在工程中和設計時完成各種計算,數學家設計了數學用表,這樣工程師可以從用表中直接查出計算的結果。
不過,那個時代的數學用表錯誤百出,為生產和科學研究帶來了很多麻煩。而這個問題很難避免,因為手算很難保證完全不出錯。如果很多數學家分別獨立計算,還可以比對結果發現錯誤。但是巴貝奇發現,那些不同版本的數學用表都是抄來抄去的,而犯的錯也都是一樣的。因此,巴貝奇就想設計一種機械,能夠完成微積分的計算,然後用它來計算各種函數值,得到一份可靠的數學用表。當時他只有22 歲。
在隨後的 10 年裡,巴貝奇造出來一台有 6 位精度(巴貝奇最初的目標是達到8 位精度)的小型差分計算機a。隨後巴貝奇用它算出了好幾種函數表,用於解決航海、機械和天文方面的計算問題。值得指出的是,巴貝奇的這次成功受益於工業革命的成就——當時機械加工的精度比瓦特時代已經高出了很多,這讓巴貝奇能夠加工出各種尺寸獨特的齒輪。但是,當時並沒有 20 世紀的精密加工技術,製造小批量特製齒輪和機械部件的成本高、難度大,這給巴貝奇後來的工作帶來了諸多不便。
不過,首次成功還是讓巴貝奇獲得了英國政府的資助,用以建造一台精度高達 20 位的計算機。幾年後,他又獲得了劍橋大學盧卡斯數學教授的職位,這讓他有了穩定的收入。在此之前,他一直在花自己繼承的 10 萬英鎊的遺產。勝利女神似乎正在向他招手,但是在接下來的時間裡,他在計算機研究方面一籌莫展。
從表面上看,巴貝奇遇到的困難是因為那台差分機太複雜了,裡面有包括上萬個齒輪的2.5 萬個零件,當時的加工水準根本無法製造。但更根本的原因是,巴貝奇並不真正理解計算的原理。他不懂得對於複雜的計算來講,不是要把機器做得更複雜,而是要用簡單的計算單元來實現複雜的計算。當然,在那個年代沒有人瞭解這些。作為現代計算機基礎理論的布林代數要再等十幾年才被提出來,而且要再過近一個世紀才會被應用到運算技術中。
用卡片記錄指令和思想
在支持了巴貝奇 10 年之後,英國政府對那個永遠造不出來的機器已經失去了興趣,只好為已投入的 1.7 萬英鎊經費自認倒楣。而知識界對此也普遍不看好,認為那台機器就算造出來也不會有什麼作用。
巴貝奇從來就不是一個會輕易放棄夢想的人。在失去政府的資助後,巴貝奇仍在繼續工作,而且有了一個更龐大的計畫——製造一台能夠完成一系列計算而不是單一計算,甚至具有儲存功能的機器,巴貝奇稱它為分析機。他的這一靈感來自法國人約瑟夫‧瑪麗‧雅卡爾(Joseph Marie Jacquard)在 1804 年發明的雅卡爾提花機。在發明提花紡織機之前,要想織出漂亮的布匹,就需要工匠站在紡織機後面用手控制各種顏色的絲線。雅卡爾發明了一種用打孔卡片控制的紡織機,紡織機可以根據預先設置好的「程式」(雖然當時還沒有「程式」這個概念)移動絲線,織出漂亮的布匹。雅卡爾並不知道他的這項發明在訊息史上具有重大意義。因為這是第一次把訊息透過一個機器能夠辨識的載體記錄下來,再由這個訊息來控制機器的運轉。多年以後,IBM 公司發明了用於統計的製表機,其原理其實和雅卡爾提花機差不多。
巴貝奇在見到雅卡爾提花機後,馬上就想到了計算也可以由記錄在卡片上的訊息控制。這樣一來,計算機不僅能完成 3+5 這樣的數值運算,而且能夠完成 X+Y 這樣變量之間的運算,而變量 X 和 Y 的值,既可以由卡片輸入進去,也可以是前一次運算的結果。這其實就是最原始的程式和循環的概念。不僅如此,巴貝奇想像的計算機還應該具有邏輯判斷的功能,比如一個變量是否大於 3,然後根據判斷的結果,決定走哪條路徑繼續計算。這其實就是今天電腦程式設計中分支的概念。由於當時沒有現成的詞語描述他的想法,所以他的手稿今天讀起來非常難以理解。比如他用「貨倉」(store)表示儲存單元,用「磨坊」(mill)表示運算單元。但是在這些彆扭用詞的背後,卻閃爍著超越時代的思想光輝。按照巴貝奇的設想,在這台機器中,資料是流動的,它們從卡片中流入「磨坊」進行計算,然後再流入「貨倉」。這其實就是今天我們所說的數據流或者訊息流的概念。
愛達的加入讓巴貝奇終於有了一個可以對話和討論問題的人。她很快從一個助手變為一個思想的來源,並且為他們將要建造的這台機器賦予了無限的想像空間。這種身份的轉變,在很大程度上要歸功於愛達寫的一份報告。
1840 年,在失去英國政府的支持後,巴貝奇和愛達開始尋求歐洲其他國家的支持,畢竟實現如此龐大的計畫實在是太花錢了。巴貝奇把目光投向了義大利。對這個曾經出現了數學家阿基米德的國度,巴貝奇充滿了希望。當時義大利負責制定國家科學報告的路易吉‧梅納布雷亞(Luigi Menabrea)在看了巴貝奇的設計圖紙後興奮不已,想將它變成一份類似於「歐洲分析機報告」的建議書,推薦給歐洲學術界。巴貝奇並不懂義大利語,這份報告的翻譯工作就由愛達來完成。愛達在翻譯這份報告時加入了很多自己的想法,這些想法實際上比報告本身的內容更有價值。b 或許是愛達覺得自己的想法還不夠成熟,或許是其他原因,三年後她才將自己翻譯的報告連同她加進去的幾倍長的內容拿給巴貝奇看,巴貝奇興奮不已。
愛達提出了今天程式設計中循環和遞歸思想的雛形。當時數學家都在為無窮級數的展開和求和發愁。如果有一種能夠實現自動循環計算的機器,那麼那些令人煩惱而又枯燥無比的計算將迎刃而解。為了證明這一點,愛達沒日沒夜地工作,她試圖設計一種讓機器自動解題的方法,裡面包括一些步驟或者流程以及具體的運算。那些流程和運算結合在一起,其實就是我們今天計算機程式設計的思想。
梅納布雷亞雖然喜歡巴貝奇的想法,但他當時還只是一個幫政府做顧問的普通數學家,不是後來的義大利首相,因此他無法給予對方直接的支援。這樣一來,巴貝奇和愛達還得自己來。他們沒有外來的經費,甚至沒有助手。這一年巴貝奇已經 51 歲了,而愛達只有 27 歲。不過他們的關係卻有點兒像今天創業公司的 CTO(首席技術長)和 CEO(首席執行長)的關係,後者更多地在控制全局。這可能是因為愛達更具想像力,而且更善於把事情講清楚。愛達有一次不無得意地對巴貝奇講:「我覺得你的預見性不及我的一半。我不認為我父親是詩人和我要成為分析師(相當於今天所說的電腦科學家)有什麼矛盾之處。」
事實上,愛達正是從她的父親那裡繼承了詩人所特有的想像力。比如愛達已經意識到,這個由卡片控制的機器不僅能計算,還能操作(operate)其他東西,比如操控語言、譜寫音樂。愛達甚至預測了「計算機科學」會成為一門獨立的學科。她認為,「那是一門獨立的學科,自有其抽象的真理和價值……獨立於我們那些借助邏輯推理進行研究的課題」。今天,如果按照《美國新聞與世界報導》對學科的分類,計算機科學在大學中研究者人數是僅次於生命科學的第二大「科學類」學科,但這是 100 年之後的事情,愛達沒有機會看到這一天的到來。
為了製造出這種能夠操作其他東西的分析機,愛達不僅投入了後半生全部的精力,甚至變賣了自己的珠寶。但是巴貝奇的分析機始終沒有製造成功,甚至離成功還差得很遠。不過,愛達的想像力確實超人,她假定能夠設計發明出一種操作其他東西的計算機,然後設計了在計算機上能夠進行循環計算的流程,這其實就是今天在虛擬機上開發程序的概念。愛達因此被譽為世界上第一位程式設計師。1981 年,美國國防部開發出了一種新的高級程式語言,並用愛達的名字 ADA 命名,以此紀念這位計算機科學的先驅。
今天我們回過頭來看巴貝奇和愛達設計的分析機,它和我們使用的真正的計算機有一些相似之處,即有了硬體和軟體之分。在硬體上,它除了有運算單元,還有寄存器;在軟體上,除了能做直接的數學運算,還可以根據對數值大小的判斷,決定採用不同的計算流程,並且允許在計算時採用「循環」和迭代的方式分步驟完成。不過這台分析機和巴貝奇的差分機一樣,實際上也沒有製造完成。
1852 年,身患子宮癌的愛達不幸去世,年僅 37 歲,令人十分惋惜。已經 60 歲的巴貝奇痛失知己和合作者,餘生他不得不自己解決所有問題。事實上,在愛達去世前幾年,或許是因為看到他們的計畫太過宏偉,預感到有生之年沒有實現的可能,巴貝奇又回到了最初的想法,製造一台精度極高的差分機,世稱巴貝奇差分機二號。直到 1871 年巴貝奇去世,他只完成了這台龐大機器的 1/6。所幸的是,他和愛達留下了 5 萬張藍圖以及大量的設計文稿。100 多年後,人們根據他們的藍圖製作了這台差分機,證明當初他們的想法是正確的。但是,巴貝奇在 1871 年去世時,不僅留下了一堆債務,而且失去了所有榮譽。大家覺得他是一個失敗者,甚至是一個騙子。
加入電腦王Facebook粉絲團