50年前的程序员女神,用代码把人类送上月球

耗时三年,14万行,50年前阿波罗11号登月的全部代码都能在GitHub找到了! 大数据文摘出品 作者:易琬玉 50年前的今天,美国宇航员尼尔森·阿姆斯特朗从阿波罗11号飞船登月舱走出,在月球表面留下了人类登月的第一个脚印。 美国总统肯尼迪1961年就设定了登月目标。阿波罗计划历时9年,经历了十次失败,Apollo11号才终于将人类的踪迹带到了月球。在着陆前,躲开了陨坑和巨石宇航员阿姆斯特朗和奥尔德林在着陆点周围探索了两个多小时,他们采集了土壤和岩石样本、... 阅读详情

1969年7月20日,经过4天飞行的阿波罗11号终于来到了最关键的时刻:降落到月球表面。

614fc8e308efedf86cb41b7c7bf8c4be.png

就在这个时候,飞船计算机突然开始闪烁报警。

全球6亿人在观看电视直播,NASA飞行控制中心的气氛让人窒息。

人类的首次登月计划面临着艰难的抉择:降落还是放弃。

幸运的是,控制中心的人对飞行控制软件有着高度的信心,指示阿波罗11号继续降落。

ef24349c5c74e62a6e41f09f3cfb9a5d.png

飞行控制软件不负众望,它忽略了那些低优先级的情况,专注于最高优先级的任务,引导着阿姆斯特朗和奥尔德林穿过坑坑洼洼的月球表面,成功着陆。

事后分析发现,是因为一个开关被放置到了错误的位置,导致计算机进入了过载的状态。 

那个只有2K内存的计算机既得执行降落所需的计算,又得处理开关错误引起的额外数据。

但是这个程序居然实现了抢占式任务:用高优先级的着陆任务打断了低优先级的,实在太厉害了。

这个飞行控制软件是玛格丽特·汉密尔顿和她的团队编写的。

8d3187e15d64163a4a4ac8b4024f6a3b.png

(代码等身)

这无疑是玛格丽特人生的最高光时刻。

后来乐高公司根据那张著名的照片开发了乐高玩具套装:NASA中的女性,玛格丽特成为其中的一员。

e044a8bfaf50d71ca485a73c2c6dd607.png

1

2K内存的计算机

玛格丽特1936年出生于美国印第安纳州,后来全家搬到了密歇根,1958年她获得了密歇根大学的数学学士学位,随后她在MIT找了一份工作,成为了一名程序员,开发气象预测软件。

这是软件开发的蛮荒岁月,计算机科学和软件工程还没有建立,一切全靠程序员在工作的实践中学习。

1961年,玛格丽特开始参与国防项目SAGE,协助开发了美国第一个空中防御系统,通过雷达来搜索飞机。

玛格丽特在这个项目上展示自己的天赋:“当一个新人进入项目时,总是会被分配一些没有人能搞清楚的程序,我也被分了一个非常怪异的程序,最早写程序的人甚至用希腊语和拉丁语来写注释!不过我还是成为了第一个让这个程序跑起来的人!”

正是在SAGE项目上的成就让玛格丽特的人生发生了转折。

1965年,她的丈夫在当地报纸上看到了一则消息:NASA正在寻找程序员,开发程序,把人类送上月球。 

b4c3165713643b4cf6cbb48876e5e9fb.png

玛格丽特非常兴奋:“哇,那我一定得去!”。 

这一年玛格丽特28岁,加入了阿波罗项目,成为了项目的第一个程序员。

阿波罗项目需要开发一个精简的计算机AGC(Appollo Guidance Computer),用来控制登月飞船。

这是一件艰难的任务,因为当时的计算机通常要占据一间屋子,但是AGC被限制到只有一立方英尺那么大。

0bba7658fa6b64d7e2eb5a873fbc6e7d.png

项目组被分为两拨人,一拨设计硬件,另外一拨开发软件。 

玛格丽特自然成为了软件组的负责人。

AGC只有可怜巴巴的2K内存,36K的ROM,更匪夷所思的是那个ROM是Core rope memory(芯绳存储器?),也就是说,0和1是通过电线和微小的环形磁芯表示。

电线穿过磁芯表示1,没有穿过表示0。

cbe7f2235ff181a3ec6936a8bf2cbc85.png

