万尼瓦尔·布什(1890——1974)和他在麻省理工学院设计的微分分析机
埃达对此次争执的回应是一封长达16页的信,她在信中毫无保留地表达了自己的想法,并且生动地展现了自己的善变、得意、幻想和激情。前一句还在对巴贝奇阿谀奉承,后一句就变成了严厉斥责,或者在赞扬过后又对他加以诋毁。她在其中一部分对比了他们的动机。“我的一个不可动摇的原则是对真理和上帝的热爱要先于名声和荣誉,”她断言道,“虽然你也爱真理和上帝,但你更爱名声和荣誉。”惯于自鸣得意的她相信自己肯定会出名:“我希望将自己的能力用于阐释全能的上帝和他的律法……如果我能够成为他最著名的先知之一,这将会是我无上的荣耀。”44
根据这份图表及其生成伯努利数的复杂过程,埃达的仰慕者们把她尊称为“世界首位计算机程序员”。这种说法其实有点站不住脚,因为巴贝奇至少在理论上已经设计出超过20个可以在分析机运行的操作。但是这些成果都没有得到发表,而且他也没有清楚描述这些操作的执行顺序。因此,我们还是可以说伯努利数生成算法的详细编程描述是第一个正式发表的计算机程序,而且这份成果的最终署名是A.A.L.——奥古斯塔·埃达·洛夫莱斯的缩写。
[3] 伯努利数的名字来自17世纪瑞士数学家雅各布·伯努利(Jacob Bernoulli),他曾经研究了连续整数的乘方结果之和的问题。伯努利数在数论、数学分析和微分拓扑学当中都有特别的作用。
埃达的第三个贡献出现在最后一条“注解G”当中,她在这部分想出了分析机的详细工作步骤,这相当于我们现在所说的计算机程序或者算法。她当时采用的例子是一个用于计算伯努利数[3] 的程序,伯努利数是一种极为复杂的无穷级数,拥有多种表现形式,它在数论当中占有相当重要的地位。
克劳德·香农(1916——2001),照片摄于1951年
埃达在注解中表示这种功能的实现方式是“为它引入雅卡尔发明的提花原理,就是利用打孔卡片控制纺织物上的复杂图案的编织方式”。埃达比巴贝奇更能理解这种机器的意义所在。这个概念表明分析机就像是我们现在所熟悉的计算机:这不仅是一台可以完成特定任务的机器,还是一台通用型的机器。她解释道:
在没有告知埃达的情况下,巴贝奇将自己准备添加的内容直接发给了《科学报告》。这本期刊的编辑认为这篇文章应该单独刊出,而且建议他“勇敢地”署上自己的名字。虽然巴贝奇有着待人和善的一面,但他有时候也是暴躁、固执和无礼的,这是大多数创新者都具有的性格特点。对方提出的解决方式把他彻底激怒了,他一气之下在信中要求埃达撤回这篇论文。这下就轮到埃达不高兴了。“我亲爱的巴贝奇,”她在回信中用上了通常只在男性朋友之间使用的称呼,“撤回这份译文和注解会是一件不光彩和不正当的事情。”她在回信的结尾写道:“请确信我是你最好的朋友,但我永远也不可能,也不会支持你提出的做法,因为这不仅是大错特错的,而且是在自取灭亡。”42
巴贝奇最终做出了让步,并同意在另外一本期刊上单独发表自己的文章。埃达在当天向母亲抱怨道:
埃达希望自己的作品可以被人们看成是一份严肃的科学论文,而不是一篇向公众寻求支持的文章,所以在着手编写这份“注解”的时候,她就表明自己不会就政府拒绝继续资助巴贝奇建造分析机一事发表任何意见。巴贝奇对这种做法感到不满,于是他自己写了一份批评政府的长篇大论。他希望埃达可以将这部分内容匿名地加入她的“注解”之中,将其当作是她自己的观点。她拒绝了这个请求,因为她不想自己的作品做出妥协。
她在这份“注解”当中还引入了另外一个重要概念,这个概念可以一直追溯到玛丽·雪莱在拜伦勋爵的提议下所创作的《科学怪人》的故事。它提出了一个关于人工智能的问题,而且直到现在,这仍然是计算机领域中最发人深思的一个哲学问题:机器能够思考吗?
1843年9月,埃达的译文和“注解”终于刊登在了《科学报告》上。在此后的一段时间内,她享受着来自朋友们的赞美,更憧憬着能够成为像自己的导师玛丽·萨默维尔一样的人物,在科学界和文学界都占有一席之地。作品发表一事最终让她感到自己像是“一个真正的专业人士”。她向一位律师写信道:“我在专业领域中已经达到了跟你一样的成就。”50
一直以来,埃达·洛夫莱斯都被人们称颂为女性主义的代表人物和计算机先驱。例如,美国国防部将其高级面向对象编程语言命名为“埃达”(Ada)。然而,她的狂妄自大和反复无常也一直遭人诟病,还有人认为她为那份署上她名字的“注解”只做出了少量的贡献。她在这份“注解”中写了一段关于差分机的描述,而这番话同样可以用来解释她毁誉参半的名声:“我们在思考一个新的问题时总会出现这样的趋势:首先,高估我们已有的特别或重要发现;然后,自然而然地低估这个问题的真实情况。”
工业革命的基础是两个简单而重要的概念。创新者们想出了一些可以简化工作的方法,他们将工作细分成可以通过流水线完成的更为简单和琐碎的任务。然后,发明家们开始从纺织业中找到使用机器完成工作步骤的方法,其中有很多工作都由蒸汽机提供动力。以帕斯卡和莱布尼茨的想法为基础,巴贝奇尝试在生产计算结果的过程中同时应用这两个概念,制作出一台机械计算机器,这是现代计算机的前身。他最重大的概念飞跃是这种机器不一定只能执行一种操作,而是可以使用打孔卡片进行编程和重新编程。埃达看到了这个诱人的概念带来的好处和意义,并从中得出了一个更为令人兴奋的想法:这种机器不仅可以处理数字,还可以处理任何能用符号表示的事项。
[1] 巴贝奇的好友威廉·惠威尔(William Whewell)就是在这本书的评论中创造了“科学家”(scientist)一词,用以表示这些学科之间的联系。
虽然这些句子不太容易理解,但它们还是值得仔细研读的。它们描述了现代计算机的本质。埃达还使用了一些诗意的辞藻来点缀这个概念。“正如雅卡尔织布机可以织成花瓣和树叶,分析机也可以编出代数的图案。”她写道。巴贝奇在读到“注解A”的时候已经感到兴奋不已,他没有对注解的内容做出任何修改。“千万不要改动它。”他说道。38
但事实并非如此。巴贝奇没有为自己的机器筹到更多的资金,机器始终没有被建造出来,他最后在贫困潦倒之中郁郁而终。至于洛夫莱斯夫人,她再也没有发表过其他的科学论文,她终日沉迷于赌博和鸦片药物之中,生活每况愈下。她和一位赌博搭档私通,后来还遭到这位情夫的勒索,被迫变卖自己的家传珠宝。在生命的最后一年里,她与子宫癌进行了一场极其痛苦的抗争,其间还进行了多次放血治疗。她在1852年病逝,终年36岁。按照她的临终遗愿,她被埋葬在一个乡间坟墓中,长眠于自己素未谋面的父亲旁边,她的父亲也是在同样的年纪逝世。
为了解释这个想法,她谨慎地定义了什么是计算机操作:“也许这是一个恰当的解释,我们所说的‘操作’指的是任何改变两个或两个以上事物之间的相互关系的处理,这种关系可以是任何类型的。”她提到计算机操作不仅可以改变数字之间的关系,还可以改变任何逻辑相关符号之间的关系。“它可以处理除了数字以外的对象,这些对象的相互基本关系可以使用抽象的操作原理来表达。”从理论上来说,分析机甚至可以进行关于乐谱的操作。“假如和声学与乐曲当中的音调之间的基本关系可以进行这种表达和改编,那么这台机器或许可以做出精妙、严谨和复杂的乐曲。”她写道。这正是埃达式“诗意科学”的终极概念:一首由机器做出的精妙而严谨的乐曲!她父亲要是听到这个想法肯定会吓得不轻。
埃达确信巴贝奇会接受她的提议,让她成为他的创业合伙人。“他非常想要我的文字为他服务,所以他有可能会屈服,尽管我要求他做出很大的让步,”她向母亲写道,“如果他真的同意我的提议,我应该可以帮助他脱离困境并建成他的机器。”47 然而,巴贝奇认为更明智的做法是拒绝这个提议。他亲自前往拜访埃达,并“拒绝了全部的条件”。48 尽管他们之后没有再进行过与科学相关的合作,但是他们之间的关系得到了保持。“我认为自己与巴贝奇之间的友谊比以往更加深厚了。”她在一周后的另一封信中向母亲写道。49 巴贝奇在一封用语亲切的信中答应她在下个月前往参观她的乡间别墅,并把她称为“数字魔女”和“我亲爱的和欣赏的代言人”。
在为分析机寻求支持的过程中,查尔斯·巴贝奇受邀前往都灵在意大利科学家大会上发表演说。当时有一位年轻的军事工程师记下了巴贝奇的演说内容,他就是路易吉·梅纳布雷亚(Luigi Menabrea)上尉,后来更成为意大利的首相。在巴贝奇的帮助之下,梅纳布雷亚在1842年10月发表了一篇详细描述分析机的法语论文。
埃达认为不能。她断言,虽然巴贝奇的机器可以根据指令执行操作,但是它不能产生自己的想法和意图。“分析机不会主动创造任何东西,”她在“注解”中写道,“它可以根据我们能够给出的任何指令完成任务。它可以遵循分析,但它没有能力预见任何的分析关系和事实。”一个世纪之后,计算机先驱艾伦·图灵(Alan Turing)将这个主张称为“洛夫莱斯夫人的异议”(详见第三章)。
[4] 埃达采用的例子包括使用差分技巧制作多项式函数的表格,其中有一个子函数需要用到一个嵌套循环结构,它的内循环有一定的变化范围。
事实上,埃达做出的贡献不但意义深远,而且鼓舞人心。她窥见未来的能力已经超过了巴贝奇,以及任何一个与她处于同一时代的人。她眼中的未来是机器会成为人类想象力的伙伴,这两者的结合可以编织出如雅卡尔提花一样精美的图案。她对诗意科学的理解让她能够欣赏一种想象中的计算机器,虽然当时的科学水平无法实现这种设备的建造,但是埃达认识到了它的处理能力可以用于任意形式的信息。因此,埃达·洛夫莱斯伯爵夫人确实帮助播下了数字时代的种子,它们将在100年之后开花结果。
埃达在这份“注解”当中探究了四个概念,它们在一个世纪之后诞生的计算机身上得到了重现。埃达提出的第一个概念是关于通用型计算机器的,这种机器不仅可以进行预设的任务,还可以根据编写和重编的程序完成无限数量的可变任务。换句话说,她构想了现代的计算机。这个概念是“注解A”的核心,埃达在这个部分强调了巴贝奇原来的差分机和他最新提出的分析机之间的区别。“差分机的设计目的是专门为函数∆7 ux = 0的积分制表,”她在注解的开篇中解释了差分机的用途是计算航海表,“然而,分析机不仅可以用于制作单个函数的表格,而且可以对任意函数进行求值和制表。”
一位友人建议埃达将梅纳布雷亚的论文翻译出来,然后将译文发表在《科学报告》(Scientific Memoirs )上,这是一本专门刊登科学论文的期刊。对埃达来说,这是她为巴贝奇效力和展示自己才能的机会。在完成翻译之后,她将自己的成果告知了巴贝奇,后者在高兴之余还感到了几分意外。“我曾经问过她,既然她对这个论题如此精通,为什么不自己写一篇原创的论文。”巴贝奇如是说。34 她对此的回应是她从来没有想过这么做。当时的女性通常都不会发表科学论文。
1843年夏,埃达在萨里郡的乡间别墅进行这份注解的编写,在此期间,她与巴贝奇交换了大量信件。她在同年秋天搬回了伦敦的家中,随后与巴贝奇进行了多次会面。这篇“注解”的学术专业性和作者女性的身份也引起了少量的争议,有人认为注解的内容主要是巴贝奇的想法。巴贝奇在自己的回忆录中将大部分的功劳都归于埃达:“我们一起讨论了各种可以采用的实例:我提出了其中一部分,但最终的实例都是她自己选定的。此外,不同问题的代数计算部分也是由她完成的,除了一项关于伯努利数的计算之外,因为我当时主动提出要帮助洛夫莱斯夫人解决这个难题。后来她发现我在计算过程中出现了一个重大的错误,于是她将这部分的内容寄回给我进行订正。”36
这种远见将成为数字时代的核心概念:任何内容、数据或者信息(音乐、文本、图像、数量、符号、声音、视频)都可以采用数字形式来表达,并由机器进行处理。即便是巴贝奇也无法完整看到这些,因为他关注的只是数字。但是埃达认识到这些齿轮上的数字可以用来表示数学数量以外的东西。因此她完成了一次概念上的飞跃——从简单的计算器上升到我们现代的计算机。多伦·斯韦德(Doron Swade)是一位专门研究巴贝奇的机器的计算机历史学家,他明确表示这个概念是埃达留下的其中一项历史遗产。“如果仔细研究这段过渡时期的历史,我们会发现埃达1843年的论文是一个明显的转折点。”他说道。39
在解决了这个难题之后,她在注解中加入了一个主要属于自己的贡献:她在一份图表中明确展示了将算法输入计算机的详细步骤,包括两个递归循环。这是一个带有编号的代码指令列表,其中含有目标寄存器、运算和注释——这些是现在任何一位C++(计算机程序设计语言)程序员都耳熟能详的概念。“我连续不断地工作了一整天,这也是我工作成果最大的一天,”她在给巴贝奇的信中写道,“您将会非常欣赏这份图表。它是我呕心沥血的作品。”他们来往的书信明确证明了这份图表是由她自己独立完成的;她在这个过程中唯一得到的帮助来自她的丈夫,虽然他不懂这些算法,但他还是愿意一笔一画地为妻子的铅笔笔迹描上墨水。“洛夫莱斯伯爵这时体贴地为我所写的全部内容上墨,”她在信中写道,“我之前不得不使用铅笔来书写。”41
埃达提出的第二个重要概念来自她对通用型机器的描述。她意识到它的运算不必限制于数学和数字。在参考了德摩根将代数扩展为一种形式逻辑的思想之后,她表示像分析机这样的机器能够储存、计算和操作任何可以使用符号表示的对象,包括文学、逻辑和音乐。
艾伦·图灵(1912——1954)在舍伯恩学校,照片摄于1928年
她之前其实也写过许多类似的信,不然巴贝奇在看到这封信之后应该会大吃一惊。这是她有时候会被自己狂妄自大的野心所主宰的一个例子。尽管如此,她仍然是一个值得尊敬的人,她突破了自己的背景和性别所能够达到的成就,抵御了由父亲遗传的恶习带来的困扰。她坚持不懈地投身于艰深的数学研究事业当中,并取得了我们大多数人都无法企及的成就(仅仅是伯努利数求解这一项就已经胜过很多人了)。在取得惊人的数学成就和充满创造力的见解的过程中,她不仅经历了梅朵拉·李的闹剧,而且遭受了多种疾病的折磨,以至于她产生了对鸦片药物的依赖,这点使她的情绪变得更加不稳定。她在信的结尾向巴贝奇解释道:“我亲爱的朋友,如果你知道我经历过怎样难过和可怕的事情,你自然会明白,我在信中流露的一部分压抑情绪其实是来自我的感受。”在简短地提到使用有限差分方法来计算伯努利数的话题之后,她表达了自己的歉意:“抱歉这封信有多处涂改的地方,”然后可怜地问道,“不知道你会不会让这位‘小仙女’继续为你效劳呢?”46
[2] 具体来说,他是想用除法差分(pided difference)的方法来得出近似的对数函数和三角函数。
在经过一番铺垫之后,埃达向巴贝奇提出了一项交易:他们应该建立商业上和政治上的合作关系。她可以利用自己的人脉关系和公关文稿帮助巴贝奇建造他的分析机,前提是巴贝奇允许她干预他的商业决策。“我所提供的服务和才智是你最佳的选择,”她写道,“请不要轻率地拒绝。”这封信有些部分读起来就像是一份风险投资的条款清单或者是婚前协议,其中还考虑到了可能需要仲裁人的情况。“你在日常事务当中必须完全遵循我的判断(或者你现在也可以提出一位仲裁人,在我们出现分歧的时候就由他来做出判断)。”作为回报,她承诺会“在一到两年之内向你交出多份明确而可行的方案来帮助你完成你的机器建造”。45
为了展示分析机如何生成伯努利数,埃达先描述了一系列的运算,然后制作出一个图表,上面显示了每个运算会如何编码到机器当中。她在这个过程中想出了子程序(用于执行一项特定任务的一系列指令,例如余弦函数或者复利的计算,子程序在必要时还可以成为一个大型程序的一部分)和递归循环(一系列重复执行的指令)的概念。[4] 这些功能是通过打孔卡片的原理实现的。她表示生成每个数字需要使用75张卡片,然后这个过程就可以反复进行,因为求出的数字可以反馈回计算流程,用于生成下一个数字。“显然这75张各不相同的卡片可以重复用于计算每一个后续的数字。”她写道。她想出了一个常用的子程序库,这是她后来的继承者们——包括哈佛大学的格雷斯·霍珀,以及宾夕法尼亚大学的凯·麦克纳尔蒂(Kay McNulty)和琼·詹宁斯(Jean Jennings)等女性程序员,在一个世纪之后才做出来的东西。此外,由于巴贝奇的机器可以根据临时的计算结果调整指令卡片的顺序,所以它为我们现在所称的条件分支奠定了基础。条件分支指的是在满足特定条件之后改变指令执行的路径。
一直以来,巴贝奇先生的处事方式都为我带来了极大的困扰和压力……我非常遗憾地断定,他是在可以忍受的范围内最为不切实际、自私自利和性情乖张的人……我立刻向巴贝奇声明,他不可能强迫我卷入他的任何纷争之中,我也不可能成为他的喉舌……他当时大发雷霆。但我却不为所动。43
当使用卡片的概念出现时,算法的限制就被打破了。分析机的基础跟所谓的“计算机器”是不一样的,它定义了一个完全属于自己的类型。通过建立一种组合通用符号的机制,加上无限的变化和扩展,它在实物的操作和抽象的思维过程之间建立了一个统一的联系。37
巴贝奇建议埃达为梅纳布雷亚的论文增加一些注解,她欣然地接受了这项提议。于是她开始为这篇论文撰写一个叫作“译者注解”(Notes by the Translator)的章节,注解内容最终达到了19 136字,相当于原论文长度的两倍多。她为这份注解署上了“A.A.L.”的名字,这是“奥古斯塔·埃达·洛夫莱斯”(Augusta Ada Lovelace)的缩写。这份“注解”比论文本身还要出名,而且它注定要将埃达变成计算机历史上的一位标志性人物。35
虽然埃达在计算伯努利数时得到了巴贝奇的帮助,不过我们可以从他们交换的信件中看出她对细节的执着。“我在演绎伯努利数的过程中一直坚持计算和钻研到最后一行数字。”她在7月份寄出的一封信中写道,再过几个星期,她的译稿和注解就要截稿付印了。“我现在正处于非常惶恐的状态,这些数字让我陷入了极大的困境和麻烦,我不可能在今天之内做好这件事情……我现在的头脑一片混乱。”40