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

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

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

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

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

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

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

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

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

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

(代码等身)

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

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

1

2K内存的计算机

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2

软件工程

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

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

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

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

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

(支援阿波罗8号)

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

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

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

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

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

3

除了成为先行者别无选择

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

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

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

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

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

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

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

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

(完)

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

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

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

  1. 史上最美女程序员:手写代码把人类送上月球

    1969年,美国"阿波罗11号"宇宙飞船载着三明宇航员成功登上月球,宇航员阿姆斯特朗踏上月球表面的这一刻,人类实现了千百年来的飞天梦,也成就了那句经典名言--这只是我一个人的一小步 ...

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

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

  3. 再看那个用代码把人类送上月球的女人——Margaret Hamilton

    据说「软件工程师」这个名词就是她发明的 玛格丽特站在阿波罗计算机指导手册 (AGC) 的源代码程序列表旁边,这些材料摞起来比她的人还要高.图片来源:Margaret Hamilton 缔造传奇的人似乎 ...

  4. (转)把人类送上月球的女程序员:她的代码跟登月本身一般浪漫...

    转自:http://knowpia.k76.net/appdoc.php?p=10029356&r=&z=10003045 美国西部时间7月18日晚上,位于加州的世界最大太阳能电站-- ...

  5. 代码传奇 | 明明可以靠颜值 却用代码把人类送上了月球的女人——Margaret Hamilton

    据说「软件工程师」这个名词就是她发明的 玛格丽特站在阿波罗计算机指导手册 (AGC) 的源代码程序列表旁边,这些材料摞起来比她的人还要高.图片来源:Margaret Hamilton 缔造传奇的人似乎 ...

  6. 卖掉 3000 平房子,50 岁程序员回国写代码,三个月内融资 2000 万美元

    2019年7月12日,10多万行C代码的中国物联网大数据平台 TDengine 在 GitHub开源,立即冲上 GitHub 榜首,整整五天霸榜 GitHub.目前该项目在 GitHub 上 Star ...

  7. 20年前的程序员什么样?从版主到架构大牛的成长之路

    栏目导语:20年前,人们不会想到,衣食住行在手机屏幕上动动手指就可以解决:银行和社区都可以用生物特征进行加密:川流不息的车流中,自动驾驶成为了可能:民生业务架设在云端,互联网的速度则深植在5G基站.而 ...

  8. 35岁的程序员正在消失?No,我认识了一个50岁的程序员!

    35岁的话题真是无穷无尽.一开始的时候,以为只有公众号这类社交媒体上会有这种问题的讨论,没想到,公司内部的论坛上也有不少这类的文章.大家各有各的说法,但终究也没有找到银弹似的解决方案. 这段时间,倒是 ...

  9. 程序员除了编代码,还能做哪些职业规划?

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 不思进取的程序员不是好的程序员.无数的开发者都梦想着可以加入 Google.Facebook ...

最新文章

  1. 比特币现金今日价格_比特币现金价格_今日比特币现金价格_06.12 上午 比特币现金价格 6060.87
  2. 项目经理常扮演的角色
  3. cf不能全屏win7的解决方法_win7电脑输入法不能打字的解决方法
  4. python label位置_Python3 tkinter基础 Label pack 设置控件在窗体中的位置
  5. TortoiseSVN Unable to connect to a repository at URL XXX
  6. jdk11 后用的指定编码格式,读取文件
  7. SpringMVC自动配置
  8. java实现调查问卷_智能办公进行时丨富士施乐邀您参与有奖问卷调查
  9. linux中安装pip镜像怎么设置_linux服务器怎么安装pip?
  10. 几何分布的期望和方差公式推导_数学期望、方差、协方差
  11. Python核心编程(第三版)课后习题解答——第二章
  12. 嵌入式Linux培训开发
  13. 关于Mariadb数据库 配置
  14. 如何做好DevOps Secrets管理
  15. 调查:人工智能技术的应用现状
  16. poll, ppoll
  17. oracle查询用户时候被锁,Oracle用户被锁的原因及解决办法
  18. 宜信区块链|一篇干货文读懂宜信的区块链实践
  19. HTML5期末大作业:响应式旅游风景家乡网站设计——衢州旅游网站(5页) HTML+CSS+JS 旅游网页设计成品 dw旅游景点介绍网页制作
  20. VFP,从入门到放弃

热门文章

  1. 做《重构(第2版)》中文版的首批读者
  2. 源表的原理以及操作方法和远程控制方法
  3. ACL2020论文整理
  4. lgg7深度详细参数_混音笔记(十一)——混响器(2)混响器的参数
  5. Unity3D将物体的所有子物体设置为半透明
  6. Revit 2014 SDK中例子整理 (二)
  7. python模拟屏幕点击_python模拟鼠标点击教程
  8. 源码交流网,提供50套商业源码免费下载
  9. 未经专业销密的计算机设备,对计算机硬盘、U盘等存储部件进行删除或格式化处理,只是对__进行了删除操作,对于__并没有做任 - 普法考试题库问答...
  10. android opengl版本太低,android – Ubuntu 16.04无法识别的OpenGL版本