扫码打开虎嗅APP
本文来自微信公众号:程序人生(ID:coder_life),作者:Aholiab,原文标题:《被法拉第夸、狄更斯为她读诗、英王参加她的成人礼,程序员祖师的人生有多传奇?》,头图来自:《程序媛爱达—计算机伯爵夫人》
阿达·拉芙莱斯,一个IT圈里人人都听过的名字。被称为“程序员的开山鼻祖”,但也存在着旷日持久的争议。
探索关于Ada的一切,可能是最困难的事情之一。她的记载充斥着大量真假难辨的史料、艰涩的数学和机械原理、19世纪英国上流社会的习俗、自身复杂的经历,还有“赛过唐顿不让简爱”的维多利亚时期的英语。那么真实的Ada究竟是怎样的?她究竟发明了什么?她到底是女英雄,还是一个被夸大的小人物?
在查考了大量的资料后,我对Ada逐渐有了不一样的认识。本文希望能从这些史料中抽丝剥茧,尽可能的还原真实的阿达·拉芙莱斯。
一、诗人拜伦的独生女
1815年,“阿达·拜伦”出生在伦敦的一个贵族家庭。她的父亲“乔治·拜伦勋爵”是19世纪英国浪漫主义诗坛的天王巨星,母亲安娜贝拉·米尔班克则是一位拥有男爵头衔的典型的贵族女性。
可能是拜伦的性格太过叛逆和纯粹,安娜贝拉跟他只结婚一年,就带着只有5周大的Ada搬到了乡下的一个庄园里。
拜伦的狂野不羁给安娜贝拉留下了阴影,因此她从小就让女儿Ada接受全方位的理科教育:数学、化学、地理、语言、缝纫。而Ada也从小就对科学感兴趣,11岁时,她在研究了鸟类的解剖结构和飞行动力学后,还构思了一个给马装上翅膀并用蒸汽来驱动的计划。
Ada的少年时期与其他上流社会的小孩没有什么不同,11岁游历欧洲、17岁按照习俗到伦敦参加上流社会的社交活动,并见到了当时的英王“威廉四世”,后来她见过刚刚登基的维多利亚女王。因为是上流社会的一员,Ada从小就接触过不少大名鼎鼎的人物,包括狄更斯、法拉第等,法拉第还夸她是“科学界冉冉升起的新星”。
当然,她还见到了改变了她人生轨迹的奇男子“查尔斯·巴贝奇”。
在一个巴贝奇的家庭派对上,41岁的巴贝奇把17岁的Ada领进了自己的小屋,在那里向她展示了自己的毕生的研究成果——差分机。
二、改变命运的差分机
差分机就是个计算器,要说这个东西确实还有点用。只不过它被造出来的时候已经到了21世纪,电脑都普及了,所以这东西也只能放在博物馆里了。
众所周知,我们有一个计算乘法的武功秘籍叫“九九乘法表”,我们几乎可以用竖式快速计算出任意两个数的乘积。但在欧洲乘法运算可就费劲了,即使是两位数乘两位数的竖式运算对他们来说仍然非常困难,这时候就有人发明了一个叫“对数表”的东西。它通过“对10的对数的加减结果”,来得到两个数之间的乘积。
比如37x59,37等于101.5682,59等于101.7709,1.5682和1.7709就是37和59的对数(写作:log10(37)=1.5682),把这两个“对数”相加得到103.3391,解103.3391等于2183,这就是37x59的结果。
这……不是更复杂了吗?我怎么知道37的对数是几,103.3391又是个什么鬼?你不知道老外就更不知道了,他们其实是把所有数字的“对数”都整理在了一张“对数表”上,计算的时候就去这张表上像查字典一样查一下,再去另一张“逆向表”里查一下等于多少,就得到了答案。
可这个对数表是哪来的呢?要计算出所有数的对数并整理成这张表也不是个小工程。巴贝奇看不惯这种情况,就想发明个机器,既能快速自动算出对数,又能确保准确性,所以构想了差分机。
简单来说,这个差分机的原理是,通过加减法把对数运算分解为几个步骤,然后自动生成“对数表”。它可以对任意数字的“对数”进行展开,还可以自动打印结果。
但这东西的设想过于精巧,在当时本没人能造得出来,在花了英国政府17500英镑之后(约合今天200万磅),只做出了一个简单的原型,也就是在派对上给Ada看的那个。
直到2002年,差分机才按照巴贝奇的设计被完整地复原了出来,有整整一面墙那么大,几千个零件。最牛掰的是,这东西居然真的可以工作!
三、重拾数学
在第一次见到了巴贝奇和差分机之后,Ada便对这种机器格外着迷。但在她开挂之前,她先是回家过了几年平淡的家庭生活。1835年19岁的Ada嫁给了30岁的威廉,并先后生了三个孩子,Ada一生与丈夫的感情都非常稳定,丈夫也在她的事业上给了她不少的支持。1838年威廉受封为伯爵,从此“阿达·拜伦”正式成为了“阿达·拉芙莱丝”伯爵夫人。
这一时期Ada把大部分的精力都放在了家庭上,过着骑马、弹竖琴、喝咖啡的名媛生活。
直到1839年,Ada决心重拾数学,并且请了个大牛来当家教,这个人就是德·摩根。在跟德·摩根的学习中,Ada第一次知道了微积分,同时她还对离散数学非常感兴趣。她对自己的数学能力非常自信。
Ada的微积分学习笔记
四、第一段计算机程序诞生
虽说Ada迷茫,有个人比她还迷茫,就是巴贝奇。自己发明的东西造不出来,预算又赶上政府换届,被新政府给断了,自己还贴了不少钱。眼瞅着从老爸那继承的10万英镑(相当于今天的1400万美元)也嚯嚯得差不多了,巴贝奇又着急又上火。
这个时候的巴贝奇简直到了谷底。不过人生就像巧克力,大力就会出奇迹。巴贝奇再次灵光一闪,在差分机的基础上构思除了一个更具有普适计算意义的机器——分析机。
如果说差分机是个“计算器”,那么分析机就终于有点“计算机”的意思了。
项目有了,下一步就要找投资。英国政府肯定是不会再给钱了,所以他干脆带着PPT、拿着自己印了6行title的名片去了意大利,找到了意大利数学家“梅纳布雷亚”。“梅纳布雷亚”当时就被分析机的这个想法给震惊了,当场表示这个项目我投了!不过不是资本投资,而是技术投资。他用法语写了一份很详尽的分析机运作原理的论文来帮助科普。
巴贝奇的6行title
女主Ada看到这篇论文后兴奋异常,于是决定把这篇法语的论文翻译成英语,让更多的人看到。在翻译的过程中,她开了挂,加了很多注解,结果注解的内容越来越多甚至超过了正文;她还加了很多连巴贝奇自己都没想到的示例来演示分析机的功能。
结果写着写着,就写出了世界上第一段计算机程序!
Ada的第一段程序(伯努利数推导程序)——NoteD
五、对普世计算的预言
分析机是世界上第一台“可编程的机械通用计算机”,当然那个时候编程语言还没发明,巴贝奇就用打孔纸来控制机器的操作,而打孔纸早就用在了提花机上。
分析机通过打孔卡输入,变量卡定义数值的位置,打印机输入结果。此外,分析机还有一个存储系统和运算单元,存储系统可以存储1000个40位的十进制数(约合今天的16.2KB);运算单元则可以进行加减乘除、比较和平方根的运算。
最初,包括巴贝奇在内的所有人都认为这个分析机只是个更高级的计算工具,但这个时候Ada却看到了完全不同的可能,这不仅是个数学运算工具,任何有规律的事物,都可以数字化然后用它来进行计算,把人从基础的工作中解放出来,这不就是今天的计算机吗?!
Ada在两百年前从一篇基础的论文中,连一个原型都没有,就准确预言了200年后的世界。
六、伯努利数推导程序
Ada最大的成就,是用分析机推导伯努利数,她认为这是个很好的展现分析机特性的例子。伯努利数是一个计算“幂次和”的有理数数组:
Ada用表格的方式设计出了一个推导伯努利数的程序,这个程序包含25个步骤和一个循环。国外有大牛把她的这段程序翻译成了C语言和Python。
再说个好玩的,话说为啥今天的程序员总逃不过写bug的命运?因为Ada写的这第一段代码中就有3个bug,分别在第4行、第23行和第25行。第4行的bug是分子分母写反了,剩下的两个bug有兴趣的同学可以自己找一下。看来程序员被bug支配的恐惧,是被祖师爷写进命运里的啊。
七、Ada真实的成就
最后再说说Ada的成就是否被夸大了?从学术的角度看的确如此,她的理论是建立在巴贝奇的发明之上的,她从来没有发表过自己的独立论述,甚至连“第一段代码”也不是真正意义上的第一段,巴贝奇自己就写过好几段。
但她是第一个提出通用计算理念的人,她的代码也是最接近今天编程内核的,只有她的代码包含了循环。20世纪初,在被阿兰图灵多次提到后,Ada、巴贝奇和他们的工作才再次重现。
很多人猜测,如果Ada拥有的正常的寿命,计算机是否会提前一个世纪被发明出来?答案可能是否定的。虽然当时电已经被发明,但用电线来传输信息会导致大量的丢失,且稳定性也很差;另外,二进制在当时也并不为人所重视。
但不可否认的是,如果Ada没有英年早逝,她很可能会成为科学界的领袖之一,领导科学家探索这个世界;就如同她的父亲领导着希腊大军,为自由而战。
本文来自微信公众号:程序人生(ID:coder_life),作者:Aholiab