計(jì)算機(jī)發(fā)展史—從織布機(jī)到IBM!
-
「MoreThanJava」 宣揚(yáng)的是 「學(xué)習(xí),不止 CODE」,本系列 Java 基礎(chǔ)教程是自己在結(jié)合各方面的知識之后,對 Java 基礎(chǔ)的一個(gè)總回顧,旨在 「幫助新朋友快速高質(zhì)量的學(xué)習(xí)」。 -
當(dāng)然 不論新老朋友 我相信您都可以 從中獲益。如果覺得 「不錯」 的朋友,歡迎 「關(guān)注 + 留言 + 分享」,文末有完整的獲取鏈接,您的支持是我前進(jìn)的最大的動力!
一、織布機(jī) | 一切的開端
如今代表智能現(xiàn)代的計(jì)算機(jī)與老式織布機(jī)的血緣關(guān)系超乎你的想象。無論是擺在寫字臺上的 臺式機(jī)、塞在口袋里的 掌上電腦、掛在腰上的 移動電話、乃至你家中的很多 家用電器,其實(shí)都是 1804
年誕生的 一臺織布機(jī)的后代——雅卡爾傳空紙帶提花機(jī)。
-
圖片源自:http://blog.sciencenet.cn/blog-528739-903746.html
織物與織布機(jī)
常見的織物
常見的織物有 「機(jī)織物」 和 「針織物」 兩種。
我們平時(shí)最為熟悉的 「針織物」 借助的工具是 “針”,利用織針按照一定方向彎曲成線圈形態(tài),然后再將線圈相互串套而形成的織物,可以橫向或者縱向地進(jìn)行,橫向編織稱為緯編織物,而縱向編織稱為經(jīng)編織物。
而 「機(jī)織物」 由兩條或兩組以上的相互垂直的兩個(gè)系統(tǒng)紗線或者絲線,在 織機(jī) 上按照一定規(guī)律相互交織而形成的織物叫機(jī)織物,縱向的紗線 叫 經(jīng)紗,橫向的紗線 叫 緯紗,基本組織有平紋、斜紋和緞紋。
織機(jī)是如何工作和迭代的
在織機(jī)上,經(jīng)紗在經(jīng)軸上逐根排列,根據(jù)織物紋樣的要求,部分經(jīng)紗被抬起,另一部分經(jīng)紗則保持不動 形成織口,緯紗從織口中引入,經(jīng)紗抬起的規(guī)律不同以及紗線顏色的排列變化,就會給織物帶來不同的紋樣:
可是,經(jīng)紗有那么多,是如何挑選出引入沒根緯紗時(shí)要提起哪些經(jīng)紗的呢?
最原始的織機(jī)是手動完成的:
-
圖片引用自:https://www.sohu.com/a/301616592_99894978
而到了戰(zhàn)國時(shí)期的 多綜式提花織機(jī),則發(fā)明了 綜框 來完成這項(xiàng)工作,棕框的上下梁間有垂直排列的綜絲,經(jīng)紗穿入綜絲中,織物紋樣的變化有一個(gè)規(guī)律,也就意味著經(jīng)紗是隨著緯紗的引入被 有規(guī)律的循環(huán)提起,將 提起規(guī)律相同的經(jīng)紗 穿入 同一個(gè)綜框的綜絲 中,當(dāng)綜框被提升時(shí),穿入的所有經(jīng)紗都會被同時(shí)提起,每一個(gè)綜框都有一個(gè)腳踏板,踩下腳踏板則可通過機(jī)械裝置控制其抬升:
不過采用綜框也有一個(gè)明顯的限制,那就是 無法織出比較復(fù)雜的紋樣,因?yàn)榧y樣復(fù)雜則代表著需要更多的經(jīng)緯紗以及經(jīng)紗提升的規(guī)律更復(fù)雜,意味著可能引入成百上千次緯紗才能完成一個(gè)循環(huán)。
如果仍然采用綜框控制紗線提升,則可能需要成百上千個(gè)綜框,這在機(jī)械上實(shí)現(xiàn)是非常困難的,因此便有了 束綜提花織機(jī)。
束綜提花織機(jī)沒有綜框,而是被 設(shè)計(jì)成兩層,每一根經(jīng)紗會穿入綜絲中實(shí)現(xiàn) 單獨(dú)的控制,上層 的人將需要提起的經(jīng)紗提起,而 下層 的人則再經(jīng)紗提起后通過梭子將緯紗送入織口,并用打緯裝置將引入的緯紗打牢。
然而通常來說,這類織機(jī)上會有成千上萬根緯紗,紋樣復(fù)雜,于是聰明的老祖宗們發(fā)明了 花本:
簡單來說,花本存儲了紋樣信息。圖中花本的豎線連接穿入了經(jīng)紗的綜絲,橫線存儲了每一次引入緯紗時(shí)提花信息,當(dāng)豎線越過橫線覆蓋在橫線前方時(shí),表明對應(yīng)的經(jīng)紗要被提起。
“如果還是沒有理解到這個(gè)過程的話,這里有一個(gè)比較硬核的視頻,教你如何手工來制作一個(gè)簡易織布機(jī):戳這里
"識字"的機(jī)器 | 雅卡爾織機(jī)的誕生
上面說到的束綜提花織機(jī)雖然是一大進(jìn)步,但可想而知的是,它仍然效率緩慢并且織布工人的勞動量非常大,也非常辛苦。雖然聰明的祖先們進(jìn)行了很多機(jī)械化的嘗試,但仍然沒有取得跨越式的發(fā)展。
時(shí)間來到 18
世紀(jì)的歐洲。歐洲游歷和學(xué)徒的傳統(tǒng),造就了許多城市獨(dú)特的支柱產(chǎn)業(yè),例如威尼斯的玻璃業(yè)和法國里昂的 絲織業(yè)。1725
年,里昂的織匠 布喬 (B.Bouchon) 做出了開拓性的發(fā)明:他用 打孔紙帶 控制經(jīng)線的提起和放下,從而讓織出花樣成為了一種半自動的工作。
做為一個(gè)樂器工人的兒子,布喬把家學(xué)和自己的工作結(jié)合得很好。然而,柔軟的打孔紙帶不能織出太寬的織物,這是它的致命傷之一;而紙帶依然需要有人照看,每穿過一次緯線,紙帶就需要向下移動一格。布喬提花機(jī)的最大貢獻(xiàn),在于實(shí)現(xiàn)了花紋的二進(jìn)制存儲——以機(jī)器能夠識別的方式。歷史上第一次,機(jī)器能夠讀出存儲介質(zhì)中的內(nèi)容,并且照其行事。
在布喬提出構(gòu)想 65
后的 1790
年,約瑟夫·瑪麗·雅卡爾 根據(jù)前人的成果設(shè)計(jì)了新式織機(jī),不過正在此時(shí),轟轟烈烈的法國大革命爆發(fā)了,雅卡爾也停下了手中的工作,投入到了家鄉(xiāng)里昂的里昂保衛(wèi)戰(zhàn)中,這一拖就拖到了 1805
年,雅卡爾終于組裝完成了首臺 自動提花織機(jī):
雅卡爾將 穿孔紙帶 改進(jìn)為 穿孔卡片,根據(jù)紋樣圖案在卡片上打孔,通過孔的有無 帶動一系列機(jī)械運(yùn)動裝置來 控制經(jīng)紗的提升,一張卡片對應(yīng)循環(huán)內(nèi)一次引緯時(shí)經(jīng)紗提升的信息,引緯完成后,可通過腳踏板控制卡孔卡片轉(zhuǎn)動,下一張卡片翻轉(zhuǎn)至工作位置以控制新一次引緯的提花:
(這里本來有一張動圖.. 但死活上傳不上來...)
雅卡爾織機(jī)大幅度節(jié)省了時(shí)間和工作量 (全自動且效率是之前的二十五倍),而且只需一位工人,很快就被廣泛使用在工廠生產(chǎn)中,雅卡爾也榮獲了拿破侖授予的榮譽(yù)勛章。然而,迎接這位發(fā)明家的,卻是失業(yè)的紡織工人迎面扔來的石頭。最終導(dǎo)致雅卡爾客死異鄉(xiāng)。
“雅卡爾 = 賈卡。筆者在寫文的時(shí)候,發(fā)現(xiàn)不同的資料文獻(xiàn)中對于該織機(jī)作者的翻譯會有偏差,有的叫 雅卡爾織機(jī),有的叫 賈卡織機(jī),但都是同一個(gè)人啦..
二、差分機(jī) | 程序設(shè)計(jì)思想開始萌芽
穿孔卡片控制織物紋樣的設(shè)計(jì)成為了程序設(shè)計(jì)思想的萌芽,為信息技術(shù)的發(fā)展開展了一條新的道路。
時(shí)間來到 19
世紀(jì)初,法國人 巴貝奇 (Chanles Badbbage) 在賈卡織機(jī)的啟發(fā)下,設(shè)計(jì)并制造了 差分機(jī)。
故事背景
“以下內(nèi)容大部分摘錄自下方引用資料:現(xiàn)代計(jì)算機(jī)真正的鼻祖——超越時(shí)代的偉大思想
18
世紀(jì)末,法國政府在開創(chuàng)米制之后,決定在數(shù)學(xué)中統(tǒng)一采用十進(jìn)制,竟奇葩地想把原本 90
度的直角劃分成 100
度、把原本 60
秒的 1
分鐘劃分成 100
秒,盡管從現(xiàn)在看來這樣的想法絕逼是一種倒退,但他們在當(dāng)時(shí)真就實(shí)施了。這一改制帶來的不光是人們在使用時(shí)直觀上的別扭,原本制作好的數(shù)學(xué)用表 (如三角函數(shù)表) 都需要全部重制。
法國政府將這項(xiàng)喪心病狂的工程交給了 數(shù)學(xué)家普羅尼 (Gaspard de Prony),普羅尼正頭疼著要如何才能完成這項(xiàng)艱巨的任務(wù),突然想起著名經(jīng)濟(jì)學(xué)家 亞當(dāng)·斯密 (Adam Smith) 的那本《富國論》,他決定采用書中提出的 勞動分工 的做法,將制表的工作人員分成三組:
-
第一組 由五六名牛逼的數(shù)學(xué)家組成,他們負(fù)責(zé)制定運(yùn)算中所需的公式; -
第二組 由九到十個(gè)擅長數(shù)學(xué)的人組成,他們負(fù)責(zé)計(jì)算出一些關(guān)鍵數(shù)據(jù),并把第一組制定好的公式進(jìn)行簡化; -
第三組 由約一百名計(jì)算人員組成,他們利用第二組提供的關(guān)鍵數(shù)據(jù)和公式,做最簡單的加減操作就能得出最終結(jié)果。
第三組的工作簡單到什么程度,就是他們甚至都不知道自己正在算什么玩意兒,事實(shí)上他們的文化程度大部分都不高,里頭好多都是理發(fā)師、失業(yè)人員什么的。可見即便文盲都能完成的計(jì)算,在那個(gè)時(shí)代還是得依靠人力去做。
而為了保證用表的正確性,普羅尼要求 每個(gè)數(shù)至少算兩遍,并且 要在法國的不同地點(diǎn)用不同的方法計(jì)算。這項(xiàng)勞民傷財(cái)?shù)墓こ陶M(jìn)行了十年才完成,然而不幸的是,最終的表里仍然有錯。說到這一點(diǎn),可以說,那個(gè)時(shí)代基本沒有一版數(shù)學(xué)用表是完全正確的,有些版本甚至錯誤百出,要知道數(shù)學(xué)用表出錯有時(shí)后果會很嚴(yán)重,比如航海表一出錯就可能直接導(dǎo)致船毀人亡。
巴貝奇 在了解到普羅尼的事跡后淚流滿面,決心要做一套完全正確的數(shù)學(xué)用表,為達(dá)目的,他嘗試了各種減少錯誤的手段,比如調(diào)整紙張和墨水的顏色以提高數(shù)字的識別度,直接拿現(xiàn)有的多個(gè)版本的表進(jìn)行謄抄、比對、讓不同人員反復(fù)校對,在 1827
年出版了一個(gè)版本,結(jié)果里頭還是有錯。只要是人為的就沒有完美的,巴貝奇徹底跪了,他發(fā)誓要造一臺機(jī)器,讓機(jī)器去生產(chǎn)數(shù)學(xué)表。
這就是史上著名的 差分機(jī) 了。
重要的差分思想
其實(shí)早在巴貝奇出生前,有個(gè)叫 米勒 (Johann Helfrich von Müller) 的德國工程師就提出了差分機(jī)的思想,但僅僅是提了一下,并沒有進(jìn)行具體設(shè)計(jì)和制造,他最終還是把研制差分機(jī)的歷史重任讓給了巴貝奇。
之所以叫差分機(jī)這個(gè)名字,是因?yàn)樗?jì)算所使用的是帕斯卡在 1654
年提出的差分思想:n 次多項(xiàng)式的 n 次數(shù)值差分為同一常數(shù)。舉個(gè)簡單例子好了,對于函數(shù) F(x) = 12x + 12,x 取自然數(shù):
對于一次多項(xiàng)式,每個(gè)相鄰的 x 所對應(yīng)的 F(x) 之差都是一個(gè)常數(shù),這個(gè)常數(shù)很明顯就是 x 的系數(shù)。那么二次多項(xiàng)式呢?對于函數(shù) F(x) = 15x2 + 12x + 12,x 取自然數(shù):
對于二次多項(xiàng)式,每個(gè)相鄰的 x 所對應(yīng)的一次差分之差仍然都是一個(gè)常數(shù),我們可以導(dǎo)出這一常數(shù)的通用公式:
在上述例子中,a = 15
,故二次差分常數(shù) 2a
即為 30
。
差分規(guī)律是一項(xiàng)偉大的發(fā)現(xiàn),有了差分,在計(jì)算多項(xiàng)式時(shí)就可以 用加法替代乘法,我們只需要算出幾個(gè)初始值,后面對于任意 x 所對應(yīng)的 F(x) 均可以通過加法得出:
學(xué)過高數(shù)的朋友應(yīng)該知道,一個(gè)函數(shù)在滿足一定條件的情況下可以用多項(xiàng)式逼近 (冪級數(shù)展開),于是常用的三角函數(shù)、對數(shù)函數(shù)都可以通過多項(xiàng)式來計(jì)算的,而機(jī)械時(shí)期的計(jì)算設(shè)備最擅長的就是做加法,有了差分思想,巴貝奇看到差分機(jī)的前途一片光明。
完成一半的差分機(jī)(Difference Engine)
從 1812
年到 1822
年,巴貝奇克服重重困難完成了一臺可以計(jì)算六位數(shù)二次多項(xiàng)式的模型機(jī),他給皇家學(xué)會的主席寫信,希望政府可以出資,贊助他建造真正可用的大型差分機(jī)。政府也覺得這事兒很有意義,尤其對海軍很有價(jià)值,于是在 1823
年撥款 1500
英鎊,巴貝奇如魚得水,號稱只要兩三年時(shí)間就能完工。
誰知實(shí)行起來要比想象中困難得多,那個(gè)時(shí)代的機(jī)械制造水平實(shí)在落后,差分機(jī)是十分精密的儀器,巴貝奇跑遍了歐洲都沒找到多少能用的零件,于是在制造差分機(jī)之前,他還要先想著怎么制造各類零件。
在英國當(dāng)時(shí)一個(gè)牛逼的機(jī)械師 克萊門特 (Joseph Clement) 的幫助下,他們真的在提高機(jī)械制造方面下足了功夫,不但做出了差分機(jī)能用的零件,還培養(yǎng)出大批優(yōu)秀的技師。本來這兩人強(qiáng)強(qiáng)聯(lián)合勢必能把差分機(jī)做好,但是巴貝奇是個(gè)精益求精的人,經(jīng)常改動設(shè)計(jì)方案,導(dǎo)致工程時(shí)常要返工,工作量大大增加,外加親人的相繼去世,后來又和克萊門特鬧掰,到了 1833
年,十年都過去了,巴貝奇只做出了機(jī)器的一小部分,卻已經(jīng)花費(fèi)了 3
萬英鎊 (遠(yuǎn)超最初預(yù)算)。政府對巴貝奇大失所望,終于在 1842
年正式宣布不再出資,到頭來巴貝奇給后世留下的就只有一個(gè)半成品,以及在 1839
年修訂好的一大堆設(shè)計(jì)圖紙,現(xiàn)存于倫敦科學(xué)博物館。
值得一提的是,巴貝奇做不出差分機(jī)實(shí)在不是客觀原因所致,與他同時(shí)代的瑞典人 喬治·舒茨 (Per Georg Scheutz) 就根據(jù)他的設(shè)計(jì)在 1843
年做出了切實(shí)能用的差分機(jī),巴貝奇倒是提供了不少指導(dǎo)和幫助,也算是了卻了自己一樁心愿吧。
150
年后,為了紀(jì)念巴貝奇 200
年誕辰,從 1989
到 1991
年人們根據(jù)巴貝奇的設(shè)計(jì)圖紙建造了第一臺真正的巴貝奇差分機(jī),機(jī)器完美運(yùn)行,工程師們驚奇地發(fā)現(xiàn),巴貝奇的圖紙里只有極少的錯誤,而且這些錯誤八成是當(dāng)時(shí)為防止圖紙被盜用而刻意為之的。這臺差分機(jī)被保護(hù)在倫敦科學(xué)博物館的玻璃柜里,后來又造了一臺,放在美國硅谷的計(jì)算機(jī)歷史博物館,每天由導(dǎo)游給參觀者講解和演示,人們得以近距離膜拜。
差分機(jī)的工作原理簡析
在巴貝奇 1839
年的設(shè)計(jì)中,差分機(jī)可以支持七次多項(xiàng)式的計(jì)算。由于每次參與計(jì)算的都是函數(shù)值和 1~7 次差分值的最新值,于是僅需響應(yīng)的 8
個(gè)計(jì)數(shù)器。巴貝奇設(shè)計(jì)的計(jì)算器由 31
個(gè)計(jì)數(shù)輪垂直疊加而成,即支持 31
位十進(jìn)制數(shù):
加上傳動裝置和進(jìn)位裝置,就成了這樣一幅喪心病狂的樣子:
巴貝奇使用梯形的傳動輪實(shí)現(xiàn)兩個(gè)計(jì)數(shù)輪之間的相加,由于有梯形齒,傳動輪可以同時(shí)帶動兩個(gè)計(jì)數(shù)輪,也可以只帶動一個(gè)。于是在進(jìn)行兩數(shù)相加時(shí),傳動輪先順時(shí)針旋轉(zhuǎn),將右側(cè)計(jì)數(shù)輪上的數(shù)字加到左側(cè)輪上,而后上升一段距離,逆時(shí)針旋轉(zhuǎn)相同度數(shù),將右側(cè)計(jì)數(shù)輪的示數(shù)還原到原來的位置。
仔細(xì)觀察可以發(fā)現(xiàn),這兩個(gè)輪子上的數(shù)字排列順序是相反的。在兩輪相加的過程中,左側(cè)輪作為累加輪朝數(shù)值增大的方向旋轉(zhuǎn),而右側(cè)輪作為加數(shù)輪則朝數(shù)值減少方向旋轉(zhuǎn)。在巴貝奇改進(jìn)的并行差分算法中,兩個(gè)步驟交替進(jìn)行,同一個(gè)計(jì)數(shù)輪需要交替充當(dāng)累加輪和加數(shù)輪的角色,于是當(dāng)機(jī)器運(yùn)行起來,這些齒輪需要正反方向交替旋轉(zhuǎn)。
差分機(jī)的進(jìn)位機(jī)構(gòu)比較復(fù)雜,簡單地說,每個(gè)計(jì)數(shù)輪都有一個(gè)針對高位的 “進(jìn)位提示器”,當(dāng)計(jì)數(shù)輪從 9
轉(zhuǎn)到 0
,其對應(yīng)的 “進(jìn)位提示器” 就被撥到 “需要進(jìn)位” 的狀態(tài),每次計(jì)算,計(jì)數(shù)輪都要轉(zhuǎn)動兩次,第一次是每位數(shù)相加,第二次是按照“進(jìn)位提示器”進(jìn)行進(jìn)位。我們直觀地感受一下連續(xù)進(jìn)位是什么樣子:
最后我們來欣賞一下差分機(jī)整個(gè)運(yùn)行起來的樣子:
還有另外一個(gè)適用樂高還原的硬核版本:
“如果對這一部分感興趣的童鞋請進(jìn)一步閱讀原版文章:現(xiàn)代計(jì)算機(jī)真正的鼻祖——超越時(shí)代的偉大思想
三、分析機(jī) | 第一臺真正意義上的 Computer
盡管沒能親手實(shí)現(xiàn)差分機(jī),但巴貝奇并不會氣餒,或者說他本來就是根本停不下來的那種人。明知實(shí)現(xiàn)不了,巴貝奇仍在一刻不停地改進(jìn)著自己的設(shè)計(jì),直到有一天,他構(gòu)思出了一種空前的機(jī)器——分析機(jī),正式成為現(xiàn)代計(jì)算機(jī)史上的第一位偉大先驅(qū)。(Father of computing)
1834
年,分析機(jī)概念誕生之際,巴貝奇自己都為之感到無比震驚。在此之前,任何一臺計(jì)算機(jī)器都只能完成其被預(yù)定賦予的計(jì)算任務(wù),要么是簡單的加減乘除,要么像差分機(jī)那樣只能做差分運(yùn)算,它們都屬于 calculator
,而分析機(jī)才是真正的 computer
,它不局限于特定功能,而竟然是可編程的,可以用來 計(jì)算任意函數(shù)——現(xiàn)代人無論如何也無法想象在一坨齒輪上寫程序是怎樣一種體驗(yàn)吧!
巴貝奇設(shè)計(jì)的分析機(jī)主要包括三大部分:
-
用于存儲數(shù)據(jù)的計(jì)數(shù)裝置,巴貝奇稱之為 “倉庫”(store),相當(dāng)于現(xiàn)在 CPU 中的存儲器,這部分是從差分機(jī)上的計(jì)數(shù)裝置改進(jìn)而來的,我們很容易想象它的模樣; -
專門負(fù)責(zé)四則運(yùn)算的裝置,巴貝奇稱之為 “工廠”(mill),相當(dāng)于現(xiàn)在 CPU 中的運(yùn)算器,這部分的結(jié)構(gòu)相對復(fù)雜,巴貝奇針對乘除法還做了一些優(yōu)化; -
控制操作順序、選擇所需處理的數(shù)據(jù)和輸出結(jié)果的裝置,巴貝奇沒有起名字,由于其呈桶狀,我們可以叫它 “控制桶”,控制桶顯然相當(dāng)于現(xiàn)在 CPU 中的控制器。
以上三部分,加上巴貝奇并沒有疏漏的輸入輸出設(shè)備,我們驚訝地發(fā)現(xiàn),分析機(jī)的組成部分和現(xiàn)在馮·諾依曼架構(gòu)所要求的五大部件一模一樣!
巴貝奇另一大了不起的創(chuàng)舉就是將 穿孔卡片(punched card) 引入了計(jì)算機(jī)器領(lǐng)域,用于控制數(shù)據(jù)輸入和計(jì)算,從那時(shí)起,到第一臺電子計(jì)算機(jī)誕生為止,期間幾乎所有的數(shù)字計(jì)算機(jī)都使用了穿孔卡片。
巴貝奇在一次巴黎展覽會上看到了賈卡的提花機(jī),對其印象十分深刻,由于一直在研究計(jì)算機(jī)器,自然想到可以把穿孔卡片也應(yīng)用到分析機(jī)上。于是分析機(jī)中的輸入數(shù)據(jù)、存儲地址、運(yùn)算類型都使用穿孔卡片來表示。在機(jī)器運(yùn)行時(shí),卡片上有孔和無孔的地方會導(dǎo)致對應(yīng)的金屬桿執(zhí)行不同操作,可編程性由此體現(xiàn)。下圖可以直觀地展現(xiàn)這一原理:
整個(gè)分析機(jī)就是在類似這樣的齒輪和拉桿作用下實(shí)現(xiàn)可編程運(yùn)算的:先從數(shù)據(jù)卡片讀入數(shù)據(jù)到存儲器,再將存儲器中的數(shù)據(jù)傳輸?shù)竭\(yùn)算器,運(yùn)算器算完后又將數(shù)據(jù)傳回存儲器。
可惜的是,巴貝奇窮其一生也沒能真正把分析機(jī)做出來,留給后世的又是一臺模型機(jī)和兩千多張圖紙,以及這樣一段遺言:
“如果一個(gè)人不因我一生的借鑒而卻步,仍然一往直前制成一臺本身具有全部數(shù)學(xué)分析能力的機(jī)器……那么我愿將我的聲譽(yù)毫不吝嗇地讓給他,因?yàn)橹挥兴軌蛲耆斫馕业姆N種努力以及這些努力所得成果的真正價(jià)值。
可以說,巴貝奇一生的奮斗都是孤獨(dú)的,在那個(gè)年代,人們看不到分析機(jī)的巨大價(jià)值和意義,有了先前差分機(jī)的失敗,政府也不再愿理會分析機(jī)的想法。巴貝奇的思想超前了整整一個(gè)世紀(jì),但慶幸的是在有生之年,依然有著三位難能可貴的支持者:
-
首先是他的兒子 亨利·巴貝奇 (Henry Prevost Babbage),直到巴貝奇過世后,亨利也繼續(xù)著分析機(jī)的建造工作,但終究也力不從心未能完成;
-
而后是后來成為了意大利總理的數(shù)學(xué)家 閔那布利 (Luigi Federico Menabrea),他在巴貝奇
1840
年演講時(shí)詳細(xì)記錄下了分析機(jī)的思想; -
最后就是著名詩人拜倫的女兒,史上大名鼎鼎的 女程序員艾達(dá) (Ada Lovelace),她將閔那布利記錄分析機(jī)的文章翻譯成英文,巴貝奇建議她在翻譯時(shí)增添一些自己的理解,結(jié)果艾達(dá)注解的長度是原文的兩倍,其中針對計(jì)算伯努利數(shù)的算法被視為史上第一個(gè)計(jì)算機(jī)程序,這篇名為《關(guān)于巴貝奇先生發(fā)明的分析機(jī)簡訊》的譯文被視為程序設(shè)計(jì)方面的第一篇著作,而 艾達(dá)本人則成了世界上第一位程序員。
艾達(dá)幾乎是那個(gè)時(shí)候唯一一個(gè)真正理解分析機(jī)的人,她不僅編寫了許多可以在分析機(jī)上運(yùn)行的程序,甚至還看到了巴貝奇自己都沒有看到的事情——她說:分析機(jī)不光能用來計(jì)算,它應(yīng)該還能用來表示其他東西,比如音樂。這是多么遠(yuǎn)大的目光啊!后來美國國防部將一種編程語言命名為 Ada
,就是為了紀(jì)念這位與巴貝奇同樣具有超前思想的偉大女性。
四、制表機(jī) | 穿孔時(shí)代的到來
從 1790
年開始,美國每 10
進(jìn)行一次人口普查。百年間,隨著人口繁衍和移民的增多,從 1790
年的 400
萬不到,到 1880
年的 5000
多萬,人口總數(shù)呈爆炸式地增長。
不像現(xiàn)在這個(gè)的互聯(lián)網(wǎng)時(shí)代,人一出生,各種信息就已經(jīng)電子化、登記好了,甚至還能數(shù)據(jù)挖掘,你無法想象,在那個(gè)計(jì)算設(shè)備簡陋得基本只能靠手搖進(jìn)行四則運(yùn)算的 19
世紀(jì),千萬級的人口統(tǒng)計(jì)就已經(jīng)成了當(dāng)時(shí)政府的 “不能承受之重”。1880
年開始的第 10
次人口普查,歷時(shí) 8
年才最終完成,也就是說,他們在休息兩年之后就要開始第 11
次普查了,而這一次普查,需要的時(shí)間恐怕要超過 10
年,那第 12
次、13
次呢?本來就是 10
年一次的統(tǒng)計(jì),如果每次耗時(shí)都在 10
年以上,這件事情就變得沒有意義了。
這可愁煞了當(dāng)時(shí)的人口調(diào)查辦公室,他們決定面向全社會招標(biāo),尋求能減輕手工勞動、提高統(tǒng)計(jì)效率的發(fā)明。正所謂機(jī)會都是給有準(zhǔn)備的人的,一位畢業(yè)于哥倫比亞大學(xué)的年輕人 赫爾曼·霍爾瑞斯 (Herman Hollerith) 帶著他在 1884
年申請的專利從眾多方案中脫穎而出。
制表機(jī)
他發(fā)明的機(jī)器叫 制表機(jī) (tabulator/tabulating machine),顧名思義,就是專門用來制作數(shù)據(jù)統(tǒng)計(jì)表的機(jī)器。制表機(jī)主要由示數(shù)裝置、穿孔機(jī)、讀卡裝置和分類箱組成。
示數(shù)裝置包含 4
行、10
列共 40
個(gè)示數(shù)表盤,每個(gè)盤面被均勻地分成 100
格,并裝有兩根指針,和鐘表十分相像,“分針” 轉(zhuǎn)一圈可計(jì) 100
,“時(shí)針” 轉(zhuǎn)一圈則計(jì) 10000
??梢姡麄€(gè)示數(shù)裝置可以表達(dá)很龐大的數(shù)據(jù)。
制表機(jī)的工作是圍繞穿孔卡片展開的:操作員先使用穿孔機(jī)制作穿孔卡片,再使用讀卡裝置識別卡片上的信息,機(jī)器自動完成統(tǒng)計(jì)并在示數(shù)表盤上實(shí)時(shí)顯示結(jié)果,最后,將卡片投入分類箱的某一格中,進(jìn)行分類存放,以供下次統(tǒng)計(jì)使用。
穿孔卡片的應(yīng)用
此前的某一天,霍爾瑞斯正在火車站排隊(duì)檢票,目光不經(jīng)意落到檢票員手中咔咔直響的打孔機(jī)上。他發(fā)現(xiàn),檢票員會特意根據(jù)乘客的性別和年齡段,在車票的不同地方打孔。越來越多的人過檢,他進(jìn)一步確認(rèn)了這個(gè)規(guī)律。一個(gè)靈感朝他襲來:如果有一張更大的卡,上面有更多的位置可以打孔,就可以用來表示更多的身份信息,包括國籍、人種、性別、生日等等。
這就是用在 1890
年人口普查中的穿孔卡片,一張卡片記錄一個(gè)居民的信息。卡片設(shè)計(jì)長約 18.73cm
,寬約 8.26cm
,正好是當(dāng)時(shí)一張美元紙幣的尺寸,因?yàn)榛魻柸鹚怪苯佑秘?cái)政部裝錢的盒子來裝卡片。
卡片設(shè)有 300
多個(gè)孔位,與雅卡爾和巴貝奇的做法一樣,靠每個(gè)孔位打孔與否來表示信息。盡管這種形式頗有幾分二進(jìn)制的意味,但當(dāng)時(shí)的設(shè)計(jì)還遠(yuǎn)不夠成熟,并沒有用到二進(jìn)制真正的價(jià)值。舉個(gè)例子,我們現(xiàn)在一般用 1
位數(shù)據(jù)就可以表示性別,比如 1
表示男性,0
表示女性,而霍爾瑞斯在卡片上用了兩個(gè)孔位,表示男性就其中一處打孔,表示女性就在另一處打孔。其實(shí)性別還湊合,表示日期時(shí)浪費(fèi)得就多了,12
個(gè)月需要 12
個(gè)孔位,而常規(guī)的二進(jìn)制編碼只需要 4
位。當(dāng)然,這樣的局限也與制表機(jī)中簡單的電路實(shí)現(xiàn)有關(guān)。
細(xì)心的讀者可能發(fā)現(xiàn)卡片的右下角被切掉了,那不是殘缺,而是為了避免放反而專門設(shè)計(jì)的,和現(xiàn)在的二維碼只有 3
個(gè)角是一個(gè)道理。
這類實(shí)用的細(xì)節(jié)設(shè)計(jì)在穿孔機(jī)上表現(xiàn)得更為出色。下圖為一位操作員正在使用穿孔機(jī)給卡片打孔的情景,她并不需要在卡片上吃力地搜尋孔位,而是直接對著孔距更大的操作面板打孔,一根杠桿將兩者的孔位一一對應(yīng)。操作面板還做成了弧形,頗有一分如今人體工程學(xué)鍵盤的風(fēng)姿。
在制表機(jī)前,穿孔卡片(或紙帶)多用于存儲指令而不是數(shù)據(jù)。比較有代表性的,一是雅卡爾提花機(jī),用穿孔卡片控制經(jīng)線提沉;二是自動鋼琴,用穿孔紙帶控制琴鍵壓放。美劇《西部世界》中,每次故事循環(huán)的開始,都會給一個(gè)自動鋼琴的特寫,彈奏起看似寧靜安逸、實(shí)則詭異違和的背景樂。
是霍爾瑞斯將穿孔卡片作為 數(shù)據(jù)存儲介質(zhì) 開來,并開啟了一個(gè)嶄新的 數(shù)據(jù)處理紀(jì)元。后來人們也把這類卡片稱為霍爾瑞斯卡片,穿孔卡片和穿孔紙帶作為輸入輸出載體,統(tǒng)治了計(jì)算領(lǐng)域整整一個(gè)世紀(jì)。
統(tǒng)計(jì)原理
打好了孔,下一步就是將卡片上的信息統(tǒng)計(jì)起來。讀卡裝置的組成如下圖所示,其外形和使用方式有點(diǎn)類似現(xiàn)在的重型訂書機(jī),將卡片置于壓板和底座之間,按壓手柄,就完成了對這張卡片的信息讀取。
原理上,通過電路通斷識別卡上信息。底座中內(nèi)嵌著諸多管狀容器,位置與卡片孔位一一對應(yīng),容器里盛有水銀,水銀與導(dǎo)線相連。底座上方的壓板中嵌著諸多金屬針,同樣與孔位一一對應(yīng),針的上部抵著彈簧,可以伸縮,壓板的上下面由導(dǎo)電材料制成。這樣,當(dāng)把卡片放在底座上,按下壓板時(shí),卡片有孔的地方,針可以通過,與水銀接觸,電路接通,沒孔的地方,針就被擋住。
這一基本原理與雅卡爾提花機(jī)類似,不難理解。重頭戲是,如何將電路通斷對應(yīng)到所需要的統(tǒng)計(jì)信息呢?霍爾瑞斯在專利中給出了一個(gè)簡單的例子,如下圖所示。這是涉及性別、國籍和人種 3
項(xiàng)信息的統(tǒng)計(jì)電路圖,虛線為控制電路,實(shí)線為工作電路。
圖頂有7根金屬針,從左至右標(biāo)的分別是:G(類似于總開關(guān))、Female(女)、Male(男)、Foreign(外國籍)、Native(本國籍)、Colored(有色人種)、White(白種人)。
工作電路中分散著標(biāo)識為 m1~m10 的電磁繼電器。
圖底從右至左為標(biāo)識為 M1~M6 的 6
組電磁鐵,所對應(yīng)的統(tǒng)計(jì)信息為(為貼合穿孔的形象,我特意選擇使用圓圈進(jìn)行標(biāo)記):
以 M1 為例,如果表示 Native、White 和 Male 的針同時(shí)與水銀接觸,接通的控制電路:
這一示例首先展示了針 G 的作用,它把控著所有控制電路的通斷,目的有二:
-
在卡片上留出一個(gè)專供 G 通過的孔,以防止卡片沒有放正(照樣可以有部分針穿過錯誤的孔)而統(tǒng)計(jì)到錯誤的信息。
-
令 G 比其他針短,或者 G 下的水銀比其他容器里少,從而確保其他針都已經(jīng)接觸到水銀之后,G 才最終將整個(gè)電路接通。眾所周知,電路通斷的瞬間容易產(chǎn)生火花,這樣的設(shè)計(jì)可以將此類元器件的損耗集中在 G 身上,便于后期維護(hù)。
不得不感慨,這些發(fā)明家做設(shè)計(jì)真的特別實(shí)用、細(xì)致。
控制電路的接通引起圖中標(biāo)有橘黃色箭頭的 3
個(gè)電磁繼電器 m1 、 m3 和 m5 閉合,進(jìn)而接通 M1 所在的工作電路:
最終,通電的 M1 將產(chǎn)生磁場,牽引相關(guān)杠桿,撥動齒輪完成計(jì)數(shù),最終體現(xiàn)到示數(shù)表盤上指針的旋轉(zhuǎn)。雖然霍爾瑞斯的專利中沒有給出這一計(jì)數(shù)裝置的具體結(jié)構(gòu),可以想象,從 17
世紀(jì)開始,機(jī)械計(jì)算器中的齒輪傳動技術(shù)已經(jīng)發(fā)展到足夠成熟的水平,霍爾瑞斯無需重新設(shè)計(jì),完全可以使用現(xiàn)成的裝置,正如他在專利中所說的“any suitable mechanical counter”(任何合適的機(jī)械計(jì)數(shù)器都可以)。
電磁鐵不單控制著計(jì)數(shù)裝置,還控制著分類箱蓋子的開合。將分類箱上的電磁鐵接入工作電路,每次完成計(jì)數(shù)的同時(shí),對應(yīng)格子的蓋子會在電磁鐵的作用下自動打開,熟練的操作員甚至不用轉(zhuǎn)頭去看,就可以順手將卡片投到正確的格子里,由此完成卡片的快速分類。
每天工作的最后一步,就是將示數(shù)表盤上的結(jié)果謄抄下來,置零,第二天繼續(xù)。
單元記錄時(shí)代
在制表機(jī)的高效運(yùn)轉(zhuǎn)下,1890
年的人口普查只花了 6
年時(shí)間。1896
年,霍爾瑞斯成立制表機(jī)公司(The Tabulating Machine Company)并不斷改進(jìn)自己的產(chǎn)品,先后與英國、意大利、德國、俄羅斯、澳大利亞、加拿大、法國、挪威、美國波多黎各、古巴、菲律賓等多個(gè)國家和地區(qū)合作開展了人口普查。
到 1914
年,制表機(jī)公司每天生產(chǎn)的穿孔卡片多達(dá) 200
萬張。不多久,一些競爭對手逐漸起家,歷史迎來了繁榮的數(shù)據(jù)處理時(shí)代。它們的產(chǎn)品也不再局限于人口普查,逐漸擴(kuò)展到會計(jì)、庫存管理等一些同樣需要跟大數(shù)據(jù)打交道的領(lǐng)域,這些機(jī)器作為制表機(jī)的后裔被統(tǒng)稱為單元記錄設(shè)備(unit record equipment)。
圍繞穿孔卡片的制卡、讀卡、數(shù)據(jù)處理和卡片分類是它們的標(biāo)準(zhǔn)功能,穿孔機(jī)、讀卡器、分類器是它們的標(biāo)準(zhǔn)配置。這些部件的自動化程度越來越高,比如手動的讀卡裝置很快被自動讀卡機(jī)所取代,讀卡速度從每分鐘 100
張逐步提高至每分鐘 2000
張。隨著識別精度的提高,卡片的孔距也越來越小,具有 80~90
列孔位的卡片成為主流,有些卡片的孔位甚至多達(dá) 130
列。
機(jī)器的功能也逐漸強(qiáng)大,不再只是簡單地統(tǒng)計(jì)穿孔數(shù)目,減法、乘法等運(yùn)算能力陸續(xù)登場。1928
年,哥倫比亞大學(xué)的科學(xué)家們甚至用單元記錄設(shè)備計(jì)算月球的運(yùn)行軌跡,他們在 50
萬張卡片上打了 2000
萬個(gè)孔,彰顯著單元記錄設(shè)備的無限潛力。
機(jī)器的電路實(shí)現(xiàn)越來越復(fù)雜,但同時(shí)也越來越通用。1890
年所用的那臺制表機(jī)的 線路是固定的,遇到新的統(tǒng)計(jì)任務(wù),改造起來十分麻煩。
1906
年,霍爾瑞斯便引入了接插線板(plugboard)——一塊布滿導(dǎo)電孔的板卡,可通過改變導(dǎo)線插腳在板上的位置改變線路邏輯。試想一下,接插線板的內(nèi)部已經(jīng)布好了具有各種功能的線路,但它們都處在斷開狀態(tài),各自連接著接插線板上的某兩個(gè)孔位,像一窩嗷嗷待哺的小鳥長大著嘴巴,外部的導(dǎo)線就像美味的蟲子,當(dāng)蟲子的頭尾分別與小鳥的上喙和下喙接觸,線路就被導(dǎo)通,這只小鳥就開始工作了。如此,每次使用就可以激活不同的 “小鳥”,從而完成不同的任務(wù)。這已經(jīng)是一種可編程性的體現(xiàn)。
1911
年,制表機(jī)公司與另外 3
家公司合并成立 CTR 公司 (Computing-Tabulating-Recording Company),制表機(jī)公司作為其子公司繼續(xù)運(yùn)營到 1933
年。
1924
年,CTR 更名為 國際商業(yè)機(jī)器公司(International Business Machines Corporation),就是現(xiàn)在大名鼎鼎的 IBM 公司??梢?,在如今眾多年輕的 IT 公司中,擁有百年歷史的 IBM 是位當(dāng)之無愧的前輩,它完整地參與和見證了整個(gè)現(xiàn)代計(jì)算機(jī)的發(fā)展史。IBM 保持了制表機(jī)公司在單元記錄市場的龍頭地位,到 1955
年,其每天生產(chǎn)的穿孔卡片多達(dá) 7250
萬張。
1937
年開始,單元記錄設(shè)備逐步電子化,與電子計(jì)算機(jī)的界線漸漸模糊,并最終為后者讓路。隨著 1976
年 IBM 一型最核心的單元記錄產(chǎn)品的停產(chǎn),短暫的單元記錄時(shí)代也宣告謝幕,它仿佛是電子計(jì)算時(shí)代來臨前的預(yù)演和鋪墊,許多設(shè)計(jì)被沿用下來,比如穿孔卡片和接插線板。
有趣的是,即使電子計(jì)算機(jī)逐漸普及,許多機(jī)構(gòu)由于用慣了單元記錄設(shè)備,遲遲不愿更換,少數(shù)機(jī)構(gòu)甚至一直用到了 21
世紀(jì)。
參考資料
-
機(jī)織布、針織布和無紡布的概念介紹 -
從織布機(jī)到計(jì)算機(jī) -
記憶傳承,信息永生(四) -
織布機(jī)與計(jì)算機(jī) -
計(jì)算機(jī)發(fā)展的引路者——賈卡織機(jī)的前世今生 -
布爾與電腦——《科學(xué)月刊》 -
Who is the father of the computer? -
現(xiàn)代計(jì)算機(jī)真正的鼻祖——超越時(shí)代的偉大思想 -
制表機(jī):穿孔時(shí)代的到來
特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:
長按訂閱更多精彩▼
如有收獲,點(diǎn)個(gè)在看,誠摯感謝
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!