我们现在想把程序存盘,只需要按一个Ctrl + S就可以,但是想把阿波罗飞行软件存盘,只有一种办法:像纺织工那样细心地把电线和磁芯给编织起来。

这个工作不能出一点儿差错,要不然,无论代码写得多么正确,最终都会功亏一篑。

事实上,这个工作的确是由新英格兰纺织厂的女工们完成的,绳索存储器被一些程序员戏称为Little Old Lady memory。

2

软件工程

在NASA工作的大多数软件工程师都是男性,有人在家里照顾孩子,但是玛格丽特没有办法,在周末和晚上她会带女儿劳拉来到办公室。

劳拉经常看到她的妈妈在飞船中扮演宇航员来测试软件,好奇心大起,也想试一试,结果突然间整个系统崩溃了,原来劳拉在飞船“飞行”期间,选择了一个叫做P01的功能。

5f65b261e14e481cca438f3c3796dd5b.png

玛格丽特意识宇航员也有可能犯类似错误,希望修改软件防止它。 

但是NASA的人说,宇航员都是训练过的,绝对不会犯类似错误。当然,修改软件也非常难,想想芯绳存储器!

但是,在阿波罗8号绕月飞行的时候,宇航员恰恰犯了和她女儿一样同样的错误,飞船在太空“迷路”,无法将宇航员送回地球。得知消息的玛格丽特带领团队,突击9个小时,终于让阿波罗8号回到正常轨道。

9411f9c3039cc474d67907593a7496fa.jpeg

(支援阿波罗8号)

此后,软件都内置了保护功能,防止类似事件的发生。 

玛格丽特开始将整个阿波罗任务视为一个系统,这个系统由3部分组成:软件,硬件,人。

在开发飞行控制软件的过程中,玛格丽特创造了“软件工程”这一术语,她要赋予“软件”的合法性,就像硬件以及其他类型的工程一样,构建软件的人也应该得到应用的尊重。

在刚开始的时候,大家认为这是一个笑话:软件开发是工程吗? 

随着时间的推移,NASA逐渐意识到,软件工程会成为它们的重要工具,能够抢先苏联一步完成登月。

cc38746413002ab5bca48be07cd92f3b.png

3

除了成为先行者别无选择

“回想起来,我们是世界上最幸运的人,除了成为先行者别无选择” ---玛格丽特·汉密尔顿

玛格丽特就是软件工程领域的先行者,开发阿波罗飞行软件这种对正确性、可靠性要求极高的软件,没人任何经验可以遵循,没有任何学校可以学习,软件不仅要工作,而且必须第一次就正确工作。软件不仅要可靠,而且必须能进行实时的错误检测和恢复。

玛格丽特带领团队出色地完成了这个软件,在关键时刻把人类送上了月球。

2016年11月22日,玛格丽特获得了奥巴马总统颁发的总统自由勋章,以表彰她在阿波罗登月任务开发机载飞行软件所做的工作,以及对软件工程的基础性贡献。

d5268cc70bda229a6260df1416d472df.png

玛格丽特说:当我想了解新事物或者做新东西的时候,一定不要让恐惧成为障碍。

一个人不应该害怕说“我不知道”,“我不理解”,或者问“愚蠢的问题”。

即使事情看起来不可能,即使所谓专家说这不可能,也要继续下去。

不要害怕犯错,只有敢于失败的人才能取得更大的成就。

(完)

后记:今天三八节,按照惯例,我会我会写一篇女性程序员的故事,前两年的引起了很大的反响,没看过的同学点击下方图片就可以查看。

最后,向了不起的程序媛们致敬!女神节快乐!

917e5cf291cb4e4cfb0ebc7bcbd53cf1.png

4f9e7e93438c054c3873c4d9e1af5d61.png

Apollo 11号登月飞船制导计算机源代码(待续) 今年是人类登月50周年,最近github上出现了Apollo 11号源代码,荣登排行榜第一。 这些指令可以理解为特制的汇编语言,说汇编,是因为它不是机器码,也不是高级解释性语言,而是介于两者之间。之所以说特制,是因为这些代码是用在特定的“计算机”上的,那个年代,说计算机其实不太合适,更像是个计算器。 ... 阅读详情

相关推荐

热榜第一!登月阿波罗11号原始代码在GitHub公开

