奧古斯塔·愛達·金,勒芙蕾絲伯爵夫人(Augusta Ada King, Countess of Lovelace,1815年12月10日-1852年11月27日),原名奧古斯塔·愛達·拜倫(Augusta Ada Byron),通稱愛達·勒芙蕾絲(Ada Lovelace),是著名英國詩人拜倫之女。母親安娜·密爾班克(A.Millbanke)是位業餘數學愛好者,阿達沒有繼承父親詩一般的浪漫熱情,卻繼承了母親的數學才能。她最著名的事跡為翻譯義大利人查爾斯·巴貝奇早期的程式設計書《分析機概論》(analytical engine),愛達對翻譯查爾斯·巴貝奇的《分析機概論》所留下的筆記,被認為對現代電腦與軟體工程造成了重大影響。 由於巴貝奇晚年因喉疾幾乎不能說話,介紹分析機的文字主要由阿達替他完成。阿達的生命是短暫的,她對計算機的預見超前了一個世紀以上。阿達也死於36歲,與她父親拜倫相似。根據她的遺願,她被葬於諾丁漢郡其父親身邊。 愛達是她詩人父親——拜倫與母親安妮·伊莎貝拉·米爾班奇(Anne Isabella Milbanke)唯一的合法子嗣。她的名字取自拜倫的異母的姊妹奧古斯塔·李(Augusta Leigh)。拜倫與安妮貝拉的婚事是在奧古斯塔為了避免醜聞,而慫恿拜倫與安妮貝拉結合的產物。然而,在1816年1月16日,安妮貝拉還是離開拜倫,帶著一個月大的愛達離開。同年4月21日,拜倫簽下了分居協定,並離開英國。 愛達從未見過她同父異母的妹妹阿拉格·拜倫(Allegra Byron),阿拉格是拜倫與克萊爾·克萊蒙(Claire Clairmont)所出,但於1822年死去,得年5歲。至於愛達的另一位親戚伊莉莎白·梅朵拉·李(Elizabeth Medora Leigh,是奧古斯塔·李之女)則有與她照過面,並由愛達的母親告知愛達與梅朵拉彼此的身世。
不幸的童年
愛達·奧古斯塔·拜倫(Ada Augusta Byron)1815年12月10日生於英國倫敦。她的父親是英國著名詩人喬治·拜倫(George Gordon Noel Byron,1788-1824),母親是數學家安娜·伊莎貝拉(Anna Isabella Milbanke)。熱戀時,拜倫曾戲稱他未來的妻子是“the Princess of Parallelograms”(平行四邊形公主)。看來,興趣愛好的巨大反差,埋下了不幸的種子。 愛達出生後的第一個悲劇就是父母的離異。她父母的婚姻只維持了一年零半個月:1815年1月2日結婚,1816年1月16日離婚,這時愛達出生僅37天。 第二個悲劇應該是幼年喪父。我們知道,拜倫於1816年4月25日離開倫敦出國,而且一直沒有再回英國。他先在瑞士生活,後來到了義大利,又轉至希臘。在那裡,他還參加過希臘反對土耳其的獨立戰爭。37歲時病故於希臘的Missolonghi,這時愛達才8歲,好在她一直沒有見過自己的父親。 愛達的母親希望女兒成為一名數學家,而不是詩人。儘管也讓女兒學習鋼琴,那是為提高她的音樂素養,而不是讓她從事藝術。不過,愛達與母親在一起的時間並不多。她的童年主要是在祖母呵護下度過的。然而祖母Noel Byron夫人1822年逝世,愛達只有7歲。
嚴格的教育
既然愛達的母親安娜對數學有興趣,而且對“既瘋又壞”(mad and bad)的丈夫深惡痛絕,當然就把希望寄托在女兒身上,渴望並鼓勵她發展理性的修養,而抵制父親浪漫主義色彩的影響。於是,愛達接受了近乎嚴酷的教育。 愛達6歲時,母親雇了家庭女教師雷蒙特小姐(Miss Lamont)在家裡對她進行啟蒙教育。安娜強烈相信,數學作為一門智力的學科,必須讓它在愛達的頭腦里牢牢紮根。她認為打好數學基礎將為愛達提供穩定的、理智的社會地位,而這也是針對“粗魯、輕率、自負、搪塞和狂妄的良好解毒劑。” 安娜希望女兒喜歡數學,然而女兒卻愛好地理,她花很少的時間學習數學,以便應付母親的嚴格要求。安娜發現女兒敷衍後,既要處罰愛達,如關到小黑屋反省,又要斥責並辭退雷蒙特小姐。所以家庭教師的更換比較頻繁。而愛達不免要說點小謊話以搪塞母親。例如,寫一些無關痛癢的檢討:“我,愛達,沒有好好記筆記,明天一定把它做好。”(I, Ada, have not done the Notes very well, but I‘ll try to do it better tomorrow)。 在愛達的家庭教師名單中,有幾位數學家參與。其中既有平庸之輩,也有赫赫有名的數學大師。下面我們列舉幾位: 首先應該談到的是威廉·弗雷德(William Frend)。他曾經教過安娜,又來教愛達。這時他年事已高,竟然不相信有負數存在,更談不上了解數學的最新進展。 其次必須提及的是勞倫斯小姐(Miss Arabella Lawrence),安娜請她把13歲的愛達那偏好爭辯的性情改變過來。不過,愛達身體不佳,又染上麻疹,休息了好長一段時間。 還有威廉·金(William King)博士,他1829年也忙過愛達的數學教育。但這位博士的數學根基不深,他自己也坦白他學習數學是通過閱讀而不是作研究(by reading it rather than by doing it)。此後若干年,雖然他還給愛達一些幫助,但在1834年他寫給愛達的信中,直率地承認“在您的學習中,很快就能把我難倒(you will soon puzzle me in your studies)”。
大師的影響
除了以上三位平庸之輩,在愛達的一生中,受過三位世界級大師的培養。這就是女科學家瑪麗·莎沫維勒(Mary Fairfax Greig Somerville,1780-1872);計算機鼻祖查爾斯·巴貝奇(Charles Babbage,1791-1871);數理邏輯學家德·摩根(Augustus DeMorgan,1806-1871)。三位大師彼此之間有多年交情,對愛達栽 培的默契可能是她短暫一生感受到的最大幸福。 1830年由於母親安娜與女科學家瑪麗·莎沫維勒的交往,15歲的愛達也成為瑪麗家的常客。瑪麗有兩個女兒與愛達年齡差不多,愛達經常去瑪麗家裡,度過一個個美好的夜晚。瑪麗則帶她們一起去聽音樂會,還經常去倫敦大學聽地理學講座。後來,她們成立了女學者聯誼會,組織參觀博物館,拜訪科學家等活動。正是這些活動使愛達認識了巴貝奇。瑪麗把愛達當作自己的女兒一樣,給她數學書籍、指導她的學習、為她設計思考問題。師徒之間無所不談,她們暢談數學問題以及其他自然科學問題,特別是討論巴貝奇及其製造的計算機器。此外,她們也談論音樂、繪畫等藝術,以及爭取婦女受教育權與選舉權等政治問題。 1833年6月5日,在一次聚會上愛達認識了查爾斯·巴貝奇。兩周后她和母親一起拜訪了巴貝奇在倫敦的工作室,在那裡她看到差分機的演示以及對分析機的設計。愛達立刻為這些機器著迷,這給巴貝奇留下深刻的印象。當時花季妙齡的愛達出落得已令人入神,據索菲亞·弗雷德(她是威廉·弗雷德的女兒、德·摩根的妻子)回憶,“像她這樣年輕,能理解機器的工作,而且看到這一發明的無比美妙(young as she was, understood its working, and saw the great beauty of the invention)”。此後她就與分析機結上了不解之緣。 1841年,在巴貝奇的建議下,德·摩根專門對愛達的數學研究進行了高級的個別指導。
愛達的注釋體現最早的編程思想
如上所述,愛達18歲時聽了巴貝奇關於設計差分機的講演,從而對巴貝奇的機器產生了濃厚的興趣。後來又對全新的分析機特別地著迷。從1836年1月18日開始,愛達給巴貝奇寫信,探討分析機的各種問題。一直到生命結束,她給巴貝奇寫了大量的信件。這是研究愛達編程思想的重要資料。但最有代表性的文獻,卻是愛達翻譯一本書時所加的注釋。那是1842年10月,法國工程師Luigi Federico Menabrea(1809-1896)發表了一篇關於巴貝奇分析機的理論和性能的文章。愛達把它由法文譯成英文,而且在其中加入她的許多注釋。 關於這個工作,巴貝奇有一段精彩的回憶:“在日內瓦綜合書目上出現Menabrea關於這個機器的實錄後,有一天晚上拉夫拉斯伯爵夫人告訴我,她已經把這篇東西由法文翻譯成英文。我問她,為什麼不就這個題目自己寫一篇原創性的論文,你是能夠非常親切地介紹這個機器的。拉夫拉斯伯爵夫人答覆道:她的思想還沒有形成。然後我建議她在Menabrea的文章上加些注釋。這個建議立即被她採納了。”“我們一起討論了必須引入的各種插圖,我建議了幾個,但是否選擇完全由她決定。還有一些不同問題的代數工作,例如有關伯努利數的計算,為了減少她的麻煩,我給出一些計算。結果她寄來一份修訂,糾正了我在計算中的一個重大錯誤。”“拉夫拉斯伯爵夫人的注釋比原文的長度擴展了三倍。她全力以赴,對於和這個題目有關的很困難、很抽象的問題都作了解釋。把這兩個資料一起提供給讀者,就能理解機器的工作原理,並通過完整的示範,了解如何使用分析機去執行分析開發的任務。” 在這些注釋中,愛達描述了分析機如何進行編程,最早給出電腦程式設計的許多想法。下面給出幾個注釋的內容,以饗讀者: 注釋A:說明設計中的“分析機”與已存在的“差分機”的區別。她的討論預言了通用計算機(general purpose computer)的作用,這超出了巴貝奇的想像。她表明分析機可以接受各種各樣的穿孔卡:“控制卡”、“數據卡”、“操作卡”,它們如何使計算機自動地對輸入的數據完成正確的操作。換句話說,計算機能“分析數據”。她還提議數字和其他符號如字母都可以“編碼”成數字數據,機器可以處理它們,並給出寫成的數據。她甚至要為分析機能產生音樂而奮鬥。 注釋B:愛達討論了分析機的記憶能力,她把記憶裝置稱為“倉庫”。她提出了存儲位置或地址的想法。她指出插入“註解或備忘”的可能性,計算機不會執行它們,但可以讓人們簡明地了解程式將走向何方。 注釋C:愛達引入“返回”(backing)的概念,製作一個操作卡返回到某個位置,而它就是將要工作的下一個數據卡。她解釋這樣做的原因是:“在解決一個問題的方案中,能確保某個特殊的穿孔卡或者一組卡能成功地使用若干次”(to secure the possibility of bringing any particular card or set of cards into use any number of times successively in the solution of one problem)。這個思想我們今天稱為“循環”(looping),愛達和巴貝奇早就討論過這個問題。 注釋D:愛達解釋了如何使用操作卡、返回、倉庫以及各種控制卡,以寫成一個指令序列,去完成一個特定的操作集合。 注釋E:她解釋了機器如何擁有三角函式和其他函式。這就在計算機內部引入了內建函式(built-in function)的思想。 注釋F:她給出利用返回處理(循環),僅通過重複幾個操作,來解一個任意大小的線性方程組。她詳細寫出解十元線性方程組的程式。她還推測通過簡單的循環過程生成素數表的可能性。 注釋G:愛達警告讀者,如果輸入“不真實”的信息,那么計算機就不能做任何事情。今天我們把這稱為“輸入垃圾,輸出垃圾”(Garbage in, Garbage out)。她寫到:“分析機不能自命不凡,無論什麼問題都能解決。它只能完成我們告訴它如何做的事情。它能遵循分析,但沒有能力預期任何分析關係或事實。”(The Analytical Engine has no pretensions whatever to originate anything. It can do whatever we know how to order it to perform. It can follow analysis; but it has no power of anticipating any analytical relations or truths)。在注釋G中,愛達還寫了一個程式,讓分析機生成伯努利數的表。 由上可知,愛達獲得世界上第一位電腦程式員的榮譽是當之無愧的。
愛達的辭世與愛達語言
由於受子宮癌和賭博債務的折磨,有的文獻還說她曾經吸毒,這位悲劇性的人物愛達過早地於1852年11月27日去世,生命周期與她的父親拜倫同樣短促,都只有37歲。最後與她的父親一起,埋葬在諾丁漢郡Hucknall鎮拜倫家族的墓地。 當年36歲。很諷刺的,她與她父親拜倫死於相同年齡,一樣死於治療中的失血過多。她留下了兩個兒子與一位女兒—安妮·布蘭特貴女。依她的遺言,愛達葬於諾丁漢哈克諾的聖 瑪麗亞·抹大拉教堂,長眠在父親的身旁。 愛達的形象完美地體現了一位程式設計師應該具備的科學家與藝術家的雙重氣質。一方面,程式設計師需要在數學概念、形式理論、符號表示等基礎上工作,應該有科學家的素養。另一方面,對於一個高效的、可靠的、便於維護的軟體系統,又必須刻畫它的細節,並把它組成一個和諧的整體,所以程式設計師又應該有藝術家的氣質。 1975年1月,美國國防部(DoD)提出統一高級語言的必要性,並為此在國際範圍內招標。1979年5月,從四種入圍語言中最後選定了一種。該給它起個什麼名字呢?總不能把它稱為DoD-1語言吧。國防部通過與英國拉夫拉斯伯爵的繼承人萊頓(Lytton)伯爵協商,決定把新語言命名為Ada語言,以此紀念愛達在130年前對程式設計的歷史貢獻。於是,愛達的名字、生平與事跡才廣為世人傳誦。 Ada是一種表現能力很強的通用程式設計語言,它是美國國防部為克服軟體開發危機,耗費巨資,歷時近20年研製成功的。它被譽為第四代計算機語言的成功代表。美國國防部之所以把這種語言取名為Ada,是為了紀念奧左斯特·艾達·洛夫萊斯伯爵夫人(Augusta Ada Lovlace,1815-1852),她是英格蘭詩人拜倫(Byron)勳爵的女兒,曾對現代計算機技術之父查爾斯·巴貝奇(Charles Babage,1791-1871)的筆記、手稿進行了整理和修正。從某種意義上說,她是世界上第一位電腦程式員。 與其他流行的程式設計語言不同,Ada語言不僅體現了許多現代軟體的開發原理,而且將這些原理付諸實現。因此,Ada語言的使用可大大改善軟體系統的清晰性、可靠性、有效性、可維護性。Ada是現有的語言中無與倫比的一種大型通用程式設計語言,它是現代計算機語言的成功代表,集中反映了程式語言研究的成果。Ada的出現,標誌著軟體工程成功地進入了國家和國際的規模。在一定意義上說,Ada還刺破了“馮·偌依曼思維模式” (Von Newman Mind-set) 的桎梏,連同Ada的支持環境(APSE)一起,形成了新一派的所謂Ada文化。它是迄今為止最複雜、最完備的軟體工具。Ada語言是美國國防部指定的唯一的一種可用於軍用系統開發的語言,我國軍方也將Ada作為軍內開發標準(GJB 1383《程式設計語言Ada》)。 Ada最初設計時關注於3個最重要的問題:程式的穩定性和可維護性,程式設計和人的行為接近,並且高效。這份語言的修訂版是為了提供更大的靈活性和擴展性,存儲管理的額外控制和同步,以及標準化的程式包以支持重要的應用程式領域,同時保留原來的重點。對於程式設計語言促進可靠性和簡化維護難度的需求已被確立。因此程式可讀性的重要性高於輕鬆地寫代碼。例如,語言規則要求程式變數應當明確聲明並指定它們的類型。由於變數的數據類型是不變的,編譯器可以確保對於變數的操作適用於該類型的對象。 另外,有錯誤傾向的符號已經避免,並且語言語法避免了編碼形式的使用,使更傾向於英語的結構。最後,Ada 語言提供了程式單元單獨編譯的功能,使程式開發和維護簡便,同樣也提供了在一個單元內多個單元之間的檢測。考慮人類程式設計師的問題也在設計時被強調。總而言之,在繼續避免過多複雜句型的缺陷的同時,嘗試以一致系統的方式保持相對較少的底層概念。 Ada 語言最初設計是為了構建長周期的、高度可靠的軟體系統。它提供了一系列功能來定義相關的數據類型(type)、對象(object)和操作(operation)的程式包(package)。程式包可以被參數化,數據類型可以被擴展以支持可重用庫的構建。操作既可以使用方便的順序控制結構,通過子程式(subprogram)來實現,也可以通過包含並發執行緒同步控制的入口(entry)來實現。Ada 也支持單獨編譯(separate compilation),在物理層上支持模組性。 Ada 包含了很複雜的功能以支持實時(real-time),並發程式設計(concurrent programming)。錯誤可以作為異常(exception)來標示,並可以被明確地處理。Ada 也覆蓋了系統編程(system programming);這需要對數據表示和系統特性訪問的精確控制。最後,提供了預定義的標準程式包,包括輸入輸出、字元串處理、數值計算的基本函式和隨機數生成。 Ada的風格在Pascal語言中得以延續。