官术网_书友最值得收藏!

第一章
穿越時空之旅

總有一天,女士們會帶著她們的計算機在公園中散步,互相說著這樣的話:“今天早上,我的小計算機告訴了我一件很有趣的事情?!?/p>

——艾倫·麥席森·圖靈

第一批計算機進入人類的世界,其實走過了相當漫長的一段道路,尤其是在當今技術大爆炸的背景下。在這一章里,我將帶你踏上一段時間之旅,回顧這段歷史中幾個里程碑式的節點,它們對科技的發展尤其是對計算機的發展有著舉足輕重的意義。不過我得提醒你,這樣的里程碑不勝枚舉,呈現在你面前的并不是一部包羅萬象的計算機前史,而更像是一個由重要發明和發現組成的有趣合集。

這段時間之旅始于公元前2700年蘇美爾人的算盤,終于艾倫·麥席森·圖靈的圖靈機——其實它并不是真正的機器。在這段歲月里,許多早已家喻戶曉或者至今仍默默無聞的人,把自己的整個人生都貢獻給了這項事業,成就了計算機今天的輝煌,使它成為我們生活中不可或缺的一部分。

1.1 蘇美爾人的算盤(公元前2700年—公元前2300年)

計算工具是什么時候出現在相對來說還很短暫的人類歷史中的呢?是青銅時代,由美索不達米亞即兩河流域(今天的伊拉克與敘利亞北部)那些以狩獵、耕種、捕魚為生的人們創造出來的。他們在木板上刻出痕跡,用來記錄羊群、糧食和魚的數目。對于個人或者家庭來說,這種計算方法是非常有效的。但是隨著新的民族群體的興起,這些獵人、農夫、漁民必須為整個族群——首先是為他們的國王和王公大臣們承擔計算的任務,這種方式就不再適合了。而這個時期,陶匠、銅匠、面包師、地毯織匠、織布匠、寶石匠之間的交易往來非常頻繁,因此必須發明出更加有效的方法來計算更大的數額,比如百、千甚至更多。畢竟當時大城市的居住人口已經達到了50000—80000人,要管理這種數量級人口的各種事務,小木板上的幾道劃痕是遠遠不夠的。

最古老的計算工具(更確切地說是算盤)便出自這個時代??茖W家認為,這個計算輔助工具是在公元前2700年至公元前2300年由美索不達米亞的蘇美爾人發明的。可惜發明者的名字并沒有被記錄下來,不過我們至少可以確定,從那個時代開始,人類歷史上就不缺像楚澤、喬布斯、蓋茨那樣擁有天才想象力的先驅者,是他們推動著計算機的歷史不斷前進。不過,最初的算盤看起來與今天的算盤的各種形式和變種完全不同。

圖1.1為我用來裝飾書架的一把中國算盤。

圖1.1 中國算盤

4000年前第一批達到批量生產水平的算盤,是由若干塊木板或者陶板組成的。它們表面有許多長條,每一條對應著蘇美爾人當時使用的六十進制計算體系中的一個數位,基數為60。這個數字,今天的我們仍舊能在“1分鐘等于60秒”“1小時等于60分鐘”中看到。計數的時候,會往橫向或者縱向排列的對應長條里放上小石塊或者蘆葦稈,然后分別計算各條中小石塊或者蘆葦稈所代表的數目,全部加起來就得到了總數。

當時人們還會利用不同的石塊來進行計算,憑借石塊大小或形狀上的區別來區分它們在六十進制計算體系中的數位,而借助于行或列進行的計算顯然要可靠得多。

六十進制計算體系的一個簡單例子如表1.1所列。

“abacus”這個詞來自拉丁語abacus以及希臘語abax。前者差不多是“泥板”或者“木板”的意思;后者,人們猜測它屬于閃米特語的詞匯,比如希伯來語中的abaq,表示“塵土”。算盤的前身可能是“畫板”,即用手指像筆一樣在沙子或者土上畫出痕跡。這樣,幾條平行的線條就能表示六十進制體系,再有足夠的石塊就行了。

1.2 密碼棒(scytale)——第一個加密系統(公元前500年)

在信息學中,經常需要對數據進行加密處理,以此將其轉換成一種對未獲授權者不可讀的形式。加密已經成為我們數字生活中不可缺少的一部分,哪怕是WhatsApp(一款智能移動設備上的即時通信軟件)上的簡單信息也是經過加密的,因此我們有必要去追溯一下加密的源頭。

斯巴達人以高度軍事化的生活而聞名,他們擁有當時全希臘訓練得最為精良的軍隊。接下來我們要講的故事,發生在公元前395年,波斯人密謀向斯巴達人發起一場出其不意的進攻。雖然斯巴達人早已在敵方安插間諜,以便適時地通風報信,但是如果派出的信使攜帶著一封誰都可以讀的信,那么風險顯然太大,一旦暴露,就會對斯巴達非常不利。好在當時的斯巴達人走在了時代的前列,他們并沒有用明文來傳遞秘密消息。于是,我們所知的最早的加密系統——密碼棒便誕生了。

斯巴達人將一條羊皮細帶或者任何一種皮質細帶螺旋狀纏繞在一根木棍上,然后把秘密消息順著木棍的方向寫在皮帶上,再把皮帶拆下來,由信使送往收信人處。皮帶上的信息乍看上去沒有任何意義,因為原本連續的字母隨著皮帶繞圈解開被拆分,繞開的皮帶上縱向相接的字母根本不屬于同一個單詞。比如說“DIEPERSERKOMMEN”(1),就可能繞在某一直徑木棍上而顯示成:

寫成一行的話就是:

DPSKMIEEOEERRMN

如果這卷皮帶落入了敵方之手,他們就只能發現一串按照無意義的順序排列的字母。

收信人和寫信人必須各自持有一根相同直徑的木棍,收信人只要把皮帶同樣螺旋狀地纏繞在自己的木棍上(密碼棒),就能破解秘密信息了。木棍的直徑也就成為整個過程的密鑰。每當斯巴達的五督政官向外派遣一位將軍,他們總是命人制作兩根直徑一模一樣的木棍,一根保留在自己手中,另一根交給被派遣的將軍。這樣一來,發信人想要傳遞給收信人的秘密信息,甚至在自己的隊伍里也無法被解讀。

移位

用密碼棒來加密的方式被稱為移位。移位,即對一個文本的字符在順序上做出改變,而文本中的所有字符都是被保留的。移位的方式是多種多樣的,最簡單的版本,就是調轉文本或者詞語的書寫方向。比如有一種常見的移位過程,叫作花園柵欄:

DEESROMNIPREKME把這行字母寫成上下兩行:

D E E S R O M N

I P R E K M E