7月19日消息 原始的阿波罗11制导计算机(AGC)指令和登月模块的源代码目前已经在GitHub网站开源。 截止目前已获得35064star,位列GitHub趋势热榜第一 1969年7月20日,人类历史上首次在另一颗星球表面行走,实现了1961年肯尼迪总统设定的目标,当时美国人甚至还没有实现环绕地球飞行。2019年7月20日是人类第一次踏足另一个星球50周年的纪念日。 根据介绍,开源内容包含了...

AIoT_News的博客 1408

嫦娥四号登月球背面有什么_让我们登上月球的计算机的迷人故事

嫦娥四号登月球背面有什么Man landed on the Moon on 20 July, 1969. What was science-fiction only a decade earlier had become reality in a matter of years thanks to the ingenuity, the dedication, and the sacrifices ...

weixin_26744853的博客 202

阿波罗11登月源码--汇编

据说是阿波罗登月源码,学习一下。 http://www.sohu.com/a/105224218_325700?qq-pf-to=pcqq.discussion

【尘封 57 年的代码史诗】阿波罗登月程序代码全开源:人类第一次登月,全靠这 14.5 万行汇编代码撑起

摘要:阿波罗登月代码从NASA最高机密到GitHub开源项目的传奇历程,展示了60年代工程师在极简硬件(1MHz CPU、3KB RAM)上创造的技术奇迹。这份14.5万行汇编代码包含6大核心模块:实时操作系统内核、着陆制导程序、导航系统等,其模块化设计、容错机制(如处理1202报警的逻辑)成为现代软件工程典范。2016年MIT官方开源后,开发者可通过模拟器在本地运行这段改写人类历史的代码。该代码体现了极致优化的编程艺术和零容错的航天标准,至今仍为开发者提供宝贵启示。

小李同学_LSH的博客 534

(阿波罗11号登月飞船源代码)Apollo-11-master

(阿波罗11号登月飞船源代码)Apollo-11-master

国央企创新负责人如何通过平台提升技术需求挖掘与资源配置的精准性?.docx

国央企创新负责人如何通过平台提升技术需求挖掘与资源配置的精准性?

50年前的最美程序媛,用代码把人类送上月球

玛格丽特要先把代码写在纸上,在代码确认无误后,会有专业人员把代码内容像绣花一样,用金属线一点一点编织进内存里,当铜线穿过磁芯代表1,绕过磁芯则代表0,往往通宵达旦才只能完成一小部分内容,不敢想象最开始的编程竟是这么编出来的.....更可贵的是,玛格丽特的经历为后世的程序员们树立了大胆创造、勤奋刻苦的职业典范,更鼓励了所有有梦想的人,要勇于开创,不惧艰险,成为自己所在领域的“登月者”!她自学了好几种软件语言,懂得了如何建立软件,随着日渐丰富的编程经验,玛格丽特也慢慢成了系统编程的专家。

m0_46163918的博客 6831

两路半桥LLC谐振变换器软开关Simulink仿真(模拟谐振参数不同、分裂电容)

内容概要:本文介绍了“两路半桥LLC谐振变换器软开关Simulink仿真”资源包,重点在于基于Simulink平台对两路半桥LLC谐振变换器进行高精度建模与动态仿真,特别考虑了谐振参数不一致及分裂电容等非理想工况对系统性能的影响。该仿真模型不仅涵盖了主电路拓扑、软开关实现机制与谐振网络设计,还深入分析了不同参数配置下系统的启动特性、稳态效率、动态响应及软开关条件的满足情况。通过参数扫描与对比仿真,帮助用户掌握LLC变换器的关键设计要素与优化方法,具备较强的工程指导价值和科研教学意义。; 适合人群:电力电子、电气工程及其自动化等相关专业的高校师生,以及从事高频开关电源、新能源变换器、车载充电机等领域的研发工程师和技术人员。; 使用场景及目标:① 掌握两路并联半桥LLC谐振变换器的建模与仿真方法;② 理解软开关技术在提升变换器效率与降低EMI方面的关键作用;③ 分析谐振参数偏差与分裂电容结构对系统均流特性、增益曲线及软开关范围的影响;④ 支持科研项目中的拓扑验证、控制策略开发与故障工况分析; 阅读建议:建议结合Simulink仿真模型与配套说明文档进行学习,重点关注谐振腔参数设置、驱动时序设计及软开关波形观测;可通过调整谐振电感、电容值或引入参数失配,观察系统行为变化,深入理解LLC变换器的稳定边界与优化设计原则。

