出品 | 程序人生 (ID:coder _life)
阿達(dá)·拉芙萊斯,一個 IT 圈里人人都聽過的名字。被稱為「程序員的開山鼻祖」,但也存在著曠日持久的爭議。
探索關(guān)于 Ada 的一切,可能是最困難的事情之一。她的記載充斥著大量真假難辨的史料、艱澀的數(shù)學(xué)和機械原理、19 世紀(jì)英國上流社會的習(xí)俗、自身復(fù)雜的經(jīng)歷,還有「賽過唐頓不讓簡愛」的維多利亞時期的英語。那么真實的 Ada 究竟是怎樣的?她究竟發(fā)明了什么?她到底是女英雄,還是一個被夸大的小人物? 在查考了大量的資料后,我對 Ada 逐漸有了不一樣的認(rèn)識。本文希望能從這些史料中抽絲剝繭,盡可能的還原真實的阿達(dá)·拉芙萊斯。
詩人拜倫的獨生女
1815 年,「阿達(dá)-拜倫」出生在倫敦的一個貴族家庭。她的父親「喬治·拜倫勛爵」是 19 世紀(jì)英國浪漫主義詩壇的天王巨星,母親安娜貝拉·米爾班克則是一位擁有男爵頭銜的典型的貴族女性。 可能是拜倫的性格太過叛逆和純粹,安娜貝拉跟他只結(jié)婚一年,就帶著只有5周大的 Ada 搬到了鄉(xiāng)下的一個莊園里。 拜倫的狂野不羈給安娜貝拉留下了陰影,因此她從小就讓女兒 Ada 接受全方位的理科教育:數(shù)學(xué)、化學(xué)、地理、語言、縫紉。而 Ada 也從小就對科學(xué)感興趣,11 歲時,她在研究了鳥類的解剖結(jié)構(gòu)和飛行動力學(xué)后,還構(gòu)思了一個給馬裝上翅膀并用蒸汽來驅(qū)動的計劃。 Ada 的少年時期與其他上流社會的小孩沒有什么不同,11 歲游歷歐洲、17 歲按照習(xí)俗到倫敦參加上流社會的社交活動,并見到了當(dāng)時的英王「威廉四世」,后來她見過剛剛登基的維多利亞女王。因為是上流社會的一員,Ada 從小就接觸過不少大名鼎鼎的人物,包括狄更斯、法拉第等,法拉第還夸她是「科學(xué)界冉冉升起的新星」。
當(dāng)然,她還見到了改變了她人生軌跡的奇男子「查爾斯-巴貝奇」。
在一個巴貝奇的家庭派對上,41 歲的巴貝奇把 17 歲的 Ada 領(lǐng)進(jìn)了自己的小屋,在那里向她展示了自己的畢生的研究成果——差分機。
改變命運的差分機
差分機就是個計算器,要說這個東西確實還有點用。只不過它被造出來的時候已經(jīng)到了 21 世紀(jì),電腦都普及了,所以這東西也只能放在博物館里了。 眾所周知,我們有一個計算乘法的武功秘籍叫「九九乘法表」,我們幾乎可以用豎式快速計算出任意兩個數(shù)的乘積。但在歐洲乘法運算可就費勁了,即使是兩位數(shù)乘兩位數(shù)的豎式運算對他們來說仍然非常困難,這時候就有人發(fā)明了一個叫「對數(shù)表」的東西。它通過「對 10 的對數(shù)的加減結(jié)果」,來得到兩個數(shù)之間的乘積。 比如 37x59,37 等于 101.5682,59 等于 101.7709,1.5682 和 1.7709 就是 37 和 59 的對數(shù)(寫作:log10(37)=1.5682),把這兩個「對數(shù)」相加得到 103.3391,解 10 3.3391 等于 2183,這就是 37x59 的結(jié)果。 這……不是更復(fù)雜了嗎?我怎么知道 37 的對數(shù)是幾,10 3.3391 又是個什么鬼?你不知道老外就更不知道了,他們其實是把所有數(shù)字的「對數(shù)」都整理在了一張「對數(shù)表」上,計算的時候就去這張表上像查字典一樣查一下,再去另一張「逆向表」里查一下等于多少,就得到了答案。 可這個對數(shù)表是哪來的呢?要計算出所有數(shù)的對數(shù)并整理成這張表也不是個小工程。巴貝奇看不慣這種情況,就想發(fā)明個機器,既能快速自動算出對數(shù),又能確保準(zhǔn)確性,所以構(gòu)想了差分機。 簡單來說,這個差分機的原理是,通過加減法把對數(shù)運算分解為幾個步驟,然后自動生成「對數(shù)表」。它可以對任意數(shù)字的「對數(shù)」進(jìn)行展開,還可以自動打印結(jié)果。 但這東西的設(shè)想過于精巧,在當(dāng)時本沒人能造得出來,在花了英國政府 17,500 英鎊之后(約合今天 200 萬磅),只做出了一個簡單的原型,也就是在派對上給 Ada 看的那個。 直到 2002 年,差分機才按照巴貝奇的設(shè)計被完整地復(fù)原了出來,有整整一面墻那么大,幾千個零件。最牛掰的是,這東西居然真的可以工作! 重拾數(shù)學(xué)
在第一次見到了巴貝奇和差分機之后,Ada 便對這種機器格外著迷。但在她開掛之前,她先是回家過了幾年平淡的家庭生活。1835 年 19 歲的 Ada 嫁給了 30 歲的威廉,并先后生了三個孩子,Ada 一生與丈夫的感情都非常穩(wěn)定,丈夫也在她的事業(yè)上給了她不少的支持。1838 年威廉受封為伯爵,從此「阿達(dá)·拜倫」正式成為了「阿達(dá)·拉芙萊絲」伯爵夫人。 這一時期 Ada 把大部分的精力都放在了家庭上,過著騎馬、彈豎琴、喝咖啡的名媛生活。 直到 1839 年,Ada 決心重拾數(shù)學(xué),并且請了個大牛來當(dāng)家教,這個人就是德·摩根。在跟德·摩根的學(xué)習(xí)中,Ada 第一次知道了微積分,同時她還對離散數(shù)學(xué)非常感興趣。她對自己的數(shù)學(xué)能力非常自信。
第一段計算機程序誕生
雖說 Ada 迷茫,有個人比她還迷茫,就是巴貝奇。自己發(fā)明的東西造不出來,預(yù)算又趕上政府換屆,被新政府給斷了,自己還貼了不少錢。眼瞅著從老爸那繼承的 10 萬英鎊(相當(dāng)于今天的 1400 萬美元)也嚯嚯的差不多了,巴貝奇又著急又上火。 這個時候的巴貝奇簡直到了谷底。不過人生就像巧克力,大力就會出奇跡。巴貝奇再次靈光一閃,在差分機的基礎(chǔ)上構(gòu)思出了一個更具有普適計算意義的機器——分析機。
如果說差分機是個「計算器」,那么分析機就終于有點「計算機」的意思了。 項目有了,下一步就要找投資。英國政府肯定是不會再給錢了,所以他干脆帶著 PPT、拿著自己印了 6 行 title 的名片(這不是梗)去了意大利,找到了意大利數(shù)學(xué)家「梅納布雷亞」。「梅納布雷亞」當(dāng)時就被分析機的這個想法給震驚了,當(dāng)場表示這個項目我投了!不過不是資本投資,而是技術(shù)投資。他用法語寫了一份很詳盡的分析機運作原理的論文來幫助科普。
巴貝奇的 6 行 title 女主 Ada 看到這篇論文后興奮異常,于是決定把這篇法語的論文翻譯成英語,讓更多的人看到。在翻譯的過程中,她開了掛,加了很多注解,結(jié)果注解的內(nèi)容越來越多甚至超過了正文;她還加了很多連巴貝奇自己都沒想到的示例來演示分析機的功能。
結(jié)果寫著寫著,就寫出了世界上第一段計算機程序!
Ada 的第一段程序(伯努利數(shù)推導(dǎo)程序)——NoteD
對普世計算的預(yù)言
分析機是世界上第一臺「可編程的機械通用計算機」,當(dāng)然那個時候編程語言還沒發(fā)明,巴貝奇就用打孔紙來控制機器的操作,而打孔紙早就用在了提花機上。 分析機通過打孔卡輸入,變量卡定義數(shù)值的位置,打印機輸入結(jié)果。此外,分析機還有一個存儲系統(tǒng)和運算單元,存儲系統(tǒng)可以存儲 1000 個 40 位的十進(jìn)制數(shù)(約合今天的 16.2KB);運算單元則可以進(jìn)行加減乘除、比較和平方根的運算。 最初,包括巴貝奇在內(nèi)的所有人都認(rèn)為這個分析機只是個更高級的計算工具,但這個時候 Ada 卻看到了完全不同的可能,這不僅是個數(shù)學(xué)運算工具,任何有規(guī)律的事物,都可以數(shù)字化然后用它來進(jìn)行計算,把人從基礎(chǔ)的工作中解放出來,這不就是今天的計算機嗎?!
Ada 在兩百年前從一篇基礎(chǔ)的論文中,連一個原型都沒有,就準(zhǔn)確預(yù)言了 200 年后的世界。 伯努利數(shù)推導(dǎo)程序
Ada 最大的成就,是用分析機推導(dǎo)伯努利數(shù),她認(rèn)為這是個很好的展現(xiàn)分析機特性的例子。伯努利數(shù)是一個計算「冪次和」的有理數(shù)數(shù)組:
Ada 用表格的方式設(shè)計出了一個推導(dǎo)伯努利數(shù)的程序,這個程序包含 25 個步驟和一個循環(huán)。國外有大牛把她的這段程序翻譯成了 C 語言和 Python。 再說個好玩的,話說為啥今天的程序員總逃不過寫 bug 的命運?因為 Ada 寫的第一段代碼中就有 3 個 bug,分別在第 4 行、第 23 行和第 25 行。第 4 行的 bug 是分子分母寫反了。看來程序員被 bug 支配的恐懼,是被祖師爺寫進(jìn)命運里的啊。
最后再說說 Ada 的成就是否被夸大了?從學(xué)術(shù)的角度看的確如此,她的理論是建立在巴貝奇的發(fā)明之上的,她從來沒有發(fā)表過自己的獨立論述,甚至連「第一段代碼」也不是真正意義上的第一段,巴貝奇自己就寫過好幾段。 但她是第一個提出通用計算理念的人,她的代碼也是最接近今天編程內(nèi)核的,只有她的代碼包含了循環(huán)。20 世紀(jì)初,在被阿蘭圖靈多次提到后,Ada、巴貝奇和他們的工作才再次重現(xiàn)。 很多人猜測,如果 Ada 擁有的正常的壽命,計算機是否會提前一個世紀(jì)被發(fā)明出來?答案可能是否定的。雖然當(dāng)時電已經(jīng)被發(fā)明,但用電線來傳輸信息會導(dǎo)致大量的丟失,且穩(wěn)定性也很差;另外,二進(jìn)制在當(dāng)時也并不為人所重視。 但不可否認(rèn)的是,如果 Ada 沒有英年早逝,她很可能會成為科學(xué)界的領(lǐng)袖之一,領(lǐng)導(dǎo)科學(xué)家探索這個世界;就如同她的父親領(lǐng)導(dǎo)著希臘大軍,為自由而戰(zhàn)。 好了,這就是 Ada 的故事,未來還會給大家?guī)砀嘤腥?、有干貨的科技史,咱們下期見?/span>
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!