然后一上一下鋸齒形地讀,得到的文本就變成:DIEPERSERKOMMEN。

根據希臘歷史學家普魯塔克的記載,憑借密碼棒,斯巴達人成功地阻止了波斯人的進攻。令人聞風喪膽的斯巴達將領呂山德就是通過這種加密方式得到了關于波斯人進攻的消息,才贏得了充分準備的機會,最終擊退了波斯人。關于使用密碼棒的歷史記載不止這一條,我相信,這種加密方式在歷史進程中使用之頻繁,超過了那些已為人熟知的歷史學家的記載。

密碼棒在那個時代是相當安全的加密方式,幾乎沒有人可以破解這種加密信息。解讀密碼棒信息的關鍵就是一根相應直徑的木棍。我們現在重新回到用密碼棒加密的文本:

DPSKMIEEOEERRMN

這條信息有15個字母,我們也已經知道了它的加密手段(密碼棒),但目前它們的排列順序沒有任何意義?,F在我們把它分成兩欄:

交替讀取左右兩欄,就得到了:

DOPESEKRMRIMENE

這樣仍舊沒有讀出任何意義?,F在我們把這串字母分成三欄:

再從左往右讀這串字母,我們就解開了這段密文:DIEPERSERKOMMEN。不得不承認,這個例子非常簡單。但是它能夠很好地說明,其實破譯密碼棒加密信息的方法并不復雜。當然,前提是知曉這種加密過程的運作方式。

1.3 安提基特拉機械裝置(約公元前100年)

1900年,潛水者在靠近希臘島嶼安提基特拉海岸線的海底發現了古羅馬的沉船殘骸。這艘船出自希臘化時代,船身長度超過50米,是最大的古代船只之一。沉船事件發生在公元前70年到公元前60年之間。對船上文物的發掘工作持續了一年多。船上運送的貨物非同一般的珍貴,所以這艘船得到了一個名號——“古典時期的泰坦尼克”。

貨物中有一團被腐蝕了的金屬物,混合著木質箱盒的殘片,一開始并沒有引起人們的興趣。1905年,慕尼黑古典語文學家阿爾伯特·雷姆仔細觀察了其中的青銅部分,推測它可能是一種特殊的計算工具的一部分,不過當時他也沒有從殘片里解讀出更多東西。

1950年,英國歷史學家德瑞克·德·索拉·普萊斯更加深入地研究了全部82塊殘片。他用X射線和γ射線照射這些部件,使得上面的齒輪、銘文以及傳動裝置的殘余都顯現了出來。它們在今天看來并沒有什么稀奇,但是考慮到這個機械裝置的年代(公元前70年到公元前60年),就不失為一個驚人的發現了。這樣一項出自古典時期的高精技術完全不為人所知,同時代也找不出可與之比較的其他物件。它利用齒輪裝置來計算太陽系周期所達到的精密程度,直到中世紀晚期才再次出現。我們不禁要問,為什么人類直到中世紀才能重新達到這種技術水平?普萊斯在他的研究中提出了“古典時期的計算機”這樣一個概念,并且使這個機械裝置聞名全世界。漸漸地,借助一系列的新興手段,比如計算機斷層掃描、特殊攝像機以及用于計算機游戲的表面建模軟件,這個機械裝置的其他秘密被慢慢解開了。

它在功能上的配置著實令人震撼。雖然至今只完成了部分的復原,但我們已經可以確認,這個機械裝置的用途是測定天文現象、季節與節日。它可以計算太陽、月亮及其他在當時已經為人所知的行星的位置,此外還包含標有科林斯月份名稱的月亮歷、帶有日月刻度且標注著古埃及月份名稱和巴比倫黃道帶符號的太陽歷,以及帶有月份刻度的日月食周期表。借助這些,人們就可以確定太陽系的運轉周期和其他天文現象。從這個裝置上,我們看到了古希臘人和巴比倫人智慧的融合,也能對古人在數學與工程學上的成就略窺一斑。

盡管如此,古人發明這個裝置的真實意圖到今天我們還是不甚明了??茖W家對此有許多猜測:它的使用者是水手或者天文學家;統治者有可能用它來預言天文現象,以此證明自己擁有超自然的能力;當時的富裕階層將它用于消遣。而關于這個裝置的發明者,同樣找不到任何確鑿的證據。圍繞著安提基特拉機械裝置,還存在許多疑問和未解之謎,一如既往地讓人們充滿好奇心,激發著人們的想象力,甚至提出陰謀論的也大有人在。如果你想深入了解這個話題,那么我向你推薦喬·馬錢特的《解密天國》(2)。這本書雖然也沒有找到最終的謎底,但是寫得十分扣人心弦,讀來讓人受益良多。

可以說,在獲得新的考古發現之前,安提基特拉島的機器,這臺2000多年前用一套復雜的齒輪裝置計算太陽系周期的機器,就是人類最早的計算機。

1.4 關于加密分析的專題論文(850年前后)

在介紹密碼棒的時候,我向你演示了怎樣把一段用移位法加密的密文變得可讀。這個過程被稱為密碼分析,它在今天的各種組織中都起到了重要的作用,比如政府借助密碼分析,試圖破譯敵方傳輸的重要信息。軟件工廠或者商業網站運營商也必須面對他人對其產品進行全面密碼分析的問題。他們往往有意讓黑客嘗試突破自己產品或者網頁的安全防御,借此找出自身的漏洞,密碼員再通過加密來保障信息的安全。因而密碼分析員在當今的數字世界中也就顯得尤為重要。

所謂密碼分析,即在缺乏密鑰的情況下把一段密文轉換成明文。早在公元850年,阿拉伯哲學家肯迪便對這個領域展開了深入的研究??系鲜且粋€天賦極高的人,身兼多個頭銜,包括哲學家、科學家、數學家、醫生、音樂家、作家。他撰寫了第一篇關于密碼分析的專題論文。在這部篇名為《論解譯加密信息》的手稿中,他詳細描述了如何破解單字母表替換密碼,而這在當時的歐洲是被認為無法破譯的。

單字母表替換

你已經了解了移位的加密方式,也就是只對字母的順序進行調換。而單字母表替換則是把明文中的字母或符號替換成其他字母或符號,比如愷撒加密法就是這類替換中的一種常見方式。簡易替換加密,是指把明文中的單個字母按照一張密文字母表一一替換。

如表1.2所列,上一行包含明文,下一行則是密文字母表。

按照這個加密方式,明文COMPUTERGESCHICHTE(3)被加密成了KCNMDRHSEHAKTVKTRH。只要你用第一行中的字母去替換對應的第二行中的密文字母,就能重新獲得明文。愷撒加密法的原理同簡易替換加密是相似的,只是加密時用的是一種推移過的字母表。

