软件工程师的出现
1961年,肯尼迪总统提出新的挑战:在十年内美国将把一个人送上月球,并将他们安全地送回地球。 随着时间即将到达最后期限,他们仍然缺少相应技能的人员,国家航空航天局(NASA)需要找到一个人来编写完成这项任务所需的飞行软件。 美国航空航天局招募了麻省理工学院(MIT)的数学家玛格丽特·汉密尔顿(Margaret Hamilton)领导这项工作[^1]。
汉密尔顿会议到:
提出新的想法是需要冒险精神。 因为需要承诺和奉献,同时需要相互尊重。 因为软件是一个谜,一个黑匣子,上层管理层给了我们绝对的自由和信任。 我们必须找到一种方式,然而我们做到了。 回头看,我们是世界上最幸运的人; 别无选择,只能是先驱者; 没有时间成为初学者[^2]。
在编写这个复杂的软件的过程中,汉密尔顿(Hamilton)被认为是软件工程师。 她还创建了优先显示的概念,该软件可以使宇航员能够实时地了解需要注意的信息。 她制定了一套要求收集,为软件工程关注的列表增加了质量保证,其中包括:
- 调试每个独立的组件
- 独立测试组件先于整体测试
- 持续测试
在1969年,在阿波罗11号任务期间,月球模块指引计算机软件因为任务过多而超出计算能力。汉密尔顿的团队已经编写了软件以至于可能需要重写,让Neil Armstrong能够使用手动控制进入月球模块。
管理团队为在线飞行软件工作的工程团队以及团队成员之间的相互尊重提供了自由和信任,导致了软件促进了人们技术上的飞跃,就如同尼尔·阿姆斯特朗踏上月球一样。 没有这个高度信任的环境,这个手动覆盖能力(可以说是至关重要的东西)可能不存在,月球登陆故事可能有不同的结果。
软件的问题 |
---|
20世纪60年代,软件并不是仅仅在太空飞行有很重要的作用。 随着硬件变得越来越容易获得,人们越来越关注软件的复杂性,这些软件并没有遵循其他工程学科的标准。 系统的增长速度和对它们的新兴依赖令人震惊。 |
1967年,包括国家和行业科学家在内的北约科学委员会进行了讨论,以评估软件工程的状况。1967年秋季成立了计算机科学研究小组,其目标是集中注意软件问题。 他们邀请了所有行业领域的50位专家,分为三个工作组专注于软件设计,软件生产和软件服务,努力界定,描述和开始解决软件工程问题。 |
在1968年北约软件工程大会上,确定了软件工程的关键问题,包括: |
* 定义、界定成功 |
* 构建复杂的系统需要大量的投资和未知的因素 |
* 生产系统的周期化以及详细的文档 |
* 在生产上给予经济压力来构建指定的产品 |
确定这些问题将有助于在未来几年内确定该行业的重点领域, 而且至今仍将影响着我们。 |
[^1]: 罗伯特·麦克米兰(Robert McMillan),“她的代码使人类登上月球并创造了软件。” 写于2016年10月13日。
[^2]: A.S.J.Rayl,“美国航空航天局的工程师、科学家—使梦想成为现实”, 2008年,http://www.nasa.gov/50th/50th_magazine/scientists.html