
奥古斯塔·阿达·拜伦(1815—1852),拜伦勋爵的女儿,十九世纪英国数学家。她只活了三十六岁,留下的东西不多:两篇论文、一部翻译、七条注解。可那七条注解,比原文长了将近三倍,其中第七条(注 G)是一份逐步写明的计算方案——后世称之为最早发表的「程序」。
她一生做了三件事。第一件相遇:十七岁那年,在伦敦的一间客厅里看见一台用齿轮算数的机器,此后二十年她一直在想它能做什么。第二件翻译:把一篇意大利工程师写的法文论文译成英文,译文之外加了七条注解,把一台机器说成了「可以织出代数图案」的东西。第三件写下一份方案:用这台机器的四种运算与若干存储格,把一串伯努利数一步步算出来,连每一步用哪个格、装哪个数、结果放回哪里,都写在纸面上。
明线三样:分析机(一台只做加减乘除、却有「存储」与「作坊」两部分的机器)、循环(把同一条指令串重复执行,靠计数与回跳)、程序(把所有步骤写成一张表,机器照着表走,不必改齿轮)。
暗线一句:注脚。她的名字,第一次印在数学文献上时,只有三个字母:A. A. L.。她写的是一篇译文的注解,位置在别人的文章后面,字号比正文小一号。本册五幕都在写这行小字,以及它后来怎样变成一行大字。
五幕:第一幕讲 1815 年冬天伦敦的一桩婚事与一个女孩的算术课(p.6—p.12);第二幕讲 1833 年那台转动的机器,以及它和一台织机的关系(p.13—p.19);第三幕讲 1843 年那七条注解与注 G 的算子(p.20—p.26);第四幕讲注解里那套「通用」的想法,以及她自己划下的界线(p.27—p.33);第五幕讲 1852 年之后:被忘掉的一百年,与三个字母的回归(p.34—p.40)。
三层读法照旧:故事层无需预备知识;数学层只用到加减乘除、乘方、一张差分表与一张伯努利数表(p.7—p.9、p.14—p.16、p.21—p.23、p.28—p.30、p.35—p.37),每一步都从头算起;注疏层给出原文版本、手稿藏地与研究文献,逐页可查。
先看家世。1815 年 1 月 2 日,伦敦,一位二十三岁的女子嫁给了一位二十七岁的诗人。女子叫安娜贝拉·米尔班克,出身乡绅家庭,从小受的是严格的数学与宗教教育,能读几何,爱做算术题;诗人叫乔治·拜伦,那年刚出第一部长诗,名声正起。这门婚事谈了不到两个月,从头到尾靠书信。
婚后一个月,两人已经不能同处一室。拜伦酗酒、负债、脾气暴烈;安娜贝拉相信数学能治住一切,包括一个人的性情。1816 年 1 月,她带着刚满月的女儿回了娘家,此后再没有与丈夫同住。同年 4 月,拜伦离开英国,去了瑞士、意大利,最后去希腊,1824 年死在那里。父女一生没有见过第二面。
女儿生在 1815 年 12 月 10 日,取名奥古斯塔·阿达。母亲给她定的教育方针只有一条:不能像她父亲。具体做法是每天排满课程,算术、几何、地理、音乐,不许读诗,尤其不许读拜伦的诗。这件事后来办得并不成功——女孩十岁就自己找来父亲的诗集读了,而且一读就记住了。
算术课是家里最郑重的一门。母亲请过好几位家庭教师,其中一位后来在信里抱怨:这孩子的想象力太旺,做题的时候总要把数字想成别的东西。母亲的对策是加课:把数学当作训练理性的器械,一天两小时,不许间断。
十九岁前后,家里替她请了一位正式的老师。1830 年前后,她开始跟着奥古斯都·德摩根学数学。德摩根当时在伦敦大学学院教数学,也是英国最先把代数当作「符号的运算」而不是「数的运算」来讲的人之一。他在信里说过一句评价:这女孩学得快得不正常,将来可能做出第一流的工作。
德摩根教给她的那套看法,后来决定了她的方向。代数不必只算数,可以算「关系」:把符号当成可以照规则搬动的东西,符号代表什么都不必管。她后来的那句名言——机器能织出代数图案——用的就是这个看法:图案是关系,不是数。
下一页,把这一册要处理的两台机器摆上桌:一台织布,一台算数。
本册要处理两台机器,它们看着毫不相干:一台织布,一台算数。
先说织布。1801 年,法国人雅卡尔改进了提花机:把要织的花样编成一串卡片,卡片上有孔无孔,针穿过孔与不穿孔,就决定这一纬提哪些经线。换花样不必重装机器,只换那串卡片。这件事在当时是纺织业的革命——花样第一次变成了可以携带、可以复制、可以交给别人执行的东西。
再说算数。1822 年,英国人巴贝奇造了一台差分机的小模型:一组齿轮,摇动手柄,就能把一张数表逐项算出来,不必人算,也不会算错。数表的用途很实在——航海表、天文表、工程表,当年全靠人算,错一个数字就可能翻一条船。巴贝奇的算盘是:把「算」这件事交给齿轮,让人只负责摇柄。
两台机器的差别在一个词上:花样。织机有花样,所以它能织出无穷多种布;差分机没有花样,它只能算一种东西——它被造出来时就被固定成某个多项式的计算器,换一个公式就得换一套齿轮。
1834 年之后,巴贝奇想到了另一条路。如果机器不预设公式,只提供四种运算(加、减、乘、除)和一批可以存数的格子,那么「算什么」就不必刻在齿轮上,可以写在卡片上。机器变成通用,公式变成数据。这台还没造出来的机器,他叫它分析机。
把两台机器并排看,问题就出来了。织机的卡片控制的是「哪根针穿过哪个孔」,分析机的卡片控制的是「哪两个格子相加、结果放回哪个格子」。前者管图案,后者管运算。可运算本身也能编成图案——一串指令就是一串孔。这一步跨过去,机器就不只是算数工具了。
下一页,把这一册要处理的三样东西摆出来:一张卡片、一条循环、一个注脚。
本册要处理三样东西,三样看起来毫不相干:一张有孔的卡片、一条回头的箭头、一行比正文小一号的字。
第一样,卡片。程序。分析机的指令写在卡片上,一张卡是一步:把某个格子里的数搬到作坊、与另一个格子里的数相加、结果送回某个格子。卡片串起来,就是一整套算法。它的要紧处不在「能算」,在「换一套卡片就换一套算法」——机器不动,纸动。
第二样,箭头。循环。一条指令串如果只走一遍,能做的事很有限;能回头再走一遍,就能做任意多遍。回头的条件是计数器:走完一遍,把计数减一,不到零就跳回开头。整台机器只需要多一个「条件跳转」,就从算一道题变成算一类题。
第三样,小字。注解。1843 年那篇译文,正文是别人的,注解是她的。注解排在正文后面,字号小一号,位置低一截。她的名字印在篇末,三个缩写字母。这一册的暗线就落在这行小字上——一个人怎样在一篇不属于自己的文章里,写下属于自己的东西。
三样东西有一个共同点。它们都不在「算得更快」这一路上,而在「把算这件事本身写下来」这一路上。卡片把算法写成纸,循环把重复写成规则,注解把机器写成语言。本册给这份手艺的概括,一句话:注脚。
先看第一幕:1815 年冬天伦敦的一桩婚事,与一个女孩的算术课。
1828 年,她十三岁。那一年她得了一场病,麻疹之后下肢不能行走,在床上躺了将近一年。养病期间她只能读书,读得多而杂:几何、天文、电学,还有母亲的藏书里最不该给她看的那几本诗集。一年之后她能拄拐走路,又过两年才恢复。这场病把她和同龄女孩的生活分开了——别人在学跳舞,她在读欧几里得。
十七岁那年,她通过一位长辈进了伦敦的学术圈子。那位长辈叫玛丽·萨默维尔,苏格兰人,当时英国最受敬重的女科学人,刚把拉普拉斯的《天体力学》译成英文并加了注解。萨默维尔家的客厅每星期聚一次,来的有天文学家、物理学家、诗人。她在这个客厅里第一次听见「机器算数」这件事被当作正经学问讨论。
1833 年 6 月 5 日,她见到了那台机器。巴贝奇在自己家里演示差分机的一小部分:一组铜齿轮装在一个木架上,摇动手柄,齿轮转动,末端的数字轮依次进位。在场的多是政界与科学界的人,看得客气而困惑。她看得不一样——据她自己后来说,她当场就明白了两件事:这台机器算得比人准,而且它能做的事不止眼前这一件。
此后几个月,她成了巴贝奇家的常客。两人的往来很快超出「参观」的范围:她读他的图纸,问得很细,细到齿轮的齿数与进位的顺序。巴贝奇后来在给朋友的信里说,这女孩问问题的方式像个同行,不像个来开眼界的贵客。
1835 年,她结婚。丈夫威廉·金,男爵,三年后晋封为洛夫莱斯伯爵,她因此成为洛夫莱斯伯爵夫人。这桩婚事给了她一样当时女性极难得到的东西:不必为生计操心的闲暇,以及一个不干涉她做数学的丈夫。她的算术课没有停,通信也没有断。
1830 年代后期,她把主要精力投在一件事上:跟着德摩根把高等数学的全套学完——微积分、级数、微分方程、概率。这段学习的痕迹留在她的通信里:她列书单,做习题,把不懂的地方一条条写下来问。这套训练后来在 1843 年派上了用场:那七条注解里的每一条,都要用上微积分与级数。
下一页先算一件最笨的事:一组齿轮怎样只用加法,把一张数表吐出来。
先算一个最简单的例子。把整数的立方列出来:零、一、八、二十七、六十四、一百二十五、二百一十六、三百四十三。这是 n 从零到七的 n3。
在下面一行写相邻两项的差。一减零得一,八减一得七,二十七减八得十九,六十四减二十七得三十七,一百二十五减六十四得六十一,二百一十六减一百二十五得九十一,三百四十三减二百一十六得一百二十七。
再在下面一行写这一行的差。七减一得六,十九减七得十二,三十七减十九得十八,六十一减三十七得二十四,九十一减六十一得三十,一百二十七减九十一得三十六。
第三行。十二减六得六,十八减十二得六,二十四减十八得六,三十减二十四得六,三十六减三十得六。五个六,一模一样。
这个「一模一样」就是机器能算数的全部秘密。三次多项式,减三次就变成常数。既然第三行不变,那么只要知道某一列上的一个数,就能一路加出下一项:第三行永远是六;第二行的下一项等于本项加六;第一行的下一项等于本项加第二行的新值;原数列的下一项等于本项加第一行的新值。
拿 n=三这一列试一遍。原数列取 27;第一行取 19;第二行取 12;第三行取 6。算下一项:第二行变成 12+6=18;第一行变成 19+18=37;原数列变成 27+37=64。六十四正是四的立方。
再算一步。第二行 18+6=24;第一行 37+24=61;原数列 64+61=125。一百二十五正是五的立方。整台机器只做了三次加法,一次乘法也没有。
「减三次就变成常数」不是巧合,可以算出来。设数列由一个 k 次多项式给出,f(n)=aknk+…+a0。取相邻两项之差,用二项式展开:nk 的差是 (n+1)k−nk,最高次项 nk 相互抵消,只剩 k−1 次。于是每取一次差,次数就降一。
降到零次之后就不再变。降到零次时是一个常数;常数的差是零,可那时常数已经取到,不必再往下取。所以 k 次多项式,k 阶差分是常数,k+1 阶差分全是零。
那个常数是多少,也能算。最高次项 aknk 取 k 次差分,得到 k!·ak;低次项取 k 次差分全变成零。对 n3,k=3,a=1,常数就是 3!=6,与上一页数出来的五个六对得上。
这条性质给了一个算法。要算一个 k 次多项式的值,只需在机器里存 k+1 个数:某一列的原值,以及各阶差分在该列上的值。此后每输出一项,做 k 次加法。对三次多项式,四个寄存器,三次加法,仅此而已。
加法为什么可靠,也值得说一句。齿轮的进位是纯机械的:齿一转一格,到了十就把下一轮推一格。它不会疲劳,不会算错,也不会因为算了三个小时而心烦。人算数出错,多半不在算,在抄与校对;机器把抄与校这两件事一并取消了。
于是差分机的设计目标可以写成一句话。找一批「能由多项式逼近」的数表,把它们的差分常数算好,装进机器,然后摇柄。平方表、立方表、对数表、三角函数表都属这一类——只要把区间切得够细,每段都能用多项式贴住。
但它有一条硬边界。机器存的是常数,输出的是加法链。它不能自己判断「这一段该用哪组常数」,也不能在算到某处时改变方法。这些决定要人在装机器之前全部做完,做错一处,整台机器就整批地错下去。
哪些表能摇出来,哪些不能,界线很清楚。能摇的是「在一个区间上被多项式贴住」的函数。多项式次数越高,贴得越紧,需要的寄存器越多。差分机的规格就是这样定的:六阶差分、二十位数字,意味着它能贴住六次多项式,误差控制在最后几位。
拿平方表试一遍最小的一种。n2 的差是 2n+1,二阶差是常数 2。机器只需存三个数:原值、一阶差、常数 2。每输出一项做两次加法。零到五的平方是 0、1、4、9、16、25;从 16、7、2 起算,16+7+2=25,一步对上。
麻烦出在「分段」上。正弦表要覆盖零到九十度,一个多项式贴不住全程,必须切成很多小段,每段一组常数。段与段之间要接得上——前一段算到最后一位的末值,必须等于后一段的初值,否则表里会出现一个跳点。这件事叫接缝,做表的人最怕它。
还有一处更细的麻烦:误差会累积。每做一次加法,末位的舍入就压进去一点;做几万次,误差就攒成可观的量。差分机对付这件事的办法是加位数:算到二十位,只印前十位,多出来的十位专门用来兜住累积误差。位数不是浪费,是余量。
所以差分机不是「万能计算器」,它是一台专用机的极致。它的全部聪明都在装机器之前:人选公式、定区间、算常数、排寄存器。装好之后它只会做一件事——把加法链走完。它的可靠性正来自这份愚笨:因为不做判断,所以不会判断错。
这条边界在 1834 年被推翻了。巴贝奇意识到:如果把「走哪条加法链」也交给卡片决定,机器就不必只算一种表。这一改,专用机变成了通用机,而通用机要面对的第一个问题是:谁来写那张卡片表。这个问题,1843 年由她来答。
暗线第一笔,落在这个位置上:注脚。
1843 年,那篇译文发表在《泰勒科学文集》第三卷。正文是都灵一位工程师写的分析机概述,法文,二十余页。译文之后跟着七条注解,标号 A 到 G,合起来比正文长得多。她的署名在篇末,只有三个字母:A. A. L.。没有全名,没有头衔,没有「洛夫莱斯伯爵夫人」。
这个位置不是她挑的,是当时的规矩给的。十九世纪的科学期刊里,女性署全名会引来麻烦:读者会先怀疑结论,再读内容。缩写是一种折中——同行知道是谁,路人看不见性别。她选了这条路,也就接受了这个位置:在别人的文章后面,字号小一号。
可位置与分量在这里分了岔。正文讲机器怎么造;注解讲这台机器能做什么、不能做什么、做起来分几步。前者是描述,后者是设计。今天回看,被反复引用的是注解,不是正文。
第一笔要立的,就是这个反差。一份文献里,字最小的那部分,后来成了最重的部分。这不是偶然:注解是唯一允许她把「自己的想法」写下来的地方——译文必须忠实,注解可以自由。她在被允许的缝隙里,写下了不被允许的篇幅。
后面四笔都是这个位置的变化。第一次是她只敢署三个字母(p.17);第二次是她被称作「译者」而不是「作者」(p.24);第三次是后人给她一个她没要过的头衔(p.31);第四次是三个字母被还原成全名,还多了一个比她生年更响的纪念(p.38)。
本册把这一句当暗线的第一笔,是因为后面四笔都从这里出发。位置的卑微与分量的沉重,是同一件事的两面。她一生没有离开过注脚,可注脚最后长成了正文。
父女两人,一辈子只共有一个姓氏。他写诗,写得很响,全欧洲都念;她写注,写得很轻,同时代只有几个人读。他三十六岁死在一场为别人打的仗里,死者成了民族英雄;她三十六岁死在一间卧室里,讣告三行。
可两人的句子有同一个毛病:都把具体的东西说成另一种东西。他写一个人走在美的光影里,把人说成光;她写分析机织出代数图案、正如提花机织出花与叶,把运算说成花纹。这两句话的构造是一样的——都是把陌生的东西挂到熟悉的东西上。
学界对这种相似有过不少议论。有人说她的想象力来自父亲,只是换了对象;也有人说恰恰相反:她的想象力是母亲压制出来的,压得越紧,越要从别处冒出来。两种说法都无从证实,能查到的只有一件:她十岁自己找父亲的诗来读,读得很熟,成年后还能整段背下来。
她给机器造的那个比喻,比诗更好用。因为比喻在这里不只是修辞,是一条设计原则:织机的花样是「可换的纸」,那么运算也可以是「可换的纸」;织机能织无穷种布,因为花样不在机器里,在纸上。这一句推下去,就是通用机。
反过来说也成立。她写注解时用的手法,全是文学训练给的:分段、递进、举例、设问、收束。那七条注解之所以好读,不是因为数学浅,而是因为写得像文章。同期的数学论文大多堆砌符号,她的注解有起承转合。
这一幕交出的底色是这样。一个被禁止读诗的女孩,用诗的构造写了一篇数学注解;而这篇注解里最有名的一句,是一个比喻。第一幕到此为止,第二幕从 1834 年那张改了又改的图纸开始。
下一页,第一幕小结。
一、从一桩婚事起手。1815 年 1 月拜伦与安娜贝拉结婚,一个月后分居;女儿 12 月 10 日出生,母亲以数学与纪律教养,禁读诗,反而使她十岁就熟读父亲的诗(p.3)。她受的是「不许想象」的教育,长出来的却是一个极会想象的人。
二、两台机器。织机的花样在纸上,换纸即换花样;差分机没有花样,公式刻在齿轮里,换公式即换机器(p.4)。1833 年 6 月 5 日,十七岁的她在客厅里看见差分机转动(p.6)。
三、只会加法。n3 的差分表三阶为常数 6,三级相加就能吐出下一项:27、19、12、6 按 12+6、19+18、27+37 的顺序推进,得 64,再得 125(p.7);k 次多项式的 k 阶差分恒为 k!·ak,故只需 k+1 个寄存器(p.8)。机器的可靠性来自它的愚笨:不做判断,所以不会判断错。
四、边界与余量。正弦表要分段、要接缝,误差会累积,故用二十位算、印前十位(p.9)。暗线第一笔落在这里:注脚(p.10)——字最小的部分,后来成了最重的部分。
下一幕,图纸改了一稿又一稿。1834 年之后,机器不再预设公式:运算由卡片指定,存储与作坊分开。通用机的第一道难题随之而来——谁来写那串卡片。
1834 年,巴贝奇改了主意。他原本要造差分机,为的是把数表算准。可他在检查差分机的误差来源时发现:机器的错几乎都出在「人预先算那些常数」这一步。既然机器能算表,为什么不能把常数也交给机器算。这个念头往下推一步,就得到一台不预设公式的机器——他把新设计叫分析机。
分析机的第一个版本画在 1834 到 1836 年之间。此后二十年,这份图纸改了无数稿:存储从一百个数加到一千个,位数从二十位加到四十位,卡片从一种分成三种,进位机构换了三种方案。巴贝奇一生没有把这台机器造出来,可他留下的图纸有几百张,附注有几千条。
1837 年,他写了一篇长文〈论数学机器的数学能力〉。文章没有发表——他找不到愿意刊载的刊物,因为篇幅太长、图太多、读者太少。此文的手稿留在家里,只在朋友之间传阅。她读过这份手稿,而且读得很细。
1840 年,他去都灵。意大利当时正在办科学会议,他被请去讲分析机。听众里有一个人叫梅纳布雷亚,军事工程师出身,后来做过意大利首相。他把讲稿整理成一篇法文论文,1842 年发表在《日内瓦百科文库》。这篇论文就是后来那篇译文。
梅纳布雷亚的文章写得清楚,但它只讲了「机器能做什么」。它没有讲「怎么写」。一台通用机最要紧的部分——指令怎么排、循环怎么编、结果怎么回存——文章里一句也没有。这部分要等一个人来补,而那个人当时正在伦敦郊外的庄园里,一边带孩子,一边读微分方程。
1842 年,她接到一件差事。有人建议她把那篇法文论文译成英文,原因是「英国没人读得懂法文的技术文章,而巴贝奇的机器需要有人替它说话」。她接下了。起初只想写几条脚注解释术语,写到一半,注越写越长。
下一页,先把这台机器的两部分摆开:作坊与仓库。
分析机分两半,功能分得很干净。一半叫存储,是一片竖立的格子墙:一千个格子,每格放一个四十位的十进制数。另一半叫作坊,是运算的地方:加减乘除都在这里做,做完把结果送回存储的某个格子。
这个分法看着平常,其实是关键。差分机没有「存储」这一层:它的寄存器就是运算链本身,数在哪里、下一步去哪里,都由齿轮位置定死。分析机把「放数的地方」与「算数的地方」分开,于是数可以搬来搬去,算的次序可以改。
卡片也分三种,各管一件事。第一种叫运算卡:一张卡指定一次运算,是加、减、乘、除里的哪一种。第二种叫变量卡:指定这一次数从哪个格子取出、结果送回哪个格子。第三种叫顺序卡:管「下一张读哪一张」,回跳与循环全靠它。
三种卡合起来,就是一套完整的指令。运算卡说做什么,变量卡说对谁做,顺序卡说做完去哪。这三样东西,与今天一台计算机的「操作码、地址、跳转」对得上,一一对应,不多不少。
存储的容量值得单说一句。一千个格子,每格四十位,合起来是四万个十进制位。这个容量足够装下一个中等规模问题的全部中间结果——比如一套联立方程的所有系数与消元过程中的每一行。她的注 G 只用了六个格子,因为伯努利数算法本身不需要更多。
作坊里还有一处细节,后来被证明极重要。乘法做出来是双倍位长:两个四十位的数相乘,得八十位。机器把低四十位留下,高四十位另存——这一步叫定标。定标错了,小数点就跑位。十九世纪的数表出错,一半错在定标。
先做第一件事:算一个三次多项式。用上一幕的差分法,四个格子存 27、19、12、6,每输出一项做三次加法:12+6 得 18,19+18 得 37,27+37 得 64。卡片只需要一张运算卡(加)与一张变量卡,重复使用。
再做第二件事:解一个二元一次方程组。取 x 与 y 满足 2x+3y=12 与 4x−y=10。先消元:由第二式得 y=4x−10;代入第一式,2x+3(4x−10)=12,展开得 2x+12x−30=12,即 14x=42,x=3;回代得 y=2。验算:2×3+3×2=12,4×3−2=10,两式都成立。
这两件事用同一台机器做,靠什么分开。靠卡片。第一件事的卡片串只含加法与搬移;第二件事的卡片串含乘法、减法与两次回存。机器一个齿轮也没有改,改的只是那两叠纸。
通用性就落在这里,而且它有一个精确的说法。不是「机器什么都能算」,而是「机器不预设算的是哪一类问题」。它预设的只有四种运算与一批格子;至于这些运算按什么顺序作用于哪些格子,全部在机器之外决定。
这个说法有一个代价,当时就看得出来。通用机比专用机慢。差分机为一种计算设计,齿轮咬得死紧,效率最高;分析机为了「能改」,多出搬移、多出卡片读取、多出定标,每一步都要多花时间。通用性的价格是速度,这个账两百年没有变过。
还有一件事,当时没有人说得清。一台机器如果能把运算次序写在纸上,那么写这张纸的人就不必懂齿轮;反过来,写纸的人要做的事,就变成了「把一个问题拆成四种运算的序列」。这门手艺当时还没有名字。
把一件事写成卡片,要经过三步。第一步拆:把要算的东西拆成加减乘除,拆到不能再拆。第二步排:把这些运算排成次序,注明每一次从哪取数、往哪存数。第三步兜:想清楚算到中途如果出了意外(除数为零、结果超位),该往哪跳。
第一步最难,因为它不只靠算术。拆法有好坏:同一个式子,可以拆成十步,也可以拆成四十步;步数少的那个,不但快,而且错得少——每一步都是一次舍入的机会。选拆法这件事,靠的是对式子的理解,不是对机器的理解。
第二步最琐碎,也最容易出错。格子只有一千个,用了哪些、什么时候可以回收、哪个结果还要留着给后面用,全要记在纸上。她写注 G 时列了一张表,六列:步号、运算、被操作数、操作数、结果存处、说明。七十五行左右,一行一步。
第三步最容易被忽略。除数为零时机器会怎样,巴贝奇的设计里没有明确答案;她的注里提了一句:这类情形要在排卡片时先避开,靠数学上的判断,而不是靠机器自己发现。这句话在某种意义上划下了这台机器的边界——它不会知道自己算错了。
这套手艺与「造机器」是两件事,而且分开得很彻底。造机器要懂齿轮、懂材料、懂加工精度;排卡片要懂式子、懂次序、懂哪里会出错。一个人可以完全不懂齿轮而把卡片排得极好,这是历史上第一次出现这种可能。
梅纳布雷亚的文章缺的正是这一层。他讲了存储、讲了作坊、讲了三类卡片,但没有讲「拿到一个问题之后,第一张卡写什么」。她的注解把这层补上了,而且用了一个完整的例子——不是玩具例子,是把一串伯努利数从零算到第十个。
下一页,先看那串数是什么。
暗线第二笔,落在三个字母上:A. A. L.
这三个字母取自她的三个名字。奥古斯塔是母亲的名字,阿达是她自己的,洛夫莱斯是夫家的姓。三个首字母连起来,读得出是个人名,却读不出是男是女。同期的读者若要猜,只能按当时的惯例往男性那边猜。
与她同时代的女性作者,做法不一样。萨默维尔译《天体力学》时署的是全名;也有人干脆改用男人的名字与人通信。两条路:一条是公开身份、承担质疑;一条是隐藏身份、放弃署名。她选了第三条——半公开:同行知道,公众不知。
这个折中有一个具体的好处,也有一份具体的损失。好处是文章能被认真读,不被「女人算错了」这类话岔开;损失是文章不能被她认领——一八四三年之后很长时间,引用这篇文章的人写的是「一位英国作者」,不是她的名字。
她自己在信里对这层遮掩并不满意。给母亲的信里她写得很直接:这篇文章她要署自己的缩写,因为里面的想法是她的,不是译来的。可她同时又说,若署全名,读者会先看见性别,再看见内容。两句话放在一起,就是那个时代一个女数学家的全部处境。
第二笔要立的,是这个分寸。三个字母既标识又遮蔽:它足够让同行找到她,也足够让公众看不见她。这不是怯懦,也不是机巧,是一个人在给定的窄门里,能挤过去的那个姿势。
第三笔从这道窄门往后走。1844 年她想写第二篇,讲这台机器怎样处理微分方程;这篇没有写完,也没有发表。为什么没有发表,下一笔要处理这件事。
这两人合作了将近二十年,分工却从来没有划清过。巴贝奇管机器:齿轮、进位、材料、加工。她管纸:式子的拆法、卡片的次序、结果往哪存。这条界线看着清楚,实际常常混在一起——她的很多卡片排法,是根据机器的具体限制改出来的;他的一些机构改动,又是为了让某种排法能跑。
「通用性」这个想法该归谁,学界争了一百年。巴贝奇 1834 年的图纸里已经有了通用结构,这一点没有疑问;她 1843 年的注解把这个结构的意义讲得最清楚,这一点也没有疑问。前者是发明,后者是解释,而在科学史上,解释有时候比发明走得远——因为解释决定了后来的人怎么用它。
有一条证据常被引用。1843 年的注解是她独立写的,初稿寄给巴贝奇看过,他回信提了意见,但没有改写。她的手稿上有大量涂改与重排,说明这些段落是她一行一行想出来的,不是抄的。
另一条证据方向相反。她与巴贝奇的通信里,很多技术细节是她问、他答;有些术语她用得不稳,说明她并没有完全掌握机器的机械层面。她懂的是「这台机器在数学上意味着什么」,不是「这台机器怎么造出来」。
两条证据放在一起,得到的是一个更朴素的说法。一个人造了一台造不出来的机器,另一个人为这台不存在的机器写了能跑的方案。前者提供可能,后者提供示范。两份贡献都不是对方能替代的。
这个「示范」的分量,当时没人看得见。因为机器不存在,方案就没有验证的可能;一套没法执行的程序,在十九世纪的人看来近乎空谈。要等到一百年后真的有了机器,人们才发现:原来那套纸上的步骤,是可以照着跑的。
这一幕交出的底色是这样。一台没造出来的机器,一份没人能验的方案,两个人都没有等到结果。第三幕从 1843 年那七条注解的写作过程开始。
一、从改图纸起手。1834 年巴贝奇为了让机器自己算常数,想到不预设公式的结构;此后二十年图纸改了无数稿,机器终未建成(p.13)。1840 年都灵讲稿经梅纳布雷亚整理成文,1842 年发表(p.13)。
二、两半与三种卡。存储一千格、每格四十位;作坊管四种运算;运算卡说做什么,变量卡说对谁做,顺序卡说做完去哪(p.14)。三样东西与后世机器的操作码、地址、转移一一对应。
三、一台机器两件事。算三次多项式只需加法与搬移;解 2x+3y=12、4x−y=10 只需消元得 x=3、y=2(p.15)。机器不动,纸动——通用性的价格是速度。
四、三步写成一张纸。拆式子、排次序、兜意外;注 G 的表七十五行左右,一步一行;除数为零这类事,机器自己发现不了(p.16)。暗线第二笔落在这里:三个字母(p.17)——足够让同行找到她,也足够让公众看不见她。
下一幕,进入那七条注解的正文。1843 年 8 月,文章刊出;四个月里她写下的东西,比译文本身重得多。第三幕从注 A 的第一句开始。
1842 年冬,她开始译那篇法文论文。最初的计划很小:译出来,加几条注解释术语,供英国的工程师看懂。她把这个打算写信告诉了巴贝奇,巴贝奇回信说好,并且寄来一批图纸与笔记。
注越写越不听话。写到第三条时,她发现自己要解释的不是术语,而是「这台机器与别的机器有什么不同」;写到第五条,题目变成了「一台机器怎样执行一整套代数运算」。到 1843 年夏天,七条注合起来已经远长于原文,而她还在改。
这七个月的强度可以从信里看出来。她给巴贝奇写信说,这几个月她几乎不出门,每天从早写到深夜,写到眼睛发痛;她还说,这是她一生中第一次做「真正属于自己的工作」。那年她二十七岁,已经是三个孩子的母亲。
巴贝奇在这段时间里的角色,更像一个材料提供者。他寄图纸,回答问题,纠正她几处对机构的误解;但他没有替她写任何一段。稿子寄去之后,他的回信里有称赞,也有技术上的更正——凡涉及机械的段落,他都指得很细。
1843 年 8 月,文章刊出。篇名照原文译:《分析机概要》。作者一栏是梅纳布雷亚,译注者是三个字母。这一期刊物印数不多,读者更少;当时的评论只有两条,一条说文章「过于艰深」,一条说「机器的事不可信」。
她自己对这篇文章的评价,写在给母亲的信里。她说这篇东西不是翻译,是她自己的作品;译只是外壳,注才是内容。这句话在当时没有引起任何反应——一篇没人读的文章,谁写的不重要。
下一页,先看注 A 立的那条论:机器操作的不是数,是符号。
注 A 开篇立了一条论,这条论是整篇文章的地基。她说:分析机与以往的计算机器有一处根本不同——它操作的不是数,是符号。数只是符号的一种,机器并不「知道」自己在算的是什么。
这句话要拆开看。算术机器(差分机)的齿轮上刻的是数字,一个齿代表一,进位代表十。分析机的格子里装的也可以说是数字,可这些数字代表什么,由排卡片的人决定:它可以代表一个系数,可以代表一个角度,可以代表「某一类对象的个数」。
差别就在这一层抽象上。若机器只认数,它只能算数值;若机器认符号,它就能做代数——合并同类项、代入、消元、求导。这些动作在数上没有意义,在符号上有意义。她举的第一个例子是解方程:机器不知道 x 是什么,可它能照规则把它搬到等号另一边。
这一步推下去,得到一个当时听起来很荒唐的结论。既然机器只认符号之间的关系,那么符号代表的东西可以完全超出一维的数轴:它可以代表两个变量之间的函数、可以代表空间里的一个量、可以代表一张表。这些对象在机器里都只是一串符号,处理方式一样。
她用的词是「组合」而不是「计算」。整篇文章里,她反复用「组合」这个词来描述机器的动作:不是求值,是把符号按规则重新组合。这个用词在今天看是准确的,在 1843 年看是奇怪的——那时候没有人把「算」理解成「组合」。
这条论有一个直接的后果,与后来的「通用计算机」概念吻合。如果机器处理的是符号关系,那么同一台机器既能算数表,也能排版、也能处理文字、也能做逻辑推演——只要这些事情的规则可以写成一串符号操作。她没有把这句话说全,但她把门打开了。
她挑来做例子的那串数,叫伯努利数。这串数出自一个求和问题:把从一到 n 的 k 次方加起来,结果是一个 k+1 次多项式,它的系数里有一组固定的分数。这组分数就是伯努利数,十七世纪末由雅各布·伯努利算出前几个。
前几个可以手算。第一个是一;第二个是负二分之一;第三个是六分之一;第四个是零;第五个是负三十分之一;第六个是零;第七个是四十二分之一;第八个是零;第九个是负三十分之一;第十个是零;第十一个是六十六分之五。
这串数有一个规律:下标是奇数且大于一的,全是零。所以真正要算的只有偶数项。这一点让它在机器上做起来很省——一半的项不必算,直接填零。
怎么算,有一条递推。把前 n −1 个数按二项式系数加权加起来,取负,再除以 n+1,就得到第 n 个。写成式子:Bn=−(1/(n+1))·Σk<n C(n+1, k)·Bk。
拿第三项验一遍。n=2,二项式系数 C(3,0)=1、C(3,1)=3。加权和:1×1+3×(−1/2)=1−1.5=−0.5。取负得 0.5,除以 3 得 1/6。正是六分之一。
再验第五项。n=4,系数 C(5,0)=1、C(5,1)=5、C(5,2)=10、C(5,3)=10。加权和:1+5×(−1/2)+10×(1/6)+10×0=1−2.5+1.6667=0.1667,即六分之一。取负得 −1/6,除以 5 得 −1/30。正是负三十分之一。
选这串数做例子,用意很深。它有三个特点:递推依赖前面所有的项;项数越多,中间结果越复杂;而结果是一串分数,不能有误差。一件事同时具备这三个特点,正好用来展示一台机器「能不能记住、能不能回头、能不能精确」。
注 G 要解决的问题是:把伯努利数一个一个算出来,且不让中间结果挤在一起。递推式里每一项都要用到前面所有项,若把每一步的中间值都留着,格子很快就不够用。
她的解法是「边算边丢」。算第 n 项时,只需保留那一组加权和的一个累加值,加上若干现成的系数;算完一项,把累加值清零,进入下一项。这样不论算到第几项,只占用固定的几个格子。
固定几个,她定的是六个。一号格记当前的项号;二号格记加权和的累加值;三号、四号格存两个中间量;五号格存算出来的系数;六号格存最终结果。六个格子,算到第二十几项也不增加。
于是有了两层循环。外层管「算第几项」,从第二项走到目标项,每走一步项号加一;内层管「这一项的加权和」,把前面各项依次乘上系数、累加,走完清零。内层走完,外层才进一步。她把这个结构叫「循环的循环」。
这个结构有一个必须解决的细节:内层要走多少步,是不固定的——第一项走零步,第二项走一步,第 n 项走 n −1 步。机器的卡片是一张张读过去的,读到哪张由顺序卡决定。所以每一轮内层结束时,程序要把「还剩几步」算出来,再用它控制回跳。
这就是顺序卡的作用。它不只管「下一张」,还能管「往回跳若干张」。往里跳一次,就是内层的一步;跳到外层起点,就是外层的一步。整台机器的全部「智能」,就是这一个动作——按条件往回跳。
把这一页的说法收拢成一句:循环不是「重复做同一件事」,是「让同一串卡片被读第二遍,而读的时候格子里的数已经变了」。前者是机械的重复,后者是计算的重复。这两者的区别,是注 G 真正讲清楚的东西。
暗线第三笔,落在一个身份上:译者,还是作者。
文章刊出时的署名方式,把这个问题摆得很明白。作者是梅纳布雷亚,译注者是三个字母。按当时的体例,译文属于原作者,译者的劳动是「转达」。可这篇文章的七条注,讲的全是原作者没有讲的东西。
她自己对这件事的说法很硬。她写信给母亲说:这不是翻译,这是我的工作;译只是形式,注才是实质。她又说,若把这些注单独抽出来,就是一篇独立的论文——只是没有人会发表一篇署名三个字母的独立论文。
这个判断后来被历史证实了一半。被证实的一半:注确实独立成篇,注 G 单独拿出来就是一份完整的算法说明,今天所有的计算机教科书讲早期程序,引的都是注 G。没被证实的一半:它始终没有被当作「她的论文」来引用——一百年里,引用者写的是「译者注」。
这里有一层更深的困境。她若坚持独立发表,文章可能根本发不出来;她若接受译者身份,文章发得出来,但作者栏不是她。她选了后者,换来了发表,代价是署名。这不是她一个人的处境,是那个时代所有进入学术圈的女性共同的算术。
第三笔要立的,是这个身份的两难。「译者」是一个能让她进门的身份,「作者」是一个会把她挡在门外的身份。她用前一个身份进了门,然后在门里做了后一个身份的事。历史后来承认了后者,但承认的方式很奇怪——不是改署名,而是另给一个头衔。
那个头衔,是第四笔要处理的东西。先看第四幕:1843 年之后,她还想做什么,以及她自己给这台机器划的那条线。
七条注的篇幅极不均匀。前六条合起来讲清了机器的一般性质、结构、例子、重复运算与方程求解;第七条单独讲一件事:怎样用这台机器算一串伯努利数。而第七条的长度,超过前六条之和。
这个不对称有原因,而且不只一个。原因一:伯努利数的算法本身复杂,层层递推,一段一段都要说清。原因二:它是唯一一条「从头到尾完整」的注——从格子的编号、卡片的次序,一直写到第七十五行的结果存处。别的事都只讲原则,这一条讲了全部细节。
还有一个原因更隐微。她需要一个能证明「这台机器真的能跑」的例子。前面六条讲的是「它可以做什么」,只有第七条证明了「它怎么做」。一份没有完整例子的方案,在工程上是不成立的;她不接受这个不成立。
选伯努利数做这个例子,也有讲究。它不是当时的名题,没有现成的表格可抄;它需要循环,需要记性,需要精确的分数;它的每一步都可以被手工验算。这四条加在一起,让它成为最合适的「示范题」——难到能显本事,又简单到能被核查。
不对称的后果,一百年后显出来了。因为注 G 完整,它成了唯一能被「照着跑」的部分;因为能被照着跑,它成了「第一个程序」的证据;因为成了证据,整篇文章才被重新读。假如七条注篇幅均匀,这篇文章大概会和十九世纪其他机器论文一样,安静地烂在合订本里。
这一幕交出的底色是这样。一篇论文的命运,有时不由它的论点决定,由它有没有一个能验算的例子决定。第三幕到此为止,第四幕讲她给这台机器划下的那条线。
下一页,第三幕小结。
一、从一条注解起手。1842 年冬接下翻译,注越写越长,七个月后成文,注比正文长两倍半(p.20)。她在信里说这是「第一次做自己的工作」(p.20)。
二、机器操作的不是数。注 A 立论:格子里的符号代表什么由排卡者定,因此可以做代数、可以处理抽象对象(p.21)。这一步把「计算」变成了「符号的组合」,门从此打开。
三、伯努利数与递推。B2=1/6、B4=−1/30、B6=1/42,奇数项除首项外全为零;由 Bn=−(1/(n+1))ΣC(n+1,k)Bk 逐项算出,实算 n=2 与 n=4 两步验对(p.22)。
四、循环的循环。六个格子,外层管项号、内层管加权和;内层步数逐项递增,靠顺序卡按条件回跳(p.23)。暗线第三笔落在这里:译者还是作者(p.24)——用能进门的身份进门,在门里做另一个身份的事。
下一幕,讲她给机器划的那条线。1843 年之后她还想写第二篇,讲这台机器怎样处理微分方程;这篇没有写完。为什么,第四幕从这里开始。
1844 年,她开始写第二篇。题目比第一篇大:分析机怎样处理微分方程——不是数值解,是符号解。若机器能操作符号,那么对式子求导、把微分方程整理成标准形、逐项积分,这些动作也该能写成卡片。
这篇没有写完。留下的残稿约三十页,分两部分:前一部分讲一阶微分方程的积分因子怎么排卡片;后一部分跳到一件完全不同的事——机器能不能处理「不是数」的对象,比如和声。第二部分只写了几页,笔迹比第一部分潦草。
停笔的原因,从信里能看出几层。一层是身体:从 1844 年起她的健康反复,常有几个月不能伏案。一层是家事:三个孩子、丈夫的庄园、母亲的病。还有一层更难说清:她与巴贝奇的关系在这几年里变冷了。
两人的分歧最后落在一件具体的事上。1840 年代后期,巴贝奇想造一台更简单的机器(他叫它「分析机二号」),并希望她出面替他向政府游说经费。她拒绝了——她认为那台机器削弱了通用性,而通用性正是她那篇文章的全部立论所在。
拒绝的代价是通信变少。1850 年前后,两人的往来已经稀疏。1852 年她病重时,巴贝奇来看过她一次。她死后,他写信给她的丈夫,说她是「那个时代最有思想的数学家之一」,这封信后来被引用了无数次。
那三十页残稿一直留在家里。它没有发表,也没有人整理;直到 1950 年代,研究者才把它从家族档案里翻出来。翻出来之后,人们发现里面有一句极大胆的话:机器或许可以处理任何「其基本关系能被符号表示」的对象。
下一页,先看她给「能算」划的范围有多大。
她的论证分两步,第一步是「任何运算都能拆」。她说:一门运算若能被写成有限个基本步骤,每个步骤都是加减乘除之一,那么它就能被排成卡片。这句话的强度在于「有限」与「基本」两个词——它不要求步骤少,只要求步骤能数清。
第二步是「拆法可以复用」。同一串卡片,只要把格子的编号换掉,就能用在另一个问题上。求一个多项式的值、解一个方程组、把一串级数逐项加起来,这三件事的卡片串不同,但它们用的「搬移—运算—回存」这个骨架相同。
于是有了一条判据,可以写在纸上:凡是可以写成有限步、每步只涉及四种运算、且中间结果可以用有限个格子存下的过程,这台机器都能做。反过来,凡是不满足这三条的,它做不了。
三条限制,各有具体的例子。「有限步」把无穷级数的求和排除在外——机器只能算到某一项为止,剩下的误差要人来估。「四种运算」把开方、对数、三角函数排除在外——这些要用级数展开,展开成有限步之后才行。「有限格子」把大规模的问题排除——一千个格子在当时是很大的容量,但不是无限。
她的例子选得很巧,正好压在这条判据的边界上。伯努利数的计算满足三条:有限步(算到第 n 项)、四种运算、六个格子。而求一个数的平方根不满足第二条,所以她特意说明:先展开成级数,取前若干项,误差由人来定。这一步「由人来定」,是整台机器的边界所在。
这条判据与一百年后「可计算」的定义,有一处根本差别。她的判据是就事论事的:给定一个问题,看它能不能拆开。后世的定义是整体的:先规定一类机器,再问哪些函数这类机器能算。前者靠手艺,后者靠理论。她没有走第二步——那一步要等到 1936 年。
注 G 的末尾有一段话,是整篇文章里被引用得最多的一段。大意是:分析机没有「起头」的能力。凡是它能做的事,都是我们指令它做的;它不能自己生出新的问题,也不能自己发现新的方法。
这句话常被读成一句贬抑,其实是三句不同的话叠在一起。第一句是事实:机器的每一步由卡片决定,卡片之外没有动作。第二句是推论:既然每一步由人定,那么「算什么的决定权」在人手里。第三句是评价:因此机器不会「创造」数学。
三句话的强度不一样,需要分开。第一句无懈可击:按当时的机器设计,确实没有任何一步不由卡片决定。第二句也对:决定权确实在人手里。第三句就有商量余地了——「创造」是什么,当时没有定义,她用的是直觉:人能做机器没被指令过的事。
她自己举了一个例子来说明这条线。她说:机器可以算一条曲线下的面积,方法是把它切成许多窄条相加;可「把它切成窄条」这个念头,机器不会有。这个念头的来源是人对「面积」的理解,不是卡片。
这个例子有一个漏洞,她自己没有堵。若「切成窄条」这件事本身也能写成一条规则——比如「凡遇到面积就切分」——那么机器也能做。真正的界线不在「会不会切」,在「会不会想出一条新规则」。她用的词是「起头」,这个词在当时的英语里带一点神学味道。
界线划在这里,有它的时代背景。十九世纪英国关于「机器会不会取代人」的争论很热,其中最常听见的一句是:机器只能做被规定的事。她这句是这个共识的精致版本,而不是反驳。真正反驳它的人,要等到一百年后。
她做了很多,也有三件明确没有做。第一件:把程序也存在机器里。
在她的方案里,指令在卡片上,数据在格子里。卡片是机器外面的一叠纸,机器读一张走一步;换程序就是换纸。这个安排很自然,因为她是照着织机想的——花样在外面的卡片上。可这也意味着:机器不能自己改写自己的指令。
第二件没有做:用二进制。分析机是十进制的,因为它的用途是印数表,数表是十进制的,中途换进制等于给自己添麻烦。二进制的优越性要等到电路出现才显出来——继电器只有通断两态,二进制正好;齿轮有十态,十进制正好。她的选择在当时是对的。
第三件没有做:给「可计算」下一个一般定义。她的判据是「这个问题能不能拆」;她没有问「所有能被拆的问题,合起来是什么」。前者是工匠的判断,后者是数学家的追问。这个追问要等到 1936 年,由一台假想的纸带机器来回答。
这三件都不是疏漏,是时代的边界。第一件要等存储程序的构想(1945 年之后);第二件要等电子元件;第三件要等数理逻辑成熟。任何一个十九世纪的人都做不出来,包括巴贝奇。
但有一件她做到了,而且做得比后世许多人以为的更深。她把「程序」与「机器」分成了两件事,并且指出:程序的好坏不取决于机器,取决于写程序的人对问题的理解。这句话在一百五十年后仍然是编程这件事的核心,而它第一次被写下来,是在一篇译文的注解里。
下一页,暗线第四笔:那个她没有要过的头衔。
暗线第四笔,落在一个称号上:第一位程序员。
这个称号不是她自封的,也不是同时代人给的。1843 年的刊物上没有这个词,「程序员」这个词本身要到二十世纪四十年代才被造出来。她自称的身份是「译者」,最多说到「注的作者」。
称号是二十世纪后半叶慢慢长出来的。1953 年她的注解被重印,编者在前言里称她为「早期编程的先驱」;1970 年代计算机史研究兴起,这个说法被反复引用;1980 年代以后,它成了定论,写进了教科书、纪念日与程序设计语言的命名。
称号有它的用处,也有它的失真。用处是让一个人被记住——在一段几乎全由男性名字构成的历史里,这个称号提供了一个入口。失真是把复杂的事压成一个词:她做的不是「写程序」,是「论证一台不存在的机器能做什么」。前者是技术,后者是判断。
更麻烦的一层是:称号把注意力从注解移到了身份上。人们记住了「第一位女性程序员」,却很少有人读注 A 里那段关于符号的论证——而那一段才是她真正的贡献。称号是一枚奖章,奖章会挡住脸。
第四笔要立的,是这个反讽。她一生都在躲「女性数学家」这个身份,只署三个字母;一百年后,她因为「女性」这个身份被重新发现。躲开的东西最后追上了她,只是换了形状——从障碍变成了标签。
第五笔处理这个标签后来的变化。1980 年之后,三个字母被还原成全名,名字被刻在一门编程语言上,刻在一个纪念日上。这些事与她无关,可她的一生因此被重新读了一遍。
1950 年,一篇讨论「机器能不能思考」的文章发表。作者在文中专门列了一节,处理一条反对意见,并且把这条意见记在她的名下——称它「洛夫莱斯夫人的异议」。这条异议的内容,就是注 G 末尾那三句话。
作者的反驳很有意思。他说:这条异议其实在说「机器不能让人吃惊」。可机器已经让人吃惊过——他举的例子是,有人问机器一个问题,机器给出的答案让人一时没看懂,后来才发现是对的。他的结论是:机器能让人吃惊,只是这份吃惊来自人没算到,不是来自机器有主意。
这场交锋的实质,在于「吃惊」这个词。她的原话是「不能起头」,他的改写是「不能让人吃惊」。这两个说法不完全一样:起头是「生出新的规则」,吃惊是「做出人没预料的结果」。后者比前者弱得多,一台按固定规则运行的机器,完全可能做出人没预料的结果。
所以她被「回答」的那一次,其实是被换了一个较弱的主张。她的强主张——机器不能自己生出一条新规则——至今没有被驳倒;他的论证针对的是弱主张,而弱主张确实站不住。这一层错位,在后来的通俗转述里几乎全部丢掉了。
这件事对本册的意义,不在谁对谁错。它说明:一个人写下的句子,会在一百年后被别人按自己的问题重新读一遍;读的时候,句子的强弱会被改写,语境会被剥掉,剩下的是一句方便引用的短语。她的「异议」就是这样变成一句短语的。
这一幕交出的底色是这样。她划的那条线,一百年后被人越过了一次,又被人重新划了回来。第四幕到此为止,第五幕讲 1852 年那个冬天,以及之后一百年的沉默。
下一页,第四幕小结。
一、从一篇残稿起手。1844 年她想写分析机处理微分方程的第二篇,留下三十页;后段忽然转向和声,笔迹潦草,终未完成(p.27)。她与巴贝奇在「要不要削弱通用性」上分道,通信从此变少。
二、能算的范围。凡能写成有限步、每步只涉四种运算、中间结果能装进有限格子的过程,机器都能做(p.28)。开方与对数须先展开成级数,取几项由人定。她的判据是工匠的,后世的定义是理论的。
三、她划的线。机器不能起头,只能做被指令的事;曲线下面积能算,「切成窄条」这个念头机器不会有(p.29)。这条线强在「不能生新规则」,弱在「创造」一词没有定义。
四、三件没做的事。没把程序存进机器、没用二进制、没给「可计算」下一般定义;三件都是时代边界,不是疏漏(p.30)。暗线第四笔落在这里:第一位程序员(p.31)——她躲开身份,一百年后因身份被重新发现。
下一幕,1852 年冬天。她病了很久,最后几个月疼痛难当,靠鸦片酊度日。临终前她把文稿交给了丈夫,嘱咐不要销毁。第五幕从那个冬天开始。
1852 年春天,她开始腹痛。起初当作寻常妇科病症,用鸦片酊止痛;到夏天,疼痛已经不能靠药物压住。那年她三十六岁,三个孩子分别十六岁、十五岁、十三岁。
医生最后诊断为子宫癌。十九世纪的诊断手段只有触诊与问诊,确诊往往已是晚期。她的病程走得很快:夏天还能写信,秋天已经不能伏案,十月之后大部分时间卧床。
卧床期间她做了两件事。第一件是把文稿整理好,交给丈夫,嘱咐他不要销毁,尤其是那些未完成的、看着像废纸的。第二件是修改遗嘱——她把一部分藏书留给巴贝奇,其余留给孩子们。
1852 年 11 月 27 日,她去世。按她的要求,葬礼从简。她被葬在诺丁汉郡哈克诺尔的家族教堂里,墓在父亲一座纪念碑的近旁——那座碑是母亲立的,碑上写着诗人的名字,没有她的。
讣告很短。《绅士杂志》十二月份的那一期,三段话:生年、婚姻、卒日。没有提那篇译文,没有提那七条注解,没有提机器。三段话里,她的身份是「洛夫莱斯伯爵夫人」。
身后留下的东西,被分成两处。文稿与通信留在家族档案里,一放就是一百年;巴贝奇那些图纸留在他自己家里,也一放就是一百年。两批材料之间没有索引,也没有人知道它们该被放在一起看。
下一页,先看她给「做数学」这件事留下的那句形容。
她给自己的行当起过一个名字:诗意的科学。这个词不是修辞上的自谦,是她对「做数学是什么」的判断:数学不只是把已知的东西推到底,还要先看见一个还不存在的东西,然后才去推。
这个判断在她的文章里可以验证。注 A 的第一句话不是定义,是一个比喻:机器织出代数图案。比喻先到,论证后到。她后面的七十五行表格、六个格子、两层循环,全是为了让这个比喻站得住。
比喻在数学里的作用,可以说得更实一点。一个好的比喻能提供三样东西:一个可以搬动的结构(织机→机器)、一组可以借用的词(花样、卡片、经线)、一个可以检验的预期(既然织机能换纸,机器也该能换卡)。这三样都不是装饰。
但比喻也会骗人。织机的花样是死的,卡片编好就不会变;她照这个比喻想下去,就把程序想成了「机器外面的一叠纸」,于是没有想到「程序也可以存在机器里面」。这是她最著名的一个盲点,而盲点的来源正是她最好的那个比喻。
这一层关系值得记住。一个比喻能把人带多远,就能把人挡在哪里。她靠织机看见了通用机,又被织机挡住了存储程序。这不是她的失败,是所有比喻的共同命运。
所以「诗意的科学」这个说法,不能读成「浪漫的数学」。它说的是:先有想象,再有证明;想象负责生成,证明负责筛。她那七条注的分量,正来自两件事都做了——先想出一台机器能织代数,再一步步算出它怎么织。
注 A 里有一句常被引用的话。大意是:分析机可以作出任何复杂程度的、有科学性的乐曲。这句话在当时被当作一句夸张的闲笔,一百年后却成了「计算机能做什么」的最早预言之一。
这句话的逻辑,与前面几页一致。若机器处理的是符号之间的关系,那么音符也是符号:音高是数、时值是数、和声是数之间的关系。只要把这些关系写成规则,机器就能按规则生成音符串。
关键在于「规则」这两个字。她说的不是「机器有灵感」,而是「机器能按和声规则组合音符」。这两件事差别很大:前者要求机器自己判断好不好听,后者只要求它遵守一套可以写下来的约束。
这套约束能写到多细,可以算一算。取一个八度十二个半音,取常用的三和弦(大三、小三、减三、增三)共四类,取四个声部的进行规则(避免平行五度、平行八度、声部超越等),规则条数不多,可以逐条写下来。写下来之后,一段四声部的和声就可以被「生成」——生成的结果合不合人的耳朵,是另一件事。
她 1844 年残稿的第二段,正是往这个方向走的。那几页写得潦草,讨论的是「机器处理非数值对象」的一般问题:若对象之间有确定的关系,机器就能处理;若关系本身要靠听觉、视觉或趣味来判断,机器就不能。她把界线划在「关系能不能写下来」这一处。
这条界线,今天仍然管用。凡是能被写成规则的艺术形式,机器都能生成;凡是规则写不下来的部分,机器就只能模仿。这个说法不新,可它第一次被写下来,是在一台不存在的机器的说明书里。
一篇文章被忘掉一百年,通常有三个原因。第一个:它讲的东西不存在。1843 年的读者翻开这篇文章,看到的是一台机器的说明书,而这台机器从来没有造出来。没有实物可以对照,文章就没法被检验,也没法被使用。
第二个原因:它属于一个当时还不存在的学科。十九世纪的数学分科里没有「计算」这一门——算学属于天文、工程、统计的附属工具,不算独立学问。一篇讲「怎样组织计算步骤」的文章,找不到自己的书架。
第三个原因:作者栏里没有名字。三个字母在当时能让人猜到是谁,可一百年后编索引的人不会为三个字母立条目。文献学的规矩是:没有作者,就没有条目;没有条目,就等于不存在。
三个原因叠在一起,结果是一段彻底的沉默。1900 年前后,讲计算史的著作提到巴贝奇时,偶尔会加一句「有一位英国女士曾为他的机器写过注解」。这一句就是全部。她的名字在 1920 年代之后才重新出现在文献里,而且是作为脚注。
转折发生在 1930 至 1950 年代。1930 年代有人整理巴贝奇文稿;1940 年代电子计算机出现,人们开始追问「谁是第一个想到这种机器的人」;1953 年,她的注解被完整重印,附了一篇长导言。这一年距文章发表一百一十年。
重印的时机不是偶然。因为有了真正的计算机,「程序」这件事才成了一个问题;因为成了问题,人们才回头去找最早的答案。一篇文章的价值,往往要等到它能被用上的那天才被承认——这不是它的不幸,是它的命运。
暗线第五笔,落在三个字母的归来上。
1953 年重印本的导言里,编者第一次把三个字母还原成全名。此后二十年,她的名字出现在计算机史的著作里,位置从脚注升到章节标题。1970 年代,她的画像被挂进计算机博物馆;1980 年代,她的生日被定为纪念日。
最大的一次命名发生在 1980 年 12 月 10 日。美国国防部把一门新设计的通用编程语言定名为艾达,标准号特意取作 1815——她的生年。命名的那一天,正是她一百六十五岁生日。这门语言至今仍在航空、铁路、航天的一些系统里使用。
这一笔与前面四笔的关系,要看清。第一笔她躲在注脚里;第二笔她只署三个字母;第三笔她被写作「译者」;第四笔她得到一个没要过的头衔;第五笔,三个字母变成了一门语言的名字。位置一路往上走,可每一层都不是她自己挪的。
这里有一个反讽,是整条暗线的收束。她一生想让人读她的论证,不要看她的性别;最后让她被记住的,恰恰是性别——「第一位女性程序员」。她想要的承认(论证被读懂)来得慢,她没想要的承认(身份被标注)来得快。
不过还有一层,值得说清。1980 年代以后,注解本身也被认真读了:注 A 关于符号的论证、注 G 关于循环的结构,进入了计算机科学的正典。这层承认与「第一位」的头衔无关,靠的是文本本身站得住。
本册到这里收口。三个字母从页脚走到书名,走了一百四十年。这条路不是她走的,是后来的人替她走的;可路上每一块石头,都是她当年亲手放下的。
两个日期放在一起看,会看出一些东西。1852 年 11 月 27 日,她死。1980 年 12 月 10 日,一门语言以她命名。两个日期之间,隔了一百二十八年。
有意思的是后一个日期的选法。12 月 10 日是她的生日,不是忌日。命名者选生日而不选忌日,这是一个态度:纪念一个开始,不纪念一个结束。
更有意思的是标准号。那门语言的标准号是 1815,正是她的生年。这个号不是随机分的——标准号本来可以取任何一个五位数,命名者特意取了这一年。于是一个 1980 年的文件,在编号里藏着 1815 这个年份。
这类纪念有一层风险。纪念会把一个人固定成某个形象:她的形象是「第一位女性程序员」,这个形象清楚、好用、可以印在海报上。可它会把一个复杂的人压扁——她同时是翻译者、注解者、批评者、一个被疾病困住的人。
反过来说,纪念也有它的实效。因为她被纪念,她的文稿被整理、被影印、被逐页校勘;因为文稿被整理,研究者才能发现注 G 的表格有七十五行,注 A 的论证比通行的转述更细。纪念生了研究,研究纠正了纪念。
这一幕交出的底色是这样。一个人死后被怎样记住,与她在世时做了什么是两件事;可后者是前者唯一的原料。第五幕到此为止,后面是年表、动手做与延伸。
下一页,全册小结。
一、从最后几个月起手。1852 年春病发,11 月 27 日卒,年三十六;讣告三段,未及著作;文稿交夫保存,嘱勿销毁(p.34)。
二、诗意的科学。比喻先到,论证后到;织机的比喻带她看见通用机,也把她挡在存储程序之外(p.35)。一个比喻能把人带多远,就能把人挡在哪里。
三、和声与非数值对象。音符是符号,和声是关系;凡能被写成规则的艺术,机器都能生成(p.36)。她划的界线是「关系能不能写下来」。
四、一百年的沉默。机器不存在、学科不存在、作者栏没有名字,三个原因叠在一起(p.37)。1953 年重印,1980 年命名,暗线第五笔收在这里:三个字母回来(p.38)——她想要的承认来得慢,她没想要的承认来得快。
全册一句话收束。1815 年冬天伦敦一个女孩出生,母亲不许她读诗;1833 年她在客厅里看见一组齿轮转动;1843 年她在一篇译文的注脚里写下七十五行步骤;1852 年冬天她死了,讣告三行。一百年后,那三行注脚成了一门语言的名字。
1815 1 月 2 日,拜伦与安娜贝拉在伦敦结婚;12 月 10 日,女儿奥古斯塔·阿达出生。
1816 1 月,母亲带她回娘家;4 月,拜伦离英,父女此生未再见。
1824 4 月 19 日,拜伦卒于希腊迈索隆吉翁。
1828 患病,下肢不能行走,卧床近一年,其间大量读书。
1830 前后从德摩根学数学,通信持续多年。
1833 6 月 5 日,经萨默维尔引荐,在巴贝奇宅中见差分机演示。
1835 7 月 8 日,嫁威廉·金。
1836—1839 长子、长女、次子先后出生;1838 年其夫袭伯爵位,她为洛夫莱斯伯爵夫人。
1840 9 月,巴贝奇赴都灵讲分析机。
1842 10 月,梅纳布雷亚的概述载《日内瓦百科文库》;同年冬,她着手翻译。
1843 8 月,〈分析机概要〉刊于《泰勒科学文集》,附注 A—G,署名 A. A. L.
1844 写〈再论分析机〉,约三十页,论微分方程与和声,未完成。
1852 春病发,11 月 27 日卒于伦敦,年三十六,葬哈克诺尔。
1953 〈分析机概要〉全文与注解重印,附长导言,现代研究由此起。
1980 12 月 10 日,艾达语言定名,标准号 1815。
第一幕:一台只会加的机器。1815 年的一桩婚事,一个被禁止读诗的女孩,一个教会她「符号可以搬动」的老师;1833 年客厅里的一组齿轮;差分表的秘密——三次多项式减三次成常数,机器只做加法就能吐出一张表(p.3—p.12)。机器的可靠性来自它的愚笨。
第二幕:作坊与仓库。1834 年之后,机器不再预设公式:一千个格子存数,一个作坊算数,三种卡片分别管运算、管地址、管次序(p.13—p.19)。通用性的价格是速度,写卡片的成本从机器转到了人。
第三幕:七条注解。她译那篇文章,注越写越长;注 A 立下「机器操作符号而不是数」的论;注 G 用六个格子、两层循环,把伯努利数逐个算出来(p.20—p.26)。她用一个能验算的例子,证明了这台不存在的机器真的能跑。
第四幕:她划的线。她论证了「能算」的范围,也划下「不能起头」的界线;她没把程序存进机器、没用二进制、没给可计算下定义(p.27—p.33)。她躲开身份,一百年后却因身份被重新发现。
第五幕:三个字母回来。1852 年冬天她死去,讣告三段;一百年后注解重印,再一百年后一门语言取她的名字与生年(p.34—p.40)。她想要的承认来得慢,她没想要的承认来得快。
一句话是这样:她把一台不存在的机器,写成了一台能跑的机器。
这句话里三个词都要紧。「不存在」:巴贝奇一生没有造出分析机,图纸改了二十年,政府撤了资,机器止于纸面。「写成」:她做的不是设计机构,是写清一件事要分几步、每步用哪个格子、结果往哪放。「能跑」:注 G 的七十五行,可以被一个懂得算术的人拿纸笔一步步核对。
这三个词合起来,就是「程序」这件事的第一次完整出现。在 1843 年之前,计算是「一个结果」;在 1843 年之后,计算是「一串步骤」。这个转变不是机器带来的,是文章带来的。
暗线的一句话接着这句:她一生在别人的文章后面写字,最后那行小字比文章长。
两条线在同一个地方交汇:位置与分量。注脚是文献里最低的位置,可注脚也是唯一能自由说话的地方。她把自由用到了极致——七条注,两倍半于原文,其中一条成了正典。
本册的分量,不在「第一位」这三个字上。那三个字是后人给的,好用但失真。真正的分量在一件更朴素的事上:一个人在没有机器、没有同行、没有学位、没有署名的情况下,把一个问题想到了底,并且写下来了。写下来的东西等了一百一十年才等到能读它的人。
准备:四张小纸片,一支笔。四张纸上分别写:27、19、12、6。
第一次:把第三张(12)加上第四张(6),写在第四张背面,得 18;把第二张(19)加上新的第三张(18),得 37;把第一张(27)加上新的第二张(37),得 64。第一张现在是 64,这就是四的立方。
第二次:第三张 18+6=24;第二张 37+24=61;第一张 64+61=125。五的立方。
第三次:24+6=30;61+30=91;125+91=216。六的立方。
第四次:30+6=36;91+36=127;216+127=343。七的立方。
对照:八的立方是 512。按同样的三步,36+6=42;127+42=169;343+169=512。每一步只用加法,一次乘法也没用。
再试一次:如果把第四张的 6 改成 2,这套加法会算出什么。第三张 12+2=14;第二张 19+14=33;第一张 27+33=60。六十不是任何整数的立方——因为 6 是三阶差分,改成 2 就等于换了一个多项式。差分常数一改,整串结果全改,这就是「机器装错常数就整批错」的意思。
工具:只用加、减、乘、除,与一张二项式系数表。系数表前三行:1;1 1;1 2 1;1 3 3 1;1 4 6 4 1;1 5 10 10 5 1;1 6 15 20 15 6 1;1 7 21 35 35 21 7 1。
第一项:B0=1,B1=−1/2。这两项是起点,不必算。
算 B2:用 1 3 3 1 那一行。1×1+3×(−1/2)=1−1.5=−0.5;取负得 0.5;除以 3 得 1/6。
算 B3:用 1 4 6 4 1 那一行。1×1+4×(−1/2)+6×(1/6)=1−2+1=0;取负仍是 0;除以 4 得 0。奇数项从这一项起全是零。
算 B4:用 1 5 10 10 5 1 那一行。1×1+5×(−1/2)+10×(1/6)+10×0=1−2.5+1.6667=0.1667;取负得 −1/6;除以 5 得 −1/30。
算 B6:用 1 7 21 35 35 21 7 1 那一行。1−3.5+3.5+0−1.1667+0=−1/6;取负得 1/6;除以 7 得 1/42。
核对:1、−1/2、1/6、0、−1/30、0、1/42。与 p.22 列出的前七个一致。整件事只用四则运算,没有一步需要「灵感」;难点在记性——每算一项,都要把前面所有的项重新取出来加权。
第一件:一段程序为什么是对的。注 G 的表可以照着算,可「照着算一定对」这件事,她只能靠手算核对。一九六〇年代以后有了「程序正确性证明」这门学问:用逻辑把「程序做什么」写成一个断言,再证明它满足断言。这条路走了一半——真正大的程序,至今仍主要靠测试,不靠证明。
第二件:机器能不能发现新的证明。她划的线是「不能起头」。一九七六年,一台机器给出了一个当时没人想到的证明(四色问题的计算机辅助证明);此后「机器辅助证明」成了一门正经学问,可「机器自己提出猜想」仍属争论。她那条线今天仍在被试探,没有被彻底越过。
第三件:「通用」的边界在哪里。她的通用性指「不预设问题类别」。可有些问题,任何通用机器都算不完——这一点 1936 年以后才知道。于是「通用」有了两层意思:机器层面通用(什么程序都能跑),问题层面通用(什么问题都能算)。前者成立,后者不成立。这个区别,是她那个年代无法想象的。
三件事有一个共同点。它们都在问同一个问题:人把多少东西交给了纸。她把「怎么算」交给了纸,把「算什么」留在手里。后来的一百八十年,这两者的界线一直在移动,但没有消失。
七到九岁:只读故事层。讲三件事就够:一个女孩不许读诗却偷偷读;她在客厅里看见一台会转的机器;她后来给这台机器写了一份「怎么用」的说明。翻到 p.7 时,可以拿四张纸片玩一遍加法链,孩子会立刻明白「机器只会加」是什么意思。
十到十二岁:加数学层的 p.7、p.8、p.22。重点是「差分」这个想法:同一件事,换一种记法,难的就变简单了。可以让孩子自己算 n2 的差分表,看二阶差是不是全是 2;再算 n3,看三阶差是不是全是 6。这一步做完,p.8 的证明就不难了。
十三岁以上:可以读 p.21 与 p.29。p.21 讲「机器操作的是符号,不是数」,这是全册最有思想的一页;p.29 讲「机器不能起头」,这是全册最容易被误读的一页。读这两页时不妨争一争:今天手机上的翻译、下棋的程序,算不算「起头」。
关于暗线:不必点破。孩子读到 p.10 会隐约觉得「注脚」这个词有点特别,读到 p.31 会不满「为什么给她一个她没要过的称号」。这份不满就是暗线起作用的证据。家长可以只问一句:她想要的承认,和后人给她的承认,是不是同一件事。
一个提醒:不要把这一册读成「天才少女」的故事。她的数学是跟着德摩根一课一课学出来的,笔记里全是做错的题与反复的问。真正值得注意的是她的耐力:七个月不出门,写到手痛,只为把一件事说清。
误区一:她发明了计算机。不是。分析机是巴贝奇设计的,她做的是为这台机器写方案。她的贡献在「怎么用」,不在「怎么造」。
误区二:她是「第一位程序员」,所以写过真正的程序。「程序员」这个词她那个时代还没有。她写的是纸面上的步骤表,从未在真机器上跑过——因为机器不存在。说她是「第一个把算法写成可执行步骤的人」更准确。
误区三:她说机器永远不会思考,这话被图灵驳倒了。她说的比「不会思考」窄:机器不能自己生出一条新规则。图灵回应的是「机器能否让人惊讶」,那是另一个较弱的主张。两句话不是同一句。
误区四:她的数学是自学的,全靠天赋。她跟德摩根学了好几年,通信里全是习题与疑问;她还读皮科克的代数专论,做了笔记。天赋有,训练也有。
误区五:她是拜伦的女儿,所以天生会想象。这是最省事也最没根据的一种说法。她十岁偷读父亲的诗是真的;但她的比喻能力,更像是被「不许想象」的教育逼出来的——越禁,越要从别处冒。
五个误区的共同点:都把一个人压成一个标签。标签便于记忆,但会挡住细节;而这一册全部的分量,都在细节里。
《数学家的故事》第六辑 第 51 册
洛芙莱斯 · 织代数图案
体例:五幕 · 52 页 · 三层可读(故事/数学/注疏)
插画:40 幅(留白线体)
数值:全册关键数值实算复核
本册为「格物致知」系列数学通识读物之一,面向全龄读者。
故事层无需预备知识;数学层对应高中至大学初年级;注疏层供检索与延伸。
格式 · 格物致知 · JUST FOR FUN