如表1.3所列,上一行包含明文,下一行則是在愷撒加密法中使用的推移過的字母表。

COMPUTERGESCHICHTE通過愷撒加密法被加密成了FRPSXWHUJHVFKLFKWH。

頻率分析

我們再看肯迪的工作,他在自己的手稿中展示了如何借助頻率分析這種統計學手段來破譯單字母表替換。首先,成功破譯的前提是懂得這門語言并且手頭握有大量文本。加密的文本越充足,破譯信息的可能性就越大。接下來計算密文中單個字母的數量,并記錄各字母的出現頻率。在這里起關鍵作用的,便是各個字母在總數中所占的百分比。比如在德語中,字母E是最經常使用的。如果在加密的消息中使用最多的是字母X,那么就可以推測,X在密文中充當了E。這里我制作的單字母表替換的例子如下:

Nju PofOpuf, efn ejhjubmfo Opujacmpdl wpo Njdsptpgu, cfsfjufo Tjf efn Jogpsnbujpotdibpt bvt Tdivmf, Tuvejvn, Bscfju pefs Ipccz fjo Foef.

PofOpuf fsmbvcu Jiofo Ufyuf, Cjmefs, Afjdiovohfo pefs iboetdisjgumjdif Opujafo boavmfhfo voe ücfstjdiumjdi av pshbojtjfsfo.

這段文字看起來沒有任何意義,我們只知道這是一段德語?,F在我們使用頻率分析來破譯這段文字。首先我得到了以下統計結果:

字母f在這里被使用了32次,字母o為25次,字母j為22次,諸如此類??紤]到德語中使用最頻繁的是字母e,我們就可以把這一段文字中的f替換成e:

... ..e...e, .e. .......e. .......... ... ........., .e.e..e. ..e .e.

............... ... .....e, ......., ...e.. ..e. ..... e.. E..e.

..e...e e...... ...e. .e..e, .....e., .e.......e. ..e. .............e

.....e. .....e.e. ... ..e........... .. ........e.e..

我們可以重復這種方法,用德語中使用頻率第二高的字母來替換密文中使用頻率第二高的字母。在這個例子中,用字母n替換字母o:

... .neN..e, .e. .......en N......... ..n ........., .e.e..en ..e .e.

.n........n...... ... .....e, ......., ...e.. ..e. ..... e.n En.e.

.neN..e e...... ..nen .e..e, .....e., .e...n.n..en ..e. ..n............e

N....en .n...e.en .n. ..e.......... .. ....n...e.en.

現在繼續進行,密文中的字母j和p分別用德語字母表中出現頻率第三高和第四高的字母i和o替代:

.i. OneNo.e, .e. .i.i...enNo.i...o.. .on .i..o.o.., .e.ei.en .ie .e.

In.o....ion....o. ... .....e, ....i.., ...ei. o.e. .o... einEn.e.

OneNo.ee...... I.nen .e..e, .i...e., .ei..n.n..eno.e. ..n.....i....i..e

No.i.en .n...e.en .n. ..e..i....i.. .. o...ni.ie.en.

如此一來,我們已經可以猜測出若干詞語了,剩下的字母不依賴頻率分析也可以推斷出來。

接下來我憑借頻率分析用字母t和r來替換密文中的u和s:

.it OneNote, .e. .i.it..en Noti...o.. .on .i.ro.o.t, .ereiten .ie .e.

In.or..tion....o. ... .....e, .t..i.., .r.eit o.er .o... ein En.e.

OneNote er....t I.nen Te.te, .i...er, .ei..n.n..en o.er .n....ri.t.i..e

Noti.en .n...e.en .n. ..er.i..t.i.. .. or..ni.ieren.

如果頻率分析無法進行,我們還可以像玩縱橫填字游戲一樣猜測詞語。比如看到字母組合“o.er”,不妨猜測這個詞是“oder”(4)。在我的例子中,就可以用d去替換e。此外還有字母組合“En.e”,補充完整應該是“Ende”(5)?!?it”可以猜成“mit”(6),我們就可以用m去替換n。中間含有一個e的詞往往是“der”“den”“dem”(7),而首字母為e的三個字母的詞很有可能是“ein”(8)。如果你試著這么做并且把步驟記錄下來,很快就能找到答案。那么我們的下一步,是用d替換e,用m替換n:

Mit OneNote, dem di.it..en Noti...o.. .on Mi.ro.o.t, .ereiten .ie dem

In.orm.tion....o. ... .....e, .t.di.m, .r.eit oder .o... ein Ende.

OneNote er....t I.nen Te.te, .i..der, .ei..n.n..en oder ..nd...ri.t.i..e

Noti.en .n...e.en .nd ..er.i..t.i.. .. or..ni.ieren.

我相信,到了這個時候,解碼剩下的密文對你來說已經絲毫沒有難度了。答案是:

Mit OneNote, dem digitalen Notizblock von Microsoft, bereiten Sie dem Informationschaos aus Schule, Studium, Arbeit oder Hobby ein Ende.

OneNote erlaubt Ihnen Texte, Bilder, Zeichnungen oder handschriftliche Notizen anzulegen und übersichtlich zu organisieren.(9)

1.5 密碼盤(1470年)

由意大利建筑師萊昂·巴蒂斯塔·阿爾伯蒂在15世紀發明的密碼盤,可以算作第一個用來加密和解密的器具。阿爾伯蒂于15世紀公布的第一個密碼盤如圖1.2所示,它由內、外兩個環組成。固定的外環帶有20個按順序排布的大寫拉丁字母以及4個數字(1、2、3、4);可轉動的內環上寫著打亂順序的小寫字母,其中包括幾個在外環中沒有出現的字母。由于外環只有20個字母,不包含H、J、K、U、W、Y,所以它們將由其他現存的字母替代。

圖1.2 阿爾伯蒂盤

用這種盤來加密明文時,小寫字母作為密文字母表,而大寫字母用作控制符,表示這個盤必須根據要求重新設置。習慣上,人們會用小寫字母a去對準給出的各個大寫字母,每次得到一張新的密文字母表。用這種方式,單字母表的替換變成了多字母表的替換,就不能夠再使用頻率分析推導明文,因為每一個密文字母表都需要一個密鑰,這些密鑰必須被記住,也可以用密碼盤的形式保存在身邊。

不得不承認,在今天這個時代,如果手中握有密碼盤并且知道它的操作方式,那么這種用大寫字母來做標記的方法就顯得不那么高明了,只要把內環上打亂順序的字母放到正確的位置上,也就是把字母a對應到各個相應的大寫字母上,問題就迎刃而解。不過,即便密碼盤在本質上是一個非常簡單的加密工具,它在誕生之后也被頻繁地使用了5個世紀之久。

