她写的代码,带人类成功登月
haoteby 2025-05-23 17:15 26 浏览
▼
曾经有这么一位女程序员
本来颜值爆表
完全可以靠脸吃饭
但却选择了码农这一事业
而且干出了一番惊天地泣鬼神的事业
靠一段段代码将人类第一次送上了月球,绝对是才艺双绝、女神中的女神——她就是阿波罗计划的首席软件工程师玛格丽特·汉密尔顿(Margaret Hamilton)。
玛格丽特其实也没想过要将人类送上月球。要知道1960年的社会并不鼓励女性从事高科技行业。她当时24岁,拥有数学学士学位,在MIT获得了一份程序员的工作,原本计划通过这项工作资助她丈夫完成哈佛法学院的三年学习,而之后,将会是她的转折。
阿波罗登月计划恰好就在那个时候启动了。命运使玛格丽特在实验室带领了一次史诗般的工程壮举,这项工程改变了人类和科技的未来。
在1960年代做职场妈妈已经是件很不寻常的事,而玛格丽特竟然还是个给太空飞船写代码的程序员。在周末或者平常的夜晚,玛格丽特会把女儿劳伦带来实验室。在俯瞰查尔斯河的办公室里,四岁的劳伦在地板上熟睡,而玛格丽特忙着编写代码。这些代码,最终都会添加到阿波罗控制舱的计算机里。
玛格丽特回忆说,“他们对我说,你怎么能离得开女儿啊?”。但是她深爱这份工作的神秘和新奇,她也很喜欢同事之间的情谊,下班后他们会在MIT的职员俱乐部一起喝点小酒,讲只有技术宅才能听懂的笑话。旁人听得一头雾水,但在实验室里,她说,“我是兄弟们的一员”。
那时的技术与工程领域也由“兄弟们”主导。跟今天科技圈少有的女码农一样,当时的玛格丽特就像是个不折不扣的异类。现在的软件开发者也该惊讶,这个“男孩俱乐部”的其中一个奠基人竟然是个女人。他们或许也该停下来想一想,这种《广告狂人》时代的性别不平等何以持续至今。
玛格丽特站在阿波罗计算机指导手册(AGC)的源代码程序列表旁边,这些材料摞起来比她的人还要高。图片来源:Margaret Hamilton
玛格丽特的事业发展渐渐上了轨道,而此刻的软件世界由于肯尼迪在1961年发起的阿波罗登月项目也身处巨变的边缘。
玛格丽特就职于MIT的仪器实验室,在那里,她和同事一起为世界上第一部便携式计算机写代码,同时也创造了计算机编程的核心理念。玛格丽特成了系统编程的专家,也在多场重要的技术争论中得到认可。“我最开始研究编程的时候,没人知道我们在干嘛。我们就像身处美国荒凉的大西部,没有这样的课程,也没有任何一个教授教这个”。玛格丽特说。
这个时候离微软的出现还有10年,离马克·安德森(Marc Andreessen,这家伙是世界上最早开发浏览器的人)发现软件正在“吞噬世界”也还有将近50年。在阿波罗计划的早期,人们并没有过多思考软件是怎么一回事。
MIT航天学教授大卫·曼德尔(David Mindell)在《数字阿波罗》(Digital Apollo)一书中写道,那些记录阿波罗计划相关工程要求的文件甚至都没有提到“软件”这个词。“软件并不包括在计划里,因此也不在预算内”。反正一开始,软件并没有受到重视。
但随着阿波罗计划的推进,软件在这个任务中的重要性也明晰起来。1965年,玛格丽特开始负责“阿波罗”号计算机的飞行软件。对玛格丽特而言,这是一段激动人心的日子,整个美国都指望着她的工作成果。
但是有时候压力也会让她夜里睡不着。有一次,在参加过一个深夜派对之后,玛格丽特又冲回实验室去修改一段突然想起来出错了的代码。“我总是在幻想报纸的新闻标题,它们会追问错误是如何发生的,而最终原因会指向我”。
图为1962年4月19日,玛格丽特和她的前同事。玛格丽特当时正在林肯实验室的第一台AN/FSQ-7电脑上研发软件,一个雷达监测软件,用以监测敌机。图片来源:Margaret Hamilton
软件成了美国要赢登月竞赛的重要筹码。在1968年,已经有超过400人参与研发阿波罗号的软件。当然,最终人们发现软件为世界带来的远超于此。当玛格丽特和同事在为阿波罗飞船编程的时候,他们也在孵化这个未来估值4000亿美元的产业。
对玛格丽特来说,编程就像是在一沓穿孔卡片上穿孔,可以整夜整夜分批在一台模仿阿波罗登月工作的霍尼韦尔(Honeywell)大型主机上进行。玛格丽特回忆说,“我们必须在飞船起飞之前模拟各种可能发生的情况”。
一旦代码确定后,就会被送往附近一家雷神公司(Raytheon)的厂房。那里有一群“擅长针线活”的妇女,她们在阿波罗项目中被称为“小小老妇人”,她们将铜线穿过磁环(穿过磁心的代表1,绕过磁心的代表0)。没有RAM,也没有磁盘驱动器;在阿波罗号上,存储器靠的就是硬接线,而且可以说是无坚不摧。
一位雷神公司的员工正将铜线穿过磁环,图片来源:JACK POUNDSTONE/RAYTHEON
阿波罗计划的“小小老妇人”,图片来源:JACK POUNDSTONE/RAYTHEON
铜线穿绕磁环,近照,图片来源:JACK POUNDSTONE/RAYTHEON
阿波罗飞行器上载着两个近乎一样的机器:一个用于登月舱,也就是登陆月球的鹰号,另一个是用于载着宇航员往返地球的操作舱。跟其他庞大的计算机不同,这些重达70磅的计算机是便携的。
由MIT工程师哈尔·兰宁(Hal Laning)和玛格丽特的老板迪克·贝顿(Dick Batton)设计,这是首批使用集成电路而非晶体管的重要计算机。正如曼德尔在书中所写,这是第一个由人工操作、但带有计算机控制自动驾驶技术的机载导航系统,可谓是如今喷气客机标配的导航系统的老前辈。
这个系统可以永久保存超过1.2万个字节??也就是雷神公司的女孩们用铜线穿绕的环??临时存储的空间为1024个字节。“这是第一次将一台重要的计算机搬到飞船上,还赋予了它极大的责任,”当时在MIT仪器实验室负责编写登月舱代码的唐·埃尔斯(Don Eyles)说,“我们证明了这是可以实现的。
我们用今天看起来不可思议、超小的内存和非常缓慢的计算速度做到了这一切。”缺了这一切,尼尔·阿姆斯特朗(Neil Armstrong)不可能登上月球;而如果没有玛格丽特、埃尔斯和MIT工程师们编写的软件,计算机于此也不过是一件无用之物。
这一点在1969年的6月20号得到了充分体现。在阿波罗11号飞船即将登陆月球前的几分钟,这么关键的时刻,阿波罗计算机却开始突然不断出现错误信息。而正是接下来发生的一切为玛格丽特赢得认可,为团队成功解决了危机。
错误信息的大量出现是因为计算机的过度运转,除了控制舱登陆月球表面所需的进程以外,计算机还进行着一系列不必要的计算。而在休斯顿,工程师很清楚,因为阿波罗号特有的异步处理,这部计算机会集中处理手边这项任务??让鹰号在月球登陆。玛格丽特说,当软件意识到没有足够空间去运行进程的时候,它会自己进行错误检查,然后集中处理权重最高的工作。
“不可能发生的事”
玛格丽特和她的女儿劳伦,图片来源:Margaret Hamilton
一天,劳伦在摆弄MIT控制舱模拟器的显示器键盘一体机DSKY。当她在键盘上乱按的时候,一条错误信息突然出现。劳伦不知怎地启动了一个叫做P01的预运行程序,原本正在飞行状态的模拟器一下子崩溃了。
虽然一般来说宇航员不会犯这样的错,但玛格丽特还是想加一段代码防止这种状况的发生。这一提议被NASA否决,“他们一遍又一遍地跟我说宇航员不会犯任何错误,他们被训练得近乎完美,”玛格丽特说。她转而加了一句程序说明,所有NASA工程师和宇航员都能看到:“不要在飞行过程中按下P01”。她回忆说,“所有人都说,‘那样的事情永远都不会发生’。”
但事情的的确确发生了。
时间大约在1968年的圣诞节,进入阿波罗8号飞船的第五天飞行,宇航员吉姆·洛威尔(Jim Lovell)不小心在飞行中启动了P01程序。当电话从休斯顿打来的时候,玛格丽特正在仪器实验室的2层会议室。启动P01程序导致此的导航数据全部清空,阿波罗计算机无法计算出如何返回地球。
玛格丽特和MIT的程序员们需要想出一个补救的办法,必须是无错漏的完美办法。在花费9小时钻研过面前8英寸厚的程序列表后,他们有了一个计划。休斯顿方面需要上传一份新的导航数据,而后一切都会顺利进行。多亏了玛格丽特,还有调皮的劳伦,阿波罗号上的宇航员才得以重返地球。
左下角的是玛格丽特,她和其他同事正在MIT为阿波罗8号提供后方支持。图片来源:Margaret Hamilton
同样值得感激的是玛格丽特和她开创的工作,这些让人类认清自己在太空和地面能做些什么。而软件工程这个由玛格丽特引领的概念,从人类登月到现在几乎进入人类生活的方方面面。到1970年代,玛格丽特已经超越了之前在NASA和阿波罗计划中的研究。她后来成立并领导了多家软件公司。如今她的公司汉米尔顿科技距离她开始职业生涯的地方只有几个街区远??MIT,那个至今仍引领代码革命、仍然仰望星辰的地方。
内容来源:界面
翻译:李睿一
关于她的事迹,还有多记载,熟悉那段岁月的人应该有所了解,但历史书总是很枯燥的,不能充分展现她的女神范儿。这里我们看看知乎用户“杨硕”热情洋溢的介绍,看完你肯定会热血沸腾的。不是程序员的,肯定羡慕加敬仰这个行业。是程序员的,肯定会豪气冲天、埋头苦干的。
火箭和飞船上的代码开发难度完爆其他人说的电脑上的代码(不管是磁心线还是打孔卡片)
在计算机还没有发展完善以前,火箭代码是没法Debug(调试)的,总不能每改一段代码就发一颗新火箭吧?打孔卡片虽然逼格高,但是总不会程序出了Bug就炸飞几千万美元的设备吧?火箭和飞船的程序员们肯定通过纸笔度过了很多不眠不休的夜晚。
那个时候晶体管计算机还没发展完善
很多东西没有统一,大家做一个计算机出来就自带一套汇编,而阿波罗飞船上包含着许多不同的计算机模块,避障模块是A公司产的,中央处理器是B公司产的……
为了给不同的模块编程,少说得学三五套汇编语言。手下的程序员专门负责某个模块,只用学一套,但是玛格丽特自己作为项目的Leader,应该得是每一套都基本可以弄懂、会写、还不搞混吧。
当然,这一点相比于其他事情已经是小事了。
人类第一个卡尔曼滤波器(线性系统的最优估计观测器)是在阿波罗计划中实现的
作者是斯坦利施密特,不过玛格丽特作为首席工程师也是参与讨论和开发的,代码一定也在这一摞厚厚的纸当中。
为什么开发卡尔曼滤波器就比比尔盖茨写Basic解释器更屌呢?根据吴军老师《文明之光》第二册,斯坦利施密特是和卡尔曼讨论阿波罗的轨迹预测问题时发现卡尔曼滤波器的妙用的。
卡尔曼滤波器是一个很高大上的东西,因为和一般的程序不同,它用到了深刻的数学和数值计算工具。轨迹预测的话,三维位置,三维速度?如果是这样的,那么他们的代码里包含对六阶矩阵的乘法、求逆矩阵(LU分解或者QR分解)。
当然也许他们只预测位置,那么三维矩阵求逆就好办了一些,然而我们可是在谈几百万美元的大飞船啊,怎么可能没有带速度的运动模型?应该还是搞六维的吧?
让现在任何一个工程师拿C手写矩阵分解,估计都会让他痛苦好几天的,别说上古时代只有晶体管计算机和汇编语言了。
大家应该能想想出更多艰难的事情了。
最神操作的当然是女神玛格丽特对自己人生的选择
大家可以自行百度她的照片,真人很漂亮,在1969年就已经引领了黑丝连衣裙的流行女神装扮,中年之后依然知性优雅。
明明靠脸就能够生活得很好了,却选择了程序员的职业生涯,而且还领导了人类历史上最伟大的软件工程,这个人生真是……我辈只能佩服得五体投地。
所以每次我写好程序到飞行器里忐忑不安地准备测试的时候,我都会想一想我的女神,然后鼓励自己:这没什么难的,你的卡尔曼滤波器是用Eigen写的,安全的很。你的飞行器也就几万块钱,便宜得很……
相关推荐
- 统统都能轻松装下。_如何安装统赢
-
今天必须来好好聊聊迈腾甄选款的外观升级优势,简直是把经典与时尚玩明白了!迈腾甄选款巧妙地保留了迈腾的经典气场和造型,就像一位历经岁月沉淀却风采依旧的绅士。2871mm的超长轴距搭配超短前后悬设计,这就...
- 麒麟操作系统常见问题:打开火狐浏览器提示没有安装flash插件
-
关键词:火狐浏览器、flash、插件、安装问题类型:...
- VS Code 新手必装插件清单_vs code 安装插件
-
以下是针对VSCode新手的必装插件清单,覆盖代码编辑、效率提升、美化等核心需求,适用于大多数开发场景:一、基础必备插件Chinese(Simplified)(简体中文)功能:将VSC...
- 开源JSON可视神器,让阅读JSON变得简单!-JSONHero
-
众所周知,现在有不少代码编辑器以及在线工具,都支持JSON格式化,因此这一特性,已经不能称的上是亮点。调试工具已经成为每个开发者不可或缺的“利器”。但是,你见过能直接可视化JSON数据,把整个...
- 在NAS上部署Barcode服务_nas basic
-
部署基于BWIP-JS的条形码生成APIBWIP-JS是一个优秀的JavaScript条形码生成库,它支持多种条形码类型,并且可以运行在Node.js环境下,非常适合用来构建API服务。...
- 详细介绍一下Python如何对JSON格式数据进行处理?
-
在Python中对于JSON数据的处理是在日常开发中的常见需求之一。通常情况下,对JSON数据的处理主要涉及到如下的的几个步骤对于JSON数据的解析操作对于JSON数据的处理操作对于JSON数据的格式...
- golang2021数据格式(69)Go语言将结构体数据保存为JSON格式数据
-
JSON格式是一种对象文本格式,是当前互联网最常用的信息交换格式之一。在Go语言中,可以使用json.Marshal()函数将结构体格式的数据格式化为JSON格式。想要使用json...
- 一个vsCode格式化插件_vscode 格式化文档
-
ESlint...
- 自己抓取家中IPTV组播地址,不用交换机或多网卡,远程抓取更方便
-
通过IPTV播放应用在电视、电脑或者手机观看家中的IPTV电视直播,可以摆脱IPTV机顶盒的限制,方便在家中多台电视或者手机电脑上观看IPTV电视直播。运营商IPTV的电视直播信号稳定、高清,和互联网...
- 扣子免费系列教程, 如何使用扣子(coze)对接飞书多维表格?
-
一、说明大家都知道使用扣子(coze)把一些文本内容转为小红书风格很方便。但每次都是复制粘贴。很麻烦那能不能批量呢?今天我们就来学习下,使用扣子(coze)平台完成内容的批量转换。基本思路是读取飞书多...
- 1024程序员节 花了三个小时调试 集合近50种常用小工具 开源项目
-
开篇1024是程序员节了,本来我说看个开源项目花半个小时调试之前看的一个不错的开源项目,一个日常开发常常使用的工具集,结果花了我三个小时,开源作者的开源项目中缺少一些文件,我一个个在网上找的,好多坑...
- 办公人必看!3分钟搞定JSON/XML/Markdown,格式转换竟如此简单!
-
你是不是也遇到过这些情况:领导突然甩来一份密密麻麻的数据文件,要你半小时内整理成报表;想写技术文档,却被Markdown的语法搞得头大;或者同事发来的JSON文件,打开全是“{”“}”“,”,看得眼花...
- 开发者必备!zerotools.top全栈效率神器
-
强烈建议开发者们收藏https://zerotools.top,用它来提升日常效率。一、功能覆盖:从数据到图像的全栈支持Zerotools.top的最大亮点,是其功能维度的完整性。根据最新页面...
- 15 个非常好用的 JSON 工具_json tools
-
JSON(JavaScriptObjectNotation)是一种流行的数据交换格式,已经成为许多应用程序中常用的标准。无论您是开发Web应用程序,构建API,还是处理数据,使用JSON工具可以大...
- C#.NET Newtonsoft.Json 详解_c# jsonresult
-
简介Newtonsoft.Json(又称...