只能存储12KB数据,“码农女神”是怎样把人类送上月球的?

导读:电脑算速极慢、只能存储12KB数据,临时存储空间仅1KB……在这样的条件下,“码农女神”玛格丽特·汉密尔顿把阿波罗11号送上了月球。从那时兴起的工业软件,在之后的几十年里创造了哪些奇...

华章IT官方博客 998

双向全桥CLLC谐振变换器仿真模型(Simulink仿真实现)

内容概要:本文系统介绍了双向全桥CLLC谐振变换器的Simulink仿真模型,重点阐述了变频控制、闭环仿真及其与多种电力电子拓扑(如维也纳整流器、DAB变换器、图腾柱PFC等)的联合仿真设计。资源包涵盖2.5kW双向全桥LLC、V2G电动汽车充放电系统、三相PFC、多相交错LLC等多种变换器的仿真案例,并深入展示了三电平VIENNA整流器在双闭环PI控制与SVPWM调制策略下,结合上下电容电压差值补偿实现中点电位平衡的先进控制方法。通过仿真验证,该策略不仅有效维持了800V直流母线电压的稳定,还在动态工况下显著提升了电容电压的均衡度,同时保持了较低的输入电流THD,充分体现了SVPWM与中点平衡控制协同优化的技术优势。; 适合人群:具备电力电子与自动控制理论基础,从事新能源发电、电动汽车、工业电源、微电网等领域的研究生、工程师及科研人员。; 使用场景及目标:① 学习并构建高频谐振变换器(如LLC、CLLC)的Simulink仿真模型,掌握其变频与混合控制策略;② 深入理解并应用中点电位平衡、双闭环PI控制、SVPWM调制等核心技术于VIENNA等三电平变换器中;③ 复现高水平期刊论文中的控制算法,服务于科研项目申报、学术论文撰写或工程产品开发。; 阅读建议:该资源为综合性仿真资料库,建议使用者结合自身研究方向(如电动汽车充电、新能源并网)选择对应案例进行精学,重点关注控制策略的设计逻辑、仿真参数的整定方法以及SVPWM与中点平衡的协同机制,并充分利用附带的计算书和参考文献深化理解,以实现从仿真模型到实际工程应用的顺利转化。

全桥LLC谐振(变频+移相混合控制)变换器闭环仿真模型(Simulink仿真实现)

全桥LLC谐振(变频+移相混合控制)变换器闭环仿真模型(Simulink仿真实现)

成功登月,全靠这个伟大的女程序员

(给程序员的那些事加星标)原创:程序员的那些事(id:iProgrammer)登月 50 周年宇航员的一小步,人类的一大步人类登月 50 周年纪念日到了。1969 年 7...

程序员的那些事 1487

手把手教你用Copilot插件在Obsidian里免费接入DeepSeek-R1(附硅基流动API密钥获取)

本文详细介绍了如何通过Copilot插件在Obsidian中免费接入DeepSeek-R1模型,实现智能知识管理。从硅基流动API密钥获取到插件配置,再到高级功能调优和实战应用技巧,手把手教你打造AI驱动的个人知识库。

weixin_33686714的博客 2801

史上最伟大的女程序员,集智慧和美貌于一身

史上最伟大的女程序员,集智慧和美貌于一身 她是史上最伟大的女程序员,发明了“软件工程”一词,她用代码将阿波罗11号飞船顺利送上月球,阿姆斯特朗能在月球上踏出人类的一大步,全都要感谢她所作出的贡献。 她叫玛格丽特·希菲尔德·汉密尔顿,公认的代码女皇。 1936年,玛格丽特出生于一个普通家庭,波澜不惊地念完了高中和大学,1958年取得学士学位,专业是数学,辅修哲学。读书期间她认识并嫁给了詹姆...

cnliuyong的博客 6657

ROS新手必看:5分钟搞定URDF小车建模(附Rviz可视化调试技巧)

本文为ROS新手提供了快速构建URDF机器人模型的实战指南。通过一个完整的两轮差速小车建模案例,详细解析了URDF的核心语法、Rviz可视化调试技巧以及常见问题排查方法,帮助初学者快速掌握ROS机器人建模与可视化调试的核心技能。

weixin_29079643的博客 250

AutoLISP 学习 (一)