隨著時間的推移,新的密碼盤不斷出現,并且得到了廣泛的應用。比如1861—1865年美國南北戰爭時期,就有使用密碼盤的記錄。

除了圓盤,1850年還出現了滑尺,確切地說,叫圣西爾滑尺,如圖1.3所示。圣西爾是它的誕生地——法國知名軍校。所謂滑尺,就是一條硬板紙帶,上面依次印有26個字母,字母下方有一個寬度相同的開口,通過這個開口可以從左往右拉動紙條。紙條上依次寫有兩遍完整的字母表,字母間隔距離和滑尺上的一樣。如此一來,拉動紙條就可以像使用密碼盤那樣來加密或者解密。因為紙條的長度問題,圣西爾滑尺攜帶起來略顯不便,但是它在讀取的時候要比密碼盤容易很多。

圖1.3 密碼盤的一種常用變體:圣西爾滑尺

1.6 “計算機”一詞的誕生(1613年)

“計算機”這個概念源于拉丁語動詞“computare”,大意為“合計”。隨后產生了英語動詞“tocompute”,從中派生出了“computer”這個詞。如今我們會把這個詞和一臺處理數據的機器聯系在一起。

很少有人知道,在英語中,“computer”在過去是指一種從事輔助工作的職業名稱,即在數學家或者其他機構的委托下從事重復的計算工作。比如在1892年5月2日的《紐約時報》里可以找到這樣一條招聘啟事:誠招一位計算員(computer),須具備代數、幾何、三角函數、天文學知識。

曾有一位擅寫諷刺文章和幽默小說的英國作家理查德·布拉斯維特,在他1613年的手稿《年輕男人的拾遺集》(The Yong Mans Gleanings)中使用了“computer”這個詞,這是人類歷史上的第一次。下面的選段大約是在描述一個精通數學的人:

你是什么(人啊)?你的開端在哪里?你是由什么物質構成的?就是你承諾給自己或者你的子孫后代的時日長度。我了解過所有時代最精通計算的人(computer)和有史以來最好的算術家,他把你的所有日子縮減為一個簡短的數字:人的日子是三個六十和一個十。(10)

1.7 對數表和對數計算尺(1614—1621年)

在我成長的年代里,便攜式計算機已經出現了,但是我仍然記得,我最喜歡的數學老師每次講起計算尺和對數表,都會陷入一種懷舊的情緒中。那個時候的我們并不能理解他,總是嫌他啰唆。但如果你是在1950年前出生的,或許就和這些東西打過交道了。因為在那個時代,計算尺或者計算盤,是數學課上、職業教育中,乃至大學里、工作中必不可少的日常計算工具。

它們的起源要追溯到1614年。這一年,約翰·納皮爾在他名為《奇妙對數規律的說明》(11)的著作中公布了一張自然對數表。約翰·納皮爾出生在富裕的蘇格蘭地主莫契斯東男爵家庭,他對數學抱有極大的熱情,在這項工作上花費了20年的時間。在他的著作里,能找到30頁的說明和90頁由他本人計算的對數表。同時我們還要提到一位瑞士天文學家約斯特·比爾吉,早在1603—1611年間,他就在編制類似的對數表,但是直到1620年才決定用德語把它發表出來。

要能夠有效地應用對數的規律,還需要一個合適的底數。數學教授亨利·布里格斯意識到了這一點,并且向約翰·納皮爾提出了幾點改進建議。他們商定,使1的對數為0,10的對數為1,這樣就得到了以10為底的常用對數。為了向布里格斯致敬,常用對數在1624年被命名為布里格斯對數。

什么是對數表?為什么它有用?

對數表就是以表格的形式展示對數的尾數,一般長達幾頁。尾數就是一個浮點數中冪數之前的數位(比如在1.234 32 × 103中,1.234 32就是尾數)。發明對數的目的,就在于把復雜的計算轉化為簡單的計算,比如把乘法轉化為加法。

許多計算,比如復雜的開方運算,當時必須借助這樣的對數表來完成。在接下來的350年里,直到20世紀70年代,對數表一直在理工科領域以及中小學的數學課堂上發揮著作用。對于測繪工作者、天文學家以及海員來說,對數表也是不可缺少的工具。圖1.4所示為1957年出版的書中的5位對數表。

對數概念為機械對數計算尺的發明奠定了基礎。布里格斯教授的好友,英國神學家兼數學家埃德蒙·甘特,在1620年產生了把對數表放進直尺的刻度里的構想。關于對數,埃德蒙·甘特之前就做過深入的研究,并且自己撰寫了一部關于對數表用于計算正弦和正切的著作《三角學規則》。他發明了第一把對數刻度尺,即甘特刻度尺。

圖1.4 1957年出版的書中的5位對數表

這是一把黃楊木的直尺,大約60厘米長,5厘米寬,正面和反面分別標有對數刻度和十進制刻度。根據甘特的設計,使用刻度尺的同時需要用到一個分規(見圖1.5),這讓使用過程頗為煩瑣費時。

為了免去使用分規的麻煩,一位熱衷數學研究的英國神父威廉·奧特雷德在1632年想出了一個解決辦法——將兩把相同的對數刻度尺并置滑動,這樣就可以順利地進行乘法、除法計算,而不需要使用分規。直到今天,關于對數計算尺發明者的爭論還在繼續,不過大多數專家傾向于奧特雷德才是計算尺的真正發明者這一觀點。

圖1.5 第一把對數計算尺必須配合分規使用

把兩條可滑動刻度尺并置的創造性做法,在接下來的時間里一直被沿用,當然也得到了不斷發展(見圖1.6),復雜的乘除法運算簡化成了加減法運算,并且不用計算,只需測量。

圖1.6 我的舊計算尺

在對數計算尺發明出來之后,對數表仍在繼續使用,用于計算尺的準確度無法滿足的計算。但是第一臺袖珍計算器的引入,突如其來地終結了對數表和計算尺的歷史,這讓飽受折磨的中小學生們感到如釋重負。

1.8 第一臺計算器(1623年)

長久以來,人們都認為是布萊茲·帕斯卡為了幫助身為稅務官員的父親減輕工作負擔,在1640年發明了第一臺帶有齒輪的機械計算器。這臺加法計算器以帕斯卡林之名廣為人知,如圖1.7所示。不過,用它做減法,需要使用補碼,因為那些調節齒輪是不可以回撥的。

圖1.7 布萊茲·帕斯卡發明的帕斯卡林

直到1955年,人們在威廉·契克卡德教授寫給好友開普勒的信中, 發現了關于計算鐘的描述。契克卡德是天文學家、測繪工作者、數學家,在圖賓根大學教授天文學和希伯來語。他在機械方面有著極高的天賦,親手制作了自己的大部分儀器。他于1623年發明的這臺計算鐘能完成加法和減法計算,并且在計算結果溢出的時候會敲響鈴聲以示提醒。對于更復雜的乘除法計算,則必須借助納皮爾計算籌。

