百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

她写的代码,带人类成功登月

haoteby 2025-05-23 17:15 20 浏览

曾经有这么一位女程序员

本来颜值爆表

完全可以靠脸吃饭

但却选择了码农这一事业

而且干出了一番惊天地泣鬼神的事业

靠一段段代码将人类第一次送上了月球,绝对是才艺双绝、女神中的女神——她就是阿波罗计划的首席软件工程师玛格丽特·汉密尔顿(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写的,安全的很。你的飞行器也就几万块钱,便宜得很……

相关推荐

一日一技:用Python程序将十进制转换为二进制

用Python程序将十进制转换为二进制通过将数字连续除以2并以相反顺序打印其余部分,将十进制数转换为二进制。在下面的程序中,我们将学习使用递归函数将十进制数转换为二进制数,代码如下:...

十进制转化成二进制你会吗?#数学思维

六年级奥赛起跑线:抽屉原理揭秘。同学们好,我是你们的奥耀老师。今天一起来学习奥赛起跑线第三讲二进制计数法。例一:把十进制五十三化成二进制数是多少?首先十进制就是满十进一,二进制就是满二进一。二进制每个...

二进制、十进制、八进制和十六进制,它们之间是如何转换的?

在学习进制时总会遇到多种进制转换的时候,学会它们之间的转换方法也是必须的,这里分享一下几种进制之间转换的方法,也分享两个好用的转换工具,使用它们能够大幅度的提升你的办公和学习效率,感兴趣的小伙伴记得点...

c语言-2进制转10进制_c语言 二进制转十进制

#include<stdio.h>intmain(){charch;inta=0;...

二进制、八进制、十进制和十六进制数制转换

一、数制1、什么是数制数制是计数进位的简称。也就是由低位向高位进位计数的方法。2、常用数制计算机中常用的数制有二进制、八进制、十进制和十六进制。...

二进制、十进制、八进制、十六进制间的相互转换函数

二进制、十进制、八进制、十六进制间的相互转换函数1、输入任意一个十进制的整数,将其分别转换为二进制、八进制、十六进制。2、程序代码如下:#include<iostream>usingna...

二进制、八进制、十进制和十六进制等常用数制及其相互转换

从大学开始系统的接触计算机专业,到现在已经过去十几年了,今天整理一下基础的进制转换,希望给还在上高中的表妹一个入门的引导,早日熟悉这个行业。一、二进制、八进制、十进制和十六进制是如何定义的?二进制是B...

二进制如何转换成十进制?_二进制如何转换成十进制例子图解

随着社会的发展,电器维修由继电器时代逐渐被PLC,变频器,触摸屏等工控时代所替代,特别是plc编程,其数据逻辑往往涉及到数制二进制,那么二进制到底是什么呢?它和十进制又有什么区别和联系呢?下面和朋友们...

二进制与十进制的相互转换_二进制和十进制之间转换

很多同学在刚开始接触计算机语言的时候,都会了解计算机的世界里面大多都是二进制来表达现实世界的任何事物的。当然现实世界的事务有很多很多,就拿最简单的数字,我们经常看到的数字大多都是十进制的形式,例如:我...

十进制如何转换为二进制,二进制如何转换为十进制

用十进制除以2,除的断的,商用0表示;除不断的,商用1表示余0时结束假如十进制用X表示,用十进制除以2,即x/2除以2后为整数的(除的断的),商用0表示;除以2除不断的,商用1表示除完后的商0或1...

十进制数如何转换为二进制数_十进制数如何转换为二进制数举例说明

我们经常听到十进制数和二进制数,电脑中也经常使用二进制数来进行计算,但是很多人却不清楚十进制数和二进制数是怎样进行转换的,下面就来看看,十进制数转换为二进制数的方法。正整数转二进制...

二进制转化为十进制,你会做吗?一起来试试吧

今天孩子问把二进制表示的110101改写成十进制数怎么做呀?,“二进制”简单来说就是“满二进一”,只用0和1共两个数字表示,同理我们平常接触到的“十进制”是“满十进一”,只用0-9共十个数字表示。如果...

Mac终于能正常打游戏了!苹果正逐渐淘汰Rosetta转译

Mac玩家苦转译久矣!WWDC2025苹果正式宣判Rosetta死刑,原生游戏时代终于杀到。Metal4光追和AI插帧技术直接掀桌,连Steam都连夜扛着ARM架构投诚了。看到《赛博朋克2077》...

怎么把视频的声音提出来转为音频?音频提取,11款工具实测搞定

想把视频里的声音单独保存为音频文件(MP3/AAC/WAV/FLAC)用于配音、播客、听课或二次剪辑?本文挑出10款常用工具,给出实测可复现的操作步骤、优缺点和场景推荐。1)转换猫mp3转换器(操作门...

6个mp4格式转换器测评:转换速度与质量并存!

MP4视频格式具有兼容性强、视频画质高清、文件体积较小、支持多种编码等特点,适用于网络媒体传播。如果大家想要将非MP4格式的视频转换成MP4的视频格式的话,可以使用MP4格式转换器更换格式。本文分别从...