是誰發明了計算機(上)
文章來源: 波士頓的新人2019-10-20 20:44:16

        故事要從十九世紀的英國講起。工業革命帶來了蒸汽機和各種機械裝置,將人們從各種勞動中解放了出來。

       這一天,在劍橋大學的辦公室裏,年輕的數學家查爾斯·巴貝奇(Charles Babbage)對著一張錯誤百出的對數表,氣得七竅生煙。旁邊,他的好友,天文學家約翰·赫歇爾(John Herschel)充滿同情地看著他。巴貝奇嘟囔著,“上帝啊,我真希望可以用蒸汽機產生對數表,這樣就不會有這麽多人為的錯誤了”,赫歇爾愣了一下,隨口答道,“嗯,有意思,這個想法是完全有可能實現的。”

       於是在1821年,巴貝奇開始著手設計一台可以自動生成對數,指數,三角函數的機器,這就是差分機(Difference Engine)的原型。巴貝奇把這些複雜的數學計算,分解成若幹步驟,而每個步驟都可以通過簡單的加減運算來實現。譬如,要生成指數函數 f(x)=x²,最終的結果是這樣一個數列:1,4,9,16,25,36,49 ...... , 它們之間的差值是:3,5,7,9,11,13,......,而這個新的數列的差值是:2,2,2,2,2 ......,所以如果要產生下一個指數,8的平方,我們可以把最後得到的等差2,加到上個數列的最後一個數值13上,就得到15;然後再把15加到最先的那個數列的最後一個數值49上,這樣就可以得到8的平方(49+15=64)。通過這個原理,巴貝奇甚至可以用差分機算出一到一千萬之間的所有質數(a table of prime numbers up to 10 million),這在當時簡直是個奇跡。

        英國政府對差分機表現出異常濃厚的興趣,在後麵的十年裏慷慨解囊,為巴貝奇的神器投下了17000英鎊,這是一筆可以用來製造兩艘戰艦的巨資。可在這十年中,巴貝奇不停地修改他的設計,試圖精益求精,但最終卻因為嚴重超支,隻完成了差分機的1/7,而此時巴貝奇卻又有了新的想法。他要造一台可以編程的計算機!

        這台被稱為“分析機”(Analytical Engine)的機器,在巴貝奇的構想中,可以根據外部的指令執行不同的數值運算。那麽如何給機器提供指令呢?巴貝奇最先的想法是使用一種類似齒輪的裝置,但後來他從法國人Jacquard發明的自動織布機中獲得了靈感。

         Jacquard 使用的是打孔卡(punch cards)。通過打孔卡小孔的不同位置來控製織布機的主軸,從而織出不同的花樣圖案,巴貝奇見此設計之後,茅塞頓開。打孔卡可以一張接一張無限製地提供指令給分析機,而且一套不同的打孔卡可以對機器重新編程,執行不同的運算,現代計算機最主要的兩個特征: “通用”(general-purpose)和“編程”(programmable)已經呼之欲出了。

        可是,也許是因為吃夠了差分機的苦頭,當時的英國政府和科學界對“分析機”反應冷淡。也難怪他們,要是今天中國政府給了你兩艘航母的經費,十年的時間,你交出個1/7的半成品,然後你說你要搞個更偉大的項目,任憑你說得天花亂墜,估計也沒人再願意上當了。於是巴貝奇磨破了嘴皮子,大家還是無動於衷,隻有一個人除外,一個女人。

        愛塔(Ada Lovelace)是英國大詩人拜倫的獨生女兒,但父母在她滿月之日就離異了,愛塔的母親痛恨她父親拜倫的失德行為,並將此歸咎於他的詩人氣質,於是從小就讓愛塔遠離文青,專攻數理,為她打下了堅實的數學基礎,這也讓她在英國的科學界有了許多朋友。早年愛塔曾一度試圖說服巴貝奇做她的數學私教,不過被巴貝奇婉言謝絕了。當她了解到巴貝奇“分析機”的構想時,我們年輕的伯爵夫人被深深地迷住了,她甚至夢想成為巴貝奇的合夥人和公關主任,遊說世人出資建造“分析機”。

        1843年,愛塔寫下了闡述分析機原理的《注記》(Notes),在愛塔的注記中,她認為分析機不但可以處理數學問題,而且應該可以處理任何能夠轉化成數字符號的東西,包括音樂和藝術,她筆下的“分析機”簡直就成了多媒體電腦的化身。而且更加神奇的是,愛塔在注記裏寫下了世界上第一段軟件程序 -- 計算伯努利數。愛塔設計的整段程序一共需要75張打孔卡,裏麵不但有子程序(subroutine),甚至還有遞歸循環(recursive loop)。

        1983年美國國防部將內部使用的計算機編程語言命名為Ada,用來紀念這世界上第一位的程序猿。下麵這段就是來自Ada的問候:

with Ada.Text_IO; 
use Ada.Text_IO;
procedure Hello is
  begin  Put_Line ("Hello, world!");
end Hello;

不過,巴貝奇也好,愛塔也好,他們實在是太超越他們的時代了,超越了整整一百年!