契克卡德自己保留了一臺這樣的機器,并把另一臺寄給了他的好友,著名的天文學家約翰內斯·開普勒。遺憾的是,這種機器沒有樣品流傳于世。1960年,圖賓根大學的哲學教授布魯諾·馮·弗雷塔格-洛林霍夫制造出了一臺計算鐘的復制模型(見圖1.8)。

第一臺可以用來完成四種基本運算且不需要借助其他輔助工具的計算器,是在1671年由戈特弗里德·威廉·萊布尼茨發明的。它被稱為四則運算階梯軸計算器(見圖1.9)。

圖1.8 契克卡德計算鐘看起來是這個樣子的

圖1.9 一臺仿制的萊布尼茨四則運算階梯軸計算器

1.9 二進制系統(1703年)

戈特弗里德·威廉·萊布尼茨在制造他的機械計算器的時候,設定的是十進制系統。由于當時的機械構造十分容易出現錯誤,他便開始致力于研究另一種數字系統——二進制系統,因為它明顯大幅削減了用于表達的數字個數。這種以2為基數的二進制系統,只使用0和1兩個數字,使計算器能夠在求取答案的機械操作中減少切換開關的次數。

只需要兩種狀態,分別用0和1來實現,就可以表示“來”或“去”或者說計算機里的“開”或“關”等狀態。圖1.10 展示了開關位置與它所表示的二進制和十進制值。

圖1.10 二進制值0—15

或許出于精密機械方面的技術欠缺,萊布尼茨最終在他的計算器里使用了十進制系統。盡管如此,他在1703年發表的關于二進制及十進制的文章《二進制算法說明》,為300年后建立以二進制為基礎的計算機世界奠定了堅實的基礎。

萊布尼茨雖然不是二進制的發明者,但是他研究出了利用這個系統進行加減乘除計算的規律。這個系統的發明者則被認為是西班牙神職人員胡安·卡拉木埃爾-洛布科維奇,他在1670年出版的著作《雙頭數學,舊與新》中把二進制系統介紹給了整個歐洲。

不過,有新發現表明,二進制系統或許最初在1050年起源于中國。

1.10 第一個即時通信手段——可視化遠距離通信(1791年)

用WhatsApp等即時通信軟件來交換信息,已經是我們生活中司空見慣的交流方式了。發一條消息給地球另一端的愛人,都用不了一秒鐘的時間。人類克服空間距離交流溝通障礙的歷史,可以追溯到公元前500年:古希臘人用依次點燃山頂柴堆的方法傳遞特洛伊被攻克的消息。這條火焰信號鏈從特洛伊綿延到邁錫尼,長達500千米!另一個例子是在公元前200年到公元前120年之間,傳遞信息的工具變成了火炬,即用不同數量的火炬來挨個傳遞字母。火作為視覺上的信息交流手段,尤其是在戰爭中,被使用了相當長的時間,一直持續到18世紀晚期。

1608年,望遠鏡的問世使得人們能夠用肉眼辨認遠距離的事物。倫敦的羅伯特·胡克在1684年嘗試把字母寫在一塊板上,借助繩索滑動裝置把它架設在桅桿上,遠處的接收人就可以用望遠鏡辨認傳遞的信息。當然這種形式的可視化遠距離通信手段并沒有得到廣泛應用。

圖1.11 模擬夏普信號塔的使用方法

圖1.12 用夏普信號塔來表示“computer”這個單詞

直到1791年,法國神職人員兼工程師克勞德·夏普與他的兄弟們合作發明了被稱為“速寫器”的裝置[后來更名為Telegraf,即Telegram(電報)一詞的前身],并在法國國民議會上將它公之于眾。他把可旋轉的信號臂架設在一根5米高的桅桿上,信號臂兩端各安裝有一根可轉動的橫木,承載裝置的高塔設置在間隔9—12千米的視線良好的高崗上。不過這顯然意味著,可視化遠距離通信非常依賴好的天氣和光照條件。1794年,在巴黎和里爾之間開辟了第一條傳遞線路,270千米的距離中共設置了22個信號站,一條信息可以在2分鐘內完成兩地之間的傳遞。

信息臂和兩端橫木的不同位置,代表了不同的字符。根據橫木的位置變化可以區別出196個符號。也就是說,夏普相當于發明了一張自己的字符表。

人們除了用它來傳送明文信息,也可以借助密碼手冊傳送加密信息。信號發送人將手冊中相應的頁面和行列信息傳遞出去,只有手握相同手冊的人才能夠解讀信息。

1.11 穿孔卡片系統(1805年)

穿孔卡片系統長久以來被用作數據采集、儲存和交付的信息載體,是數據處理技術發展的重要組成部分。直到引入磁性介質存儲手段,比如磁帶或者磁盤,作為存儲工具的穿孔卡片才被徹底取代。

歷史上對穿孔卡片的首次應用是在1805年:法國發明家約瑟夫·瑪麗·雅卡爾用一臺可用穿孔卡片預先設定織紋的織布機(雅卡爾織布機,見圖1.13)宣布了一次工業技術革命的到來。他把織布機的凸輪輥筒替換成了穿孔卡片,這樣就可以織造出任意長度、任意復雜程度的圖案。穿孔卡片上儲存了待織圖案的信息,也就是說,孔洞的有無決定了經線的抬起和降落。在這個意義上,織布機就成了第一架“可編程”的機器,并且它的控制裝置是可以更新的,只需更換一張帶有新圖案的穿孔卡片就可以了。

他的系統促成了很多新的變革。這個發明無疑是自動化進程中的一塊里程碑。而雅卡爾在當時也受到了來自行會的強烈抵制,因為他們感受到了手工行業因進步的自動化技術而帶來的巨大威脅。看來在某種程度上,如今工業4.0的歷史進程,也在部分重復著過去的道路。盡管遇到極大的阻力,7年之后,法國全境雅卡爾織布機的數量還是達到了大約18000臺。

圖1.13 雅卡爾織布機是第一架“可編程”的機器

1.12 差分機——機械計算機(1837年)

早在17、18世紀,就已經存在類似帕斯卡林、契克卡德計算鐘這樣的機械裝置,這些機器往往是單件,并且只能完成加法計算或者最多是四則運算。要計算復雜的函數,人們仍舊依賴各種數據表(比如對數表)。由于這些數據表都是手工編制的,差錯在所難免。而這些差錯導致的運算錯誤,在制圖設計、利息計算、船舶導航方面就可能導致嚴重后果。

