她,诗人拜伦之女,英国数学家,历史上第一位程序员机器学习算法与Python实战共 6256字,需浏览 13分钟 ·2020-11-15 02:48 ↑↑↑点击上方蓝字,回复资料,10个G的惊喜大数据文摘投稿作品 摘自:《信息论》 作者:吴军 人类使用机械处理信息的尝试是由两个看似不该有交集的英国人开启的。 在英格兰中部莱斯特郡的柯比—马洛里庄园,住着一对母女。 1816年初那个多雨的季节,23岁的安妮·伊莎贝拉·米尔班克(昵称安妮贝拉)和丈夫分手,带着刚刚出生的女儿埃达回到了娘家。在开始的几个月里,她依然思念着丈夫,写了很多充满爱意的信件,并且她的母亲也希望女婿来庄园和女儿团聚,但是信寄出去后都如石沉大海。安妮贝拉一生追求自由的丈夫已经踏上了去欧洲大陆的旅程。家里的律师建议,他们还是离婚算了,安妮贝拉接受了律师的建议,从此她一个人抚养女儿长大。埃达从小就是一个天才,学什么东西都很快,安妮贝拉对此感到非常欣慰。但是埃达总在询问爸爸在哪里,这让安妮贝拉无法回答,她一直没有向女儿透露父亲的任何信息。 转眼8年过去了,一条让整个英国都感到悲伤的噩耗传来,也让安妮贝拉不得不告诉女儿父亲的故事。被誉为英国骄傲的大诗人拜伦在希腊病逝,而他正是女孩埃达的父亲。今天没有人知道 8 岁的埃达在得知她的身世之后是一种什么感觉,但是这个出身非同一般的女子,注定要过一种非同常人的生活,而且要做一番常人不敢想的事情。 世界上第一位程序员 埃达的故事要从她的父母讲起。诗人拜伦自不消说,他是整个18 世纪和 19 世纪英国最伟大的诗人。他的代表作《唐璜》是史诗般的巨著,在英语诗歌中的地位,堪比《神曲》在意大利语、《浮士德》在德语中的地位。1815 年,27 岁的拜伦和 22 岁的安妮贝拉小姐结婚,并且很快生下了埃达。埃达·洛夫莱斯(Augusta Ada King, Countess of Lovelace) 安妮贝拉在埃达很小的时候就教她数学,这在当时英国上流社会的女子教育中是非常罕见的,而阿埃无论学什么数学知识几乎都是一学就会。同时,阿埃继承了父亲的想象力。12 岁的时候,她就对飞行器着迷,那时凯利爵士还没有试飞他的载人滑翔机。为了研究飞行,她对鸟类的身体构造产生了兴趣,但又不忍心解剖鸟类,便让母亲找来了一本鸟类解剖图解。在埃达的一生中,她一直保持着对数学和自然科学的极大热情。 1833年,18岁的埃达正式进入英国上流的社交圈。改变了埃达一生命运的则是在一次沙龙上她见到了发明差分机的科学家巴贝奇,并且见到了被她母亲称为“能思考的机器”的差分机。 埃达比大部分大学毕业生(当时只有男性可以上大学)都有着更高的数学和机械修养。当大家还只是惊讶于这种机械能够算题时,埃达已经琢磨出了它大致的原理,并且对此着了迷。她后来给朋友写信讲,那是所有机械中的珍宝,并且流露出对那台机器的渴望。 巴贝奇的科学家气质也吸引着年轻的埃达。巴贝奇当时41岁, 举止沉稳,轮廓分明的脸上散发出机智和魅力。埃达希望借助一个高智商的头脑,来实现当时女性在科学上难以实现的梦想,而眼前这位男子,以及他所从事的事业,正是指引她在黑暗中前行的明灯。 此时的巴贝奇,已经在计算机研究领域花了近20年的时间。前十年他是成功的,但是接下来的十年他遇到了瓶颈,而他的想法则又远远超出了当时他正在研制的那台机器。长期以来,他都是在孤军奋战,他需要一个高智商的助手。让他没有想到的是,这位顶着英国最有名的姓氏,后来成为洛夫莱斯伯爵夫人的年轻女子,就是他寻找多年的合作者。 从那一刻起,两个人一同开始了在信息发展史上伟大而悲壮的“奥德赛”。 巴贝奇发明小型差分计算机1792 年,巴贝奇出生于伦敦一个富有的银行家家庭,18 岁进入著名的剑桥大学三一学院,成为牛顿的校友。后来他担任了牛顿曾经 担任的卢卡斯数学教授a 职务。在进入大学之前,他就显示出了极高的数学天分。进入大学后,巴贝奇发现,当时英国人普遍接受的牛顿建立在运动基础之上的微积分,不如莱布尼茨基于符号处理的微积分便于理解传播。为了推广已经被欧洲大陆普遍接受的莱布尼茨的微积分,他和其他人一同创办了英国的(数学)分析学会。不过巴贝奇并不是一个安分的学生,他一方面显示出超凡的智力,另一方面又不按照要求完成学业,为此他不得不转了一个学院继续学业。在学校里, 他还对很多超自然的现象感兴趣。 如果不是赶上工业革命,巴贝奇或许会寻找某一个传统的数学领域或者自然哲学领域做一辈子研究,并且留下一个巴贝奇定律或者巴贝奇定理。但是,工业革命的大背景让他把毕生的精力和全部的金钱都投入研究能够处理信息的机械中。这也不奇怪,因为工业革命为信息处理提供了思想上的依据、技术上的条件和广阔的市场。 既然能想到的所有规律都可以用运动规律来描述,那么就很容易想到让具有特殊结构的齿轮组运动来完成计算,这便是设计机械计算机的思想基础。这种想法早在 17 世纪就有人尝试过。法国数学家帕斯卡发明了一种手摇计算器——虽然有时人们将它称为最早的机械计算机,但实际上它和我们今天理解的计算机概念没有太多的相似之处,称之为计算器更恰当。帕斯卡计算器从外观上看有上下两排旋钮,每个旋钮上都刻着 0~9 十个数字。在做加减法时,只要将参加运算的两个数字分别拨到相应的位置,然后转动手柄,计算器里的一组组齿轮就会转动,完成计算。 早期帕斯卡计算器 帕斯卡计算器最初只能做加法,后来经过改进可以做减法和乘法,但做不了除法。在帕斯卡之后,莱布尼茨改进了计算器。他发明了一种以他的名字命名的转轮(莱布尼茨轮),方便实现四则运算中的进位和借位。到了 19 世纪初,经过近两个世纪的改进,机械计算器已经能够完成四则运算,但是计算的速度很慢,精度也不够高,而且设备造价昂贵。不过,这种计算器更大的缺陷在于,那些复杂的运算,比如对数运算和三角函数运算都做不了。 莱布尼茨计算器 19世纪机械工业的发展需要进行大量的复杂计算,比如三角函数的计算、指数和对数的计算等。在微积分出现之前,完成这些函数的计算几乎不可能。18 世纪之后,欧洲数学家使用微积分,找到了很多计算上述函数的近似方法。不过这些方法的计算量极大,需要很长的时间,而且当时除了数学家,一般人是完成不了那些计算的。为了便于工程师在工程中和设计时完成各种计算,数学家设计了数学用 表,这样工程师可以从用表中直接查出计算的结果。 不过,那个时代的数学用表错误百出,给生产和科学研究带来了很多麻烦。而这个问题很难避免,因为手算很难保证完全不出错。如果很多数学家分别独立计算,还可以比对结果发现错误。但是巴贝奇发现,那些不同版本的数学用表都是抄来抄去的,而犯的错也都是一样的。因此,巴贝奇就想设计一种机械,能够完成微积分的计算,然后用它来计算各种函数值,得到一份可靠的数学用表。当时他只有22 岁。 在随后的 10 年里,巴贝奇造出来一台有 6 位精度(巴贝奇最初的目标是达到8 位精度)的小型差分计算机a。随后巴贝奇用它算出了好几种函数表,用于解决航海、机械和天文方面的计算问题。值得指出的是,巴贝奇的这次成功受益于工业革命的成就——当时机械加工的精度比瓦特时代已经高出了很多,这让巴贝奇能够加工出各种尺寸独特的齿轮。但是,当时并没有 20 世纪的精密加工技术,制造小批量特制齿轮和机械部件的成本高、难度大,这给巴贝奇后来的工作带来了诸多不便。 不过,首次成功还是让巴贝奇获得了英国政府的资助,用以建造一台精度高达 20 位的计算机。几年后,他又获得了剑桥大学卢卡斯数学教授的职位,这让他有了稳定的收入。在此之前,他一直在花自己继承的 10 万英镑的遗产。胜利女神似乎正在向他招手,但是在接下来的时间里,他在计算机研究方面一筹莫展。 从表面上看,巴贝奇遇到的困难是因为那台差分机太复杂了,里面有包括上万个齿轮的2.5 万个零件,当时的加工水平根本无法制造。但更本质的原因是,巴贝奇并不真正理解计算的原理。他不懂得对于复杂的计算来讲,不是要把机器做得更复杂,而是要用简单的计算单元来实现复杂的计算。当然,在那个年代没有人了解这些。作为现代计算机基础理论的布尔代数要再等十几年才被提出来,而且要再过近一个世纪才会被应用到计算技术中。 用卡片记录指令和思想 在支持了巴贝奇 10 年之后,英国政府对那个永远造不出来的机器已经失去了兴趣,只好为已投入的 1.7 万英镑经费自认倒霉。而知识界对此也普遍不看好,认为那台机器就算造出来也不会有什么作用。 巴贝奇从来就不是一个会轻易放弃梦想的人。在失去政府的资助后,巴贝奇仍在继续工作,而且有了一个更庞大的计划——制造一台能够完成一系列计算而不是单一计算,甚至具有存储功能的机器,巴贝奇称它为分析机。他的这一灵感来自法国人约瑟夫·马里耶·雅卡 尔(Joseph Marie Jacquard)在 1804 年发明的雅卡尔提花机。在发明提花纺织机之前,要想织出漂亮的布匹,就需要工匠站在纺织机后面用手控制各种颜色的丝线。雅卡尔发明了一种用打孔卡片控制的纺织机,纺织机可以根据预先设置好的“程序”(虽然当时还没有“程序”这个概念)移动丝线,织出漂亮的布匹。雅卡尔并不知道他的这项发明在信息史上具有重大意义。因为这是第一次把信息通过一个机器能够识别的载体记录下来,再由这个信息来控制机器的运转。多年以后,IBM 公司发明了用于统计的制表机,其原理其实和雅卡尔提花机差不多。 巴贝奇在见到雅卡尔提花机后,马上就想到了计算也可以由记录在卡片上的信息控制。这样一来,计算机不仅能完成 3+5 这样的数值运算,而且能够完成 X+Y 这样变量之间的运算,而变量 X 和 Y 的值,既可以由卡片输入进去,也可以是前一次运算的结果。这其实就是最原始的程序和循环的概念。不仅如此,巴贝奇想象的计算机还应该具有逻辑判断的功能,比如一个变量是否大于 3,然后根据判断的结果,决定走哪条路径继续计算。这其实就是今天计算机程序设计中分支的概念。由于当时没有现成的词语描述他的想法,所以他的手稿今天读起来非常难以理解。比如他用“货仓”(store)表示存储单元,用“作坊”(mill)表示计算单元。但是在这些别扭用词的背后,却闪烁着超越时代的思想光辉。按照巴贝奇的设想,在这台机器中,数据是流动的,它们从卡片中流入“作坊”进行计算,然后再流入“货仓”。这其实就是今天我们所说的数据流或者信息流的概念。 埃达的加入让巴贝奇终于有了一个可以对话和讨论问题的人。她很快从一个助手变为一个思想的来源,并且为他们将要建造的这台机器赋予了无限的想象空间。这种身份的转变,在很大程度上要归功于埃达写的一份报告。 1840 年,在失去英国政府的支持后,巴贝奇和埃达开始寻求欧洲其他国家的支持,毕竟实现如此庞大的计划实在是太花钱了。巴贝奇把目光投向了意大利。对这个曾经出现了数学家阿基米德的国度,巴贝奇充满了希望。当时意大利负责制定国家科学报告的路易吉·梅纳布雷亚(Luigi Menabrea)在看了巴贝奇的设计图纸后兴奋不已,想将它变成一份类似于“欧洲分析机报告”的建议书,推荐给欧洲学术界。巴贝奇并不懂意大利语,这份报告的翻译工作就由埃达来完成。埃达在翻译这份报告时加入了很多自己的想法,这些想法实际上比报告本身的内容更有价值。b 或许是埃达觉得自己的想法还不够成熟,或许是其他原因,三年后她才将自己翻译的报告连同她加进去的几倍长的内容拿给巴贝奇看,巴贝奇兴奋不已。 埃达提出了今天程序设计中循环和递归思想的雏形。当时数学家都在为无穷级数的展开和求和发愁。如果有一种能够实现自动循环计算的机器,那么那些令人烦恼而又枯燥无比的计算将迎刃而解。为了证明这一点,埃达没日没夜地工作,她试图设计一种让机器自动算题的方法,里面包括一些步骤或者流程以及具体的运算。那些流程和运 算结合在一起,其实就是我们今天计算机程序设计的思想。 梅纳布雷亚虽然喜欢巴贝奇的想法,但他当时还只是一个给政府做顾问的普通数学家,不是后来的意大利首相a,因此他无法给予对方直接的支持。这样一来,巴贝奇和埃达还得自己干。他们没有外来的经费,甚至没有助手。这一年巴贝奇已经 51 岁了,而埃达只有 27 岁。不过他们的关系却有点儿像今天创业公司的 CTO(首席技术官)和 CEO(首席执行官)的关系,后者更多地在控制全局。这可能是因为埃达更具想象力,而且更善于把事情讲清楚。埃达有一次不无得意地对巴贝奇讲:“我觉得你的预见性不及我的一半。我不认为我父亲是诗人和我要成为分析师(相当于今天所说的计算机科学家)有什么矛盾之处。” 事实上,埃达正是从她的父亲那里继承了诗人所特有的想象力。比如埃达已经意识到,这个由卡片控制的机器不仅能计算,还能操作(operate)其他东西,比如操控语言、谱写音乐。埃达甚至预测了“计算机科学”会成为一门独立的学科。她认为,“那是一门独立的学科,自有其抽象的真理和价值……独立于我们那些借助逻辑推理进行研究的课题”。今天,如果按照《美国新闻与世界报道》对学科的分类,计算机科学在大学中研究者人数是仅次于生命科学的第二大“科学类”学科,但这是 100 年之后的事情,埃达没有机会看到这一天的到来。 为了制造出这种能够操作其他东西的分析机,埃达不仅投入了后半生全部的精力,甚至变卖了自己的珠宝。但是巴贝奇的分析机始终没有制造成功,甚至离成功还差得很远。不过,埃达的想象力确实超人,她假定能够设计发明出一种操作其他东西的计算机,然后设计了在计算机上能够进行循环计算的流程,这其实就是今天在虚拟机上开发程序的概念。埃达因此被誉为世界上第一位程序员。1981 年,美国国防部开发出了一种新的高级程序语言,并用埃达的名字 ADA 命名,以此纪念这位计算机科学的先驱。 今天我们回过头来看巴贝奇和埃达设计的分析机,它和我们使用的真正的计算机有一些相似之处,即有了硬件和软件之分。在硬件上,它除了有运算单元,还有寄存器;在软件上,除了能做直接的数学运算,还可以根据对数值大小的判断,决定采用不同的计算流程, 并且允许在计算时采用“循环”和迭代的方式分步骤完成。不过这台分析机和巴贝奇的差分机一样,实际上也没有制造完成。 1852 年,身患子宫癌的埃达不幸去世,年仅 37 岁,令人十分惋惜。已经 60 岁的巴贝奇痛失知己和合作者,余生他不得不自己解决所有问题。事实上,在埃达去世前几年,或许是因为看到他们的计划太过宏伟,预感到有生之年没有实现的可能,巴贝奇又回到了最初的想法,制造一台精度极高的差分机,世称巴贝奇差分机二号。直到 1871 年巴贝奇去世,他只完成了这台庞大机器的 1/6。所幸的是,他和埃达留下了 5 万张图纸以及大量的设计文档。100 多年后,人们根据他们的图纸制作了这台差分机,证明当初他们的想法是正确的。但是, 巴贝奇在 1871 年去世时,不仅留下了一堆债务,而且失去了所有荣誉。大家觉得他是一个失败者,甚至是一个骗子。欢迎勾搭老胡↑↑↑自 学 机 器 学 习 十 诫假如特朗普是一门编程语言众所周知,YouTube是个学习网站2020年度最佳的23个的机器学习项目经典教材《统计学习导论》Python版 浏览 19点赞 评论 收藏 分享 手机扫一扫分享分享 举报 评论图片表情视频评价全部评论推荐 她,诗人拜伦之女,英国数学家,历史上第一位程序员大数据文摘0世界第一位计算机程序员竟是女的!拜伦之女传奇一生Cocoa开发者社区0世界第一位计算机程序员竟是女的!拜伦之女传奇一生新智元0「她」力量:致敬世界第一位自由女程序员,「万维网的祖母」Berners-Lee新智元0钱包安全永远是第一位人生代码0历史上的 996公众号程序猿DD0历史上的今天历史上的指定日期发生的大事,包括重大事情、诞辰、逝世等图文详情,不断增加中。网尚科技0数学家们的故事数学算法俱乐部0【数学漫画】数学家死后数学算法俱乐部0【她经济】2020年她趋势报告数据D江湖0点赞 评论 收藏 分享 手机扫一扫分享分享 举报