波士頓的新人

舊事已過,都變成新的了
正文

是誰發明了計算機(上)

(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;

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

[ 打印 ]
閱讀 ()評論 (7)
評論
jw2009 回複 悄悄話 今天的計算機是根據杜林(Alan Turing)的理論設計的。。
帶娃是持久戰 回複 悄悄話 多謝介紹!
賭城看客 回複 悄悄話 讚,好文。
巴貝奇差分機、恩尼格瑪密碼機、(賭博用機械式)老虎機等等都是機械時代的傑作。
遠方道友 回複 悄悄話 Good article, Thanks for sharing.
Soltek 回複 悄悄話 太棒了!最喜歡看這種文章。
pltc63 回複 悄悄話 好文章,謝謝!
通州河 回複 悄悄話 差距巨大呀,估計那時候大清國整個國家知道對數的人不超過5個。
登錄後才可評論.