英國人查爾斯·巴貝奇意識到了這些數據表中的錯誤可能帶來的嚴重問題,意圖發明一種機器,可以精確無誤地計算出這些數據表中的數據,即所謂的差分機。它包含一個加法器和一個打印部件,可以同時完成數據表的計算和打印。這樣的構想,一位名叫約翰·赫爾弗里奇·米勒的黑森州官員,同時也是建筑師與計算機的先驅,早在1784年就提出過。不過巴貝奇制造出了第一臺機器實物(缺少打印部件,見圖1.14)作為用于展示的原型機。但后續的機器只是停留在了草案設計階段,巴貝奇始終沒有成功制造出一臺完整的差分機。他的失敗,一部分緣于政府資助的中斷,一部分則緣于他的首席機械師??傊@個項目在1842年終止了。

但巴貝奇的努力并沒有完全白費,瑞典工程師愛德華·舒茨在英國雜志上讀到關于巴貝奇研究的文章,受到啟發,于1843年成功制造出了一臺帶有打印部件的差分機。在政府的支持下,愛德華·舒茨和他的父親喬治·舒茨在之后又制造了一臺經過改進的差分機,于1855年送往巴黎展出。此后,差分機經歷了一系列的演進,直到1950年在亞歷山大·約翰·湯普森那里發展到了最后一個階段。他把四個差分機固定在一個木架上,讓它們互相連接,成為一臺全新的機器,用于計算自己的20位對數表。

圖1.14 巴貝奇的差分機(復制品)

隨著時間的推移,各種各樣的差分機紛紛問世,但它們的基本原理并沒有改變。在計算過程中,不同的差分機只是在加法器的個數和所處理的十進制數字的位數上有所區別。

用差分機進行對數、三角函數以及其他函數的計算,只能得到近似的答案,所以計算過程與多項式求值非常相似,其結果也會包含誤差。因為誤差必須維持在一個預先設定的范圍內,所以差分機不適合業余者使用,操作它們必須具有深厚的數學知識。

第一批計算機出現之后,差分機(包括對數表)就失去了它們的價值。

1.13 信息2.0——電報(1832—1837年)

電報的發展歷史并不是單線的,在歐洲、美國和印度,諸多走在時代前列的發明家獨立地研究著各種用電來傳送信息的方式。可以說,各個大陸都有自己的電報發明史。

西班牙醫生和發明家弗朗西斯科·薩爾瓦-卡皮諾便是諸多先驅中的一位。1795年,他第一次向巴塞羅那科學院介紹了自己關于電報的嘗試。1804年,他制造了一臺電解質電報機。這臺機器上連接有26根尾端有小玻璃管的導線,通過電流對管中的液體做電分解來傳遞信號。

德國解剖學家、人類學家、古生物學家、發明家塞繆爾·馮·索默林在1809年制造了相似的儀器——一臺電化學電報機。它通過氣體釋放(制造氣泡)來顯示25個字母和10個數字。簡單來說,就是在發送方和接收方各設置35個接觸點,然后通過閉合發送器的電流回路對水進行電解,接收方相應的接觸點處就會產生氣泡(見圖1.15)。不過這臺儀器從來沒有在實際中應用過。

圖1.15 索默林的電報機

1832年,威廉·愛德華·韋伯和卡爾·弗里德里希·高斯在哥廷根合作設計了一臺電磁電報機。他們在城市上空架設了兩根銅線,把一條電報從物理研究所傳送到了天文臺。據說,這第一條電報的成功傳送被稱作“米歇爾曼來了”(米歇爾曼是研究所的勤雜工)。

1837年,查理·惠斯頓和威廉·佛勒吉·庫克發明出了針式電報機。保爾·路德維西·席林·馮·康斯塔特和格奧爾格·威廉·蒙克雖然在兩年前完成了相關的前期工作,但并沒有使自己的電報機在實際生活中發揮作用。惠斯頓和庫克建造了第一條信號線路,用于倫敦與西德雷頓之間長達21千米的大西部鐵路線的通信。

那個年代,所有的電報機都有一個共同的缺點:傳輸都不是以書面形式實現的。與哥廷根的韋伯和高斯有往來的卡爾·奧古斯特·馮·斯坦海爾發明了一臺印字電報機。1837年,他在慕尼黑鋪設了一條5千米的線路,成功地演示了這臺儀器的運作過程。但這臺電報機最終并沒有投入實際應用。一年之后,斯坦海爾又開始嘗試把鐵路軌道用作電報線路的輸出導線和回路。雖然這次嘗試并沒有成功,但他從實踐中獲得了相當重要的知識,即大地可充當電報線路的回路。這樣就可以將鋪設電報線路所需要的物質耗費縮減一半,為全球范圍內引入電報機進一步鋪平道路。

最終,塞繆爾·摩爾斯在全球電信通信領域掀起了一場變革。他在1837年提出了電磁記錄電報機的構想。當時使用的電碼仍舊包含10個十進制數字,然后借助表格轉化為字母。更確切地說,十進制數字被表示為紙張上的鋸齒狀波紋,這些鋸齒表示不同的數字,可以憑借一本電碼詞典“翻譯”成字母。

摩爾斯及其助手不斷改進著電報機,終于發明了一種以摩爾斯的名字命名的電碼——摩爾斯電碼。人們傳送的不再是神秘的數字代碼,而是三個信號組成的數據:短、長和停頓。1844年,巴爾的摩和華盛頓之間建造起了一條60千米長的線路;1850年,開始鋪設第一批海上線路;到了1870年,世界上很大一部分地區已經通過電纜連接了起來。

動手試一試

最為人熟知的一條摩爾斯電碼就是呼救信號SOS,三短三長三短,或者讀出來:滴滴滴,噠——噠——噠——,滴滴滴。摩爾斯電碼是通過電磁脈沖傳遞的,脈沖的長短有所區別。長脈沖由橫杠表示,短脈沖由點表示。每兩次脈沖之間有一個特定長度的停頓。一個點的長度是一個時間單位,一條橫杠的長度則是三個時間單位,兩個符號之間的停頓也是三個時間單位。這個固定的時間單位是預先設定的。摩爾斯電碼在今天仍舊發揮著作用,比如在名為“你好,摩爾斯”的項目中,它被用來幫助嚴重殘障人士實現無障礙的聯絡交流。

在圖1.16的幫助下,你一定可以譯出以下這條摩爾斯電碼。這里的“/”只是用來斷開單詞,不屬于電碼部分。

–?– ???–? / ?–?? ––?? –? / –?– ? ??–?? / –????–????– –– ?–?

圖1.16 摩爾斯電碼表示的字母和數字

1.14 分析引擎和第一個計算機程序(1833年)