AutoLISP基本语法结构、语法 以括号组成表达式,左右括号一定要成对,单、双引号也要成对,例如: (defun c:hello() (princ "\nHello world!") (prin1) ) 表达式格式:(函数名 操作数 操作数 …),例如: (setq p1 (list 0 0)) (setq p2 (list 10 10)) (setq p3 (list 20 20)) ;;; CAD中画直线,经过p1 p2 p3 (command "LINE" p1 p2 p3 ""

m0_54575622的博客 2123

耗时三年,14 万行,50 年前阿波罗 11 号登月的全部代码都能在 GitHub 找到了!...

本文转自大数据文摘,作者:易琬玉50 年前的今天,美国宇航员尼尔森·阿姆斯特朗从阿波罗 11 号飞船登月舱走出,在月球表面留下了人类登月的第一个脚印。AR 应用“JFK...

GitHubDaily 1090

深度学习时间序列预测:GRU算法构建多变量时间序列预测模型+代码实战

深度学习多变量时间序列预测:GRU算法构建多变量时间序列预测模型+代码实战 注意参考:深度学习多变量时间序列预测:GRU算法构建单变量时间序列预测模型+代码实战 GRU(Gate Recurrent Unit)是循环神经网络(Recurrent Neural Network, RNN)的一种。和LSTM(Long-Short Term Memory)一样,也是为了解决长期记忆和反向传播中的梯度等问题而提出来的。 GRU和LSTM在很多情况下实际表现上相差无几,那么为什么我们要使用新人GRU(.

data+scenario+science+insight 4033

著名女程序员---女神程序媛

池泽彩野花 1991年7月28日出生,她在Google当实习程序员的身份,而另一方 面更关键的是,她竟然还是一位兼职演员,能演戏,能拍性感写真。 除了工作上的德才兼备,生活中的她是一个普通又可爱的邻家女孩,耍得了宝卖得了萌。

ThePromonkeyOf_HeLuo的博客 4460

ABB变频器使用PROFINET IO通信模块时的激活方法

ABB变频器使用PROFINET IO通信模块时的激活方法

Robot_PLC_HMI_Automation 2737

AI处理器组合

编号0-3的处理器处于同一个链路中,编号4-7的处理器处于另外一个链路中,不通链路中的处理器不能通信,如下图所示。- 如果申请处理器个数为1,则选择同一链路,剩余可用的处理器数量为1个的最佳,其次是剩余3个的为次佳,然后是剩余2个,最后是剩余4个。输出为组合列表,当array=[0, 1, 4, 5, 6, 7] ,num=1时,输出为[[0], [1]]- 如果申请处理器个数为2,则选择同一链路剩余可用的处理器数量2个的为最佳,其次是剩余4个,最后是剩余3个。任务申请1个处理器。

面试高手的博客 1万+

耗时三年,14 万行,50 年前阿波罗 11 号登月的全部代码都能在 GitHub 找到了!

项目地址:https://github.com/chrislgarry/Apollo-11 50 年前的今天,美国宇航员尼尔森·阿姆斯特朗从阿波罗 11 号飞船登月舱走出,在月球表面留下了人类登月的第一个脚印。而现在,完成这场宏大登月计划的制导计算机(AGC)所有源代码,你都可以在 GitHub 上找到了! 来源:githubdaily ...

githubshare的博客 1059

手把手教你学 MATLAB 实战训练(6.9):卷积神经网络(CNN)模型来进行图像分类任务(预训练的 ResNet-50 模型)

加载数据集数据预处理加载预训练模型修改和扩展预训练模型设置训练选项训练模型测试模型。

xiaoheshang_123的博客 646

写出阿波罗登月代码的女人

去年底JD(@nevesytrof )在Twitter上分享了这张照片,获得广大回响,让这张照片一度在网路上疯传。 这是张1969年拍摄的照片,当中的人像是数学与计算机科学先锋—Margaret Hamilton,旁边一大叠则是阿波罗11号所必要的软件清单。阿姆斯特朗他们能在月球上踏出人类的一大步,全都要感谢她所作出的贡献。 作者Three-Fingered Fox在《Me

ak619的博客 1497

matlab 异常值检测与处理——Robust Z-score法【2024最新版】

博客长期更新,本文最近一次更新时间为:2024年12月9日。

点云侠的博客 1516

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 离开IBM多年,我依然怀念它
下一篇: 为什么北欧的顶级程序员数量远超中国?
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值