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

2023-11-05 03:50

本文主要是介绍写出阿波罗登月代码的女人,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

去年底JD(@nevesytrof )在Twitter上分享了这张照片,获得广大回响,让这张照片一度在网路上疯传。

程序媛

这是张1969年拍摄的照片,当中的人像是数学与计算机科学先锋—Margaret Hamilton,旁边一大叠则是阿波罗11号所必要的软件清单。阿姆斯特朗他们能在月球上踏出人类的一大步,全都要感谢她所作出的贡献。

作者Three-Fingered Fox在《Medium》上解释道,自从曼哈顿计划发展出第一个原子弹以来,就鲜少有软件程序计划是由女性来主持。文中提到,这些「少数」的女性常是被动回应技术部门的要求,但其实编码途径的设计以及计算都是由她们一手包办,如同Hamilton与其所致力的阿波罗任务。

如同我们在《Wired》的文章中可以读到的,月球登陆的任务是电脑软件首次担任如此关键,并需要即时调整的角色。

而这个软件开发的重任在当时交到了Margaret Hamilton 的手上,一个自学程序设计,并且当上MIT 软件工程测试实验室主任(也就是为美国太空总署NASA 开发电脑系统的单位)的女性。

确实,在Three-Fingered Fox的文章中有所解释道:许多早期具开创性的程序设计师都是女性,她们学着实际动手做,并且写下了以前从未见过的历史新页。

最好的例子就是创造了第一个编译器以及发明「Debug」这个用法的Grace Hopper。

专访 Margaret Hamilton
1986 年,Hamilton 创立「Hamilton 科技公司」。

我们试着与她联系,当电话终于接通时,她似乎相当惊讶一个西班牙报纸会因为一张她35 岁的照片在Twitter 上爆红而打来。

「Twitter?」对啊,一个社群网站,像Facebook。

「哦!我们这个世代不用那些社群媒体」 虽然听起来让人惊奇,但Hamilton 很乐意接受访问,并希望我们用e-mail 传送问题过去。

Q:我想你对于这张照片「网路爆红」应该相当诧异吧?你喜欢这个感觉吗?

A:只要人们是说好话那就好啊!

Q:你说不使用社群网路,你觉得人们用这样的方式来对你所做的贡献表示兴趣,有怎么样的看法?

A:有人注意到你所付出的当然是件好事啰!

Q:这张照片是在阿波罗计划期间拍摄的吗?是何时呢?是谁为你拍下的?

A:(以下是引用自MIT Draper 实验室对这张照片的描述)

「1969 年(阿波罗11 号期间),由Draper 实验室摄影师所拍摄。Margaret 站在一叠由她所主导之LM 及CM 太空船舱内软件清单旁」

Q:当时与现在的编码技巧一定相当不同了?

A:对,也不太对。事实上,在这个领域有一些东西变得更进步了,但有一些则反而退步了,还有一些是在原地踏步。

Q:在人类第一次登陆月球计划中工作是什么样的感觉啊?

A:我在阿波罗所有真人驾驶的计划中,以及几个无人火箭计划中待过。当然阿波罗11 号是最令人兴奋,也是整个阿波罗计划最值得纪念的时刻。

Q:阿波罗11 号如果少了你所开发的软件就无法登陆月球,想知道这个软件主要的作用?

A:你指的是阿波罗11 号登陆时的1201/1202 号警报吗?以下是我对于这个问题及解决方式的解说。同时也是《Datamation》杂志在1971 年3/1 所刊出的内容:

「因为核对手册上的一个错误,集合雷达的开关被放置在错误的位置。因此造成了它传送了错误的讯号给电脑,结果使得电脑被要求必须在接收到许多额外的错误资讯的状况下,仍然执行所有登陆的正常功能,而这些错误资讯的解读就花了15%的时间。

当时的电脑(或者是说里头的软件)幸好是写成能够分辨当它被要求执行额外程序的状况。所以电脑送出了警报,对于太空人就像是在说:『我因为受到其他执行程序的要求而超载过了我应该执行的程序量,因此我现在必须首先执行较优先的程序,比如说:有关登陆的程序。』

事实上,这台电脑当初的设计可不只是分辨发生错误的情况。一个完整系列的复原程序也在这个软件当中。在这个情况下,软件所做出的行动是删除较低优先次序的程序,并且重新建立重要的执行程序,如果当初电脑没有辨识出这个问题而进行复原的程序,我想这场登陆月球行动不会如此成功。」

Q:你是在这段期间发明了「软件工程」一词吗?

A:软件在这个计划的初期还被当作初初学步的孩子一般对待,完全不像其他工程学科;例如像硬件工程那样的受到重视,而且在大家的眼光中他就像是艺术、魔术一般,而不是一门科学。

我一直以来坚信这项发明流着艺术与科学的血液,虽然当时很少人是这么想。因此,我致力于为软件以及那些发明者争取应有的正统性与尊重,所以我开始使用「软件工程」这样的字眼来将之与硬件还有其他工程学类做出区别。

当我第一次使用这样的语词时,大家都觉得有些好笑,甚至有很长一段时间被当作笑话。他们常笑我极端的想法。但最终,软件学科确实得到了应有的尊重!

Q:你认为你为了这个计划所作出的贡献已经受到世人足够的赞扬了吗?

A:时间会证明一切的。希望我们从这个计划中所学到的解决方案能够适用在更大规模的计划上。

Q:你觉得六零年代时对于一个女性成为一个工程师及科学家会相当困难吗?现今的状况有改善吗?

A:我想还是要看这位女性是怎么样的一个人、她为谁工作、以及身处的特定组织文化是如何。大体上来讲,过去有些事是较困难,但现今也有较困难的事。

就是后来说,有些事是过去能够接受的,因为我们对之并不甚了解,但这可能到了现在反而是令人无法接受的。当我们回顾时也常常感到惊讶。但如今我们其实还是在做许多无知的行为,比方说付给女性较男性少的薪资。

Q:相较于其他工程领域,那时有更多女性投入电脑科学的部门吗?你的同事当时是如何和你相处?与现今有何不同?

A:当时投入电脑科学的女性,通常都会被限制在较低的职位。

阿波罗计划这个案例中,我与同事如同朋友一般并肩面对困难的问题。我们主要还是专注在工作上而不管性别上的区分。对于一个人的称呼常会像是:「二楼那个」、「硬件部门那个家伙」、「资料分析那个人」、「操作系统高手」等等。

Q:你曾在其他NASA 的计划下工作?

A:所有的真人操控阿波罗计划与几个无人驾驶计划、太空实验室的内部软件、以及太空梭的初始系统软件等等。

Q:你最喜欢工作的哪一部分?

A:不间断的挑战以及那些充满创意的同事。

Q:你在1986 年创立了自己的公司。为何会跨出这步呢?

A:为了加速科技的演进并且试着让更多人能注意到。

Q:目前正在进行的计划?

A:持续演进USL(Universal Systems Language)及其自动化周期,建立一个更自动化的配置结构。


更多精彩文章,点此阅读


这篇关于写出阿波罗登月代码的女人的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/347219

相关文章

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,