通過前文,你已經認識了查爾斯·巴貝奇,即差分機的精神之父。其實他從1833年起就開始了另一種機器——分析機(分析引擎)的研究,由此奠定了他計算機先驅的聲名。這種機器與現代的計算機已經有了不少相似之處:加減乘除運算可以在任意順序中執行;存儲裝置(被巴貝奇稱作倉庫“store”)和運算裝置(被巴貝奇稱作工廠“mill”)是兩個獨立的組成部分,類似于現代計算機的內存和處理器。

這臺機器可以借助穿孔卡片來編程,就像法國發明家約瑟夫·瑪麗·雅卡爾用穿孔卡片控制織布機一樣。巴貝奇在他的構想中也考慮到了條件分支,這樣根據一次計算中間結果的不同就會走出不同的路徑。它的存儲裝置可以儲存100—1000個50位的十進制數,相當于今天的1.6—20千字節。

這臺機器由蒸汽機驅動,含有55000個部件。所有部件裝配完成的話,應為19米長、3米高。從我的表達上你或許已經意識到了這種機器從來沒有被真正制造出來,盡管巴貝奇從1834年到他去世的1871年間不斷改進著他的設計構想。也就是說,由于在研發差分機上的失利,巴貝奇沒有執著于把這個構想轉化為實物。但后世的研究表明,分析引擎的構想是成立的。而與其原理類似的計算機則要到100年之后才被發明出來。

圖1.17 分析引擎的模擬程序

第一位程序員

與巴貝奇的分析引擎緊密相關的,有一位名為阿達·洛芙萊斯的女性,原名奧古斯塔·阿達·拜倫,她便是世界上第一位程序員。少年時期的阿達就對機械懷有極大的熱情。17歲的時候,她在一次聚會上結識了當時還在研究差分機的巴貝奇,由此開始了與他多年的密切交流。在巴貝奇的建議下,阿達把關于其分析引擎的法語文章翻譯成了英語,并且在文中添加了許多細節性批注。她同時也意識到,這種機器在制作數據表之外還可以用來解決很多其他問題。在她補充的注解中,最著名的一條被稱為注解G。在這條注解中,她用圖表方式描述了計算伯努利數的運算步驟(見圖1.18)。這可以被看成使用形式語言進行程序編寫,由此賦予了她“歷史上第一位程序員”的稱號。

然而某些計算機學家和歷史學家認為,她不能算作世界上首位程序員,因為她的所謂程序其實并不包含編程的重要元素,比如分支和子函數。而在巴貝奇的個人記錄中,已經找到了最早的關于機器程序的筆記。1979年,美國國防部用Ada這個名字命名了一種新的編程語言。

圖1.18 阿達·洛芙萊斯編制的用來計算伯努利數的表格

1.15 第一臺傳真機(1843年)

1979年德國聯邦郵政引入傳真服務的時候,我剛好5歲。但誰要是認為傳真機是20世紀的技術,那他就大錯特錯了。傳真技術甚至在摩爾斯電碼之前就問世了!1843年,蘇格蘭鐘表匠亞歷山大·貝恩為他的復寫電報機申報了專利。借助這個儀器,圖紙或者手稿就可以通過電流以黑白的形式傳送。我們可以這樣說,他發明了世界上第一臺傳真機。幾年之后,1847年,弗雷德里克·科利爾·貝克維爾改進了這臺儀器,他把有待傳送的畫面繃緊在旋轉的滾筒上,由一根金屬針逐塊掃描;這根金屬針與一個電探測頭相觸,就把相應的雙向脈沖發送到了接收器;接收器也通過相似的方式完成記錄過程。

1865年首次出現了商用傳真服務,實現了巴黎與里昂之間的遠程復印,即傳真(見圖1.19)。不過這里使用的傳真電報機,是意大利物理學家喬瓦尼·卡塞利的專利。他的機器建立在電化學過程的基礎上,圖像信息是一行一行通過電報線路傳送的。

后續的一個重要貢獻是德國物理學家亞瑟·科爾在1902年發明的圖像電報,借助這個機器就可以通過電話線傳送圖像。這種形式的傳送自1908年起被警察局用于發布通緝照片,后來廣泛應用于報紙編輯。

圖1.19 第一臺商用傳真電報機(pantelegraph)

1.16 布爾代數(1854年)

布爾運算符“AND”“OR”“NOT”,是如今計算機編程和數據庫查詢中不可缺少的運算符號。少了它們,人們甚至無法用谷歌完成一次簡單的檢索。可以說,布爾運算符或者說整個布爾算法為計算機奠定了基礎。簡單來說,布爾邏輯就是把數學語言的結構轉化成自然語言。當然,也可能需要把一些簡單的命題組合起來。許多程序語言在今天仍然使用一種布爾值的數據類型,它經常被直接稱為布爾(Bool)類型,可以賦予真值(true)或者假值(false)。在二進制運算系統中也會使用布爾邏輯。

在信息學的理論基礎上,我們可以憑借布爾代數來檢驗陳述的邏輯、計算開關電路,以及更好地理解集合論。

英國數學家喬治·布爾被稱作布爾代數之父,他在1847年發表了邏輯學著作《邏輯的數學分析》,后又在1854年發表了他最重要的著作《思維規律研究》。他的個人經歷說來也尤其令人印象深刻,因為他完成小學學業之后就再沒有接受過其他教育。他的父親是鞋匠,母親則是一名管家。他的父親十分愛好數學,經常給兒子布爾上課。布爾對語言也特別感興趣,自學了希臘語、法語、德語。他14歲的時候翻譯了古希臘詩人麥萊阿格羅斯的一首作品,卻被指責為剽竊,因為沒有人相信,一個14歲的孩子有能力完成這樣深刻透徹的翻譯。在他的父親停止經營自己的作坊之后,布爾不得不為全家人的生計而奔忙,16歲便開始擔任一份助理教師的工作。19歲時,他開設了自己的學校,并且在圖書館鉆研各種偉大數學家的著作。憑借在數學研究上取得的成果,從來沒有讀過大學的他在1848年被任命為數學教授。遺憾的是,布爾在49歲時因為感冒高燒而英年早逝。

布爾所做的研究當然后繼有人,英國和德國邏輯學家們不斷改進發展著他的理論。不過這些研究在前期一直處于默默無聞的狀態,直到1936年,就讀于麻省理工學院電氣工程專業的克勞德·香農,未來的美國數學家和電氣工程學家,才在他的碩士畢業論文《對繼電器和開關電路中的符號分析》(A Symbolic Analysis of Relay and Switching Circuits)中,把布爾代數用于數字電路的設計。

這項研究是對布爾代數發展的重大突破。

1.17 第一封垃圾電子郵件(1864年)

在日常生活中,我們每天都暴露在大量不受歡迎的垃圾郵件中。好在這些郵件大多會被過濾至垃圾郵件存放處。想象一下,如果垃圾郵件產生于19世紀,你會不會感到十分驚訝?第一封為人所知的垃圾郵件是在1864年通過電報發送的。一個信使向英國政客們送交了一份電報。政客們拿到這條可能有關國家大事的消息,或許還抱著十分慎重的態度開始閱讀,結果卻發現這只是加布里埃爾先生牙醫診所發來的關于接待時間的通知:

加布里埃爾先生,牙科醫生,卡文迪什廣場哈雷街27號。10月之前,加布里埃爾先生在哈雷街27號的專業問診時間為10點到17點。

其中一位收信人對這條不受歡迎的廣告消息感到十分憤怒,甚至還給《泰晤士報》的編輯寫了一封投訴信,并被刊登了出來。

1.18 第一次用穿孔卡片進行人口普查(1890年)

我在1.11節已經提到了1805年發明的穿孔卡片,法國發明家約瑟夫·瑪麗·雅卡爾用它驅動一臺可編程的織布機。不過,這個設計原理真正進入實際應用的正軌,應該從美國企業家工程師赫爾曼·霍爾瑞斯把它用于數據處理算起,所以他被認為是電子數據處理的先行者。

當時霍爾瑞斯在美國國家專利局和統計局工作。1880年,美國開展了一次人口普查,每個美國公民的全部特征信息都要記錄在數據表上。這次人口普查進行了7年,工作人員才完成所有的數據匯總。霍爾瑞斯在與一位統計死亡率的官員交談之后受到了啟發,發明了一臺能把匯總過程自動化,從而簡化人工操作的機器。此處他用到的便是穿孔卡片系統。他還從列車員身上找到了靈感,他們在車票的不同位置打孔,以這種形式記下旅客的性別、膚色等特征,用來防止不合規定使用車票的現象。

圖1.20 霍爾瑞斯的穿孔卡片

和織布機的穿孔卡片系統不同,霍爾瑞斯的卡片并不用來控制整個系統,而是用來記錄信息,讓這些信息通過電子識別被機器獲取。為了實現這個過程,他使用了事先經過標準化的穿孔卡片,用以儲存每個人的不同信息和特征,每個居民備有一張卡片。針對每一個具體的特征,卡片上都存在兩種情況,即設有穿孔(回路閉合)或者沒有穿孔(回路打開)。通過電流脈沖,穿孔卡片連同上面儲存的個人數據就可以被讀取匯總。

1890年,這個系統投入了實際應用(見圖1.21)。美國的居民人數當時為6300萬,雖然比起1880年的人口普查數目大大地增加,但是整個數據評估在當年年底就完成了。1896年,霍爾瑞斯成立了TMC公司生產制表機器,把他的系統租借給其他國家用于人口普查。1911年,霍爾瑞斯以1210萬美元出售了TMC,與另外兩家公司合并成立了計算機制表記錄的CTR公司。1924年,公司改名為國際商業機器公司,簡稱“IBM”。

提到這個名字,你或許就不感到陌生了,IBM是當今在硬件、軟件、信息技術服務業中均處于領先地位的企業,同時也是最大的咨詢公司之一。

圖1.21 赫爾曼·霍爾瑞斯設計的機器

1.19 圖靈機(1936年)

1936年12月12日,英國數學家艾倫·麥席森·圖靈發表了他的論文《論可計算數及其在判定性問題上的應用》。他在文中描述了一種通用的計算機器,只需要三個操作步驟,這臺機器就能掌握所有的基礎運算。它就是人們所說的“圖靈機”,在后世被認為是信息科學中最重要的基石之一。在圖靈的文章發表之后沒過幾年,康拉德·楚澤制造出了第一臺“圖靈完備”的機器——Z3。

判定性問題

有趣的是,圖靈在他的論文中混進了一個德語詞“Entscheidungsproblem”(判定性問題)。這是因為,在第二次世界大戰前關于數學的論文經常是用德語撰寫的。這個概念的源頭要追溯到戈特弗里德·萊布尼茨,早在17世紀他就開始研發能夠計算出數學問題的真值的機器。1928年,大衛·希爾伯特和威廉·阿克曼用“判定性問題”這個詞提出了一個挑戰,簡單來說就是尋求一種算法,能夠對作為輸入的一個邏輯表達式進行判定,并且用“是”或“否”來回答。德語詞“判定性問題”直接出現在了大衛·希爾伯特的論文標題中:《數理邏輯中的判定性問題》《希爾伯特的判定性問題》。

在長達36頁的論文中,圖靈并沒有去描述一臺真正的機器,而是完成了一種理論構建,他沒有制造出任何實物。

他的“機器”擁有一個無限空間的存儲器。他把這個存儲器描述為一條無限長度的帶子,上面可以寫入符號,也可以刪去。這條帶子從右往左無限地移動,帶子上的每一個單獨區域由一個讀寫頭觸發。這個讀寫頭能夠讀取區域中的內容,也可以寫入符號,并且任何時候都可以左右移動。控制讀寫頭的每一個處理指令始終取決于當前所處的一個特定狀態,而處理過程本身則通過一個控制程序來設定,如圖1.22所示。

圖1.22 對單帶圖靈機器的圖解

我不想過多地在理論計算機學里糾纏,只用最簡單的話來解釋一下:人們可以通過這個簡單的理論機器執行任意一種算法。本質上這個機器就是一小組可執行的程序,用于一種輸入轉化成一種輸出。它的運行原則是,讀取一個單獨的符號,給出另一個符號作為回答,正因為如此簡單、如此基礎,它可以應用于任何一種思維過程,并不僅僅限于計算機學。

什么是算法?

一個算法在根本上就是基于一個解題方案對于一個問題所進行的解答,在解題的每一步中,輸入數據都轉化為輸出數據。

以這種方式,就可以給一臺計算機在無限的方程式上編程,前提是能夠發明出一種方法來描述這些方程式。就像康拉德·楚澤說的那樣,人們在一臺計算機上運行一個合適的程序,計算機就成了“用來解決特定問題的大腦”。

主站蜘蛛池模板: 泽普县| 古蔺县| 吉安县| 昭通市| 齐齐哈尔市| 哈密市| 遂溪县| 天台县| 五指山市| 湘阴县| 侯马市| 通州市| 苏州市| 新安县| 盐津县| 高州市| 区。| 报价| 吴堡县| 萨嘎县| 视频| 夏津县| 博白县| 焦作市| 玉田县| 栾川县| 永川市| 海南省| 全椒县| 晴隆县| 百色市| 湘潭市| 北票市| 南江县| 久治县| 山丹县| 阿拉善左旗| 宁化县| 固原市| 上栗县| 黑龙江省|