写点什么

To the Moon: 太空任务与开发软件的相似之处

  • 2015-12-07
  • 本文字数:2616 字

    阅读完需:约 9 分钟

Russ Olsen 在 GOTO Berlin 2015 会议上发表了题为“To the Moon”的开幕式演讲,在演讲中他介绍了太空任务与开发软件的相似之处。

InfoQ 对 Russ Olsen 进行了采访,主要关于为了满足期限在同一时间进行所有事情的弊端、从错误的和正确的事情中吸取经验教训、在软件开发中再渺小的事情也能扼杀你和当实施复杂工作时如何专注和处理细节。

InfoQ:您演讲的大部分形式都是第一次登月故事。您为什么选择用这种形式组织您的演讲?

Olsen:你知道的,人们习惯使用短语“改变一切”。但是他们谈论的很难改变什么,更何况改变一切。那个周日的下午,当我们登上月球后它真的改变了一切,至少对我而言是这样的。突然我有了人生的方向,我知道我长大后希望成为什么。并且我不是孤军奋战:我见到了很多从那天开始发生转变的人。我尝试了很久,希望帮助那些不够幸运没有经历登月事件的人们感受那种体验,但是唯一起作用的是让他们与我一起重温那一时刻,惊心动魄的时刻。因此,才有了这次演讲。

重要通知:接下来 InfoQ 将会选择性地将部分优秀内容首发在微信公众号中,欢迎关注 InfoQ 微信公众号第一时间阅读精品内容。

InfoQ:在太空任务中,为了满足最后期限人们在同一时间进行所有的事情。这种情况在软件开发中存在吗?您认为这是否有效?

Olsen:NASA 在阿波罗计划中面临的情况是他们需要在一个疯狂的截止日期前完成一个几乎不可能的项目。因为时间线不允许他们“在第一步的基础上建立第二步”,最终他们简单地列出了所有需要发生的事情,一次进行所有的事情,最终整合它们。这种做事的效率及其的低下:你不可避免地会遇到人们构建的组件不能很好地一起工作。你让人们不断地解决同样的问题,因为他们没有意识到其他人也在解决这个问题。并且当整体设计发生变化的时候,你会有大量的返工。

阿波罗疯狂方式最明显的标志是阿波罗母舰后面巨大的火箭引擎。火箭引擎最初是设计用来推动母舰离开月球表面。但是随着项目整体设计落实后,他们有了一个独立的、专门的登陆飞船。所以母舰不需要着落——或者升空离开——月球。这意味着母舰不需要一个巨大的火箭引擎。但是设计的时候他们已经考虑了这个引擎,并且很容易做到扔掉它。

可悲的是,人们在软件开发中过度使用“先构建后集成”技术。显然我不是唯一一个:在演讲中我开玩笑说这种着手构建系统的方式“永远是一个好主意”。人们——尤其是开发者——总是哈哈大笑。那为什么开发者有时还是采用这种方法呢?原因跟 NASA 那帮人是一样的——不可能完成的目标和疯狂的截止日期。这么说吧:如果你正在管理一个软件项目,你设置了不可能完成的目标和疯狂的截止日期,取决于你的团队他们可能会圆满完成。或许不会,但是可能。但是无论成功还是失败,不可能的目标和疯狂的截止日期将会浪费你的精力、使团队疲倦、导致蹩脚的设计,和一百种不同的方式。

InfoQ:您能举例说明在太空任务中,人们如何从错误的事情中吸取经验教训?在软件开发中您有看到类似的学习模式吗?

Olsen:通常你能在航空航天中看到不间断的、系统的失败研究,不仅是实际的,还包括潜在的。如果飞机或者宇宙飞船中的某个零件发生故障,通常会有一系列系统的提问。不仅仅是“这个零件为什么会发生故障?”还包括“为什么早期我们没有发现这个故障?”和“其它交通工具中这个故障发生的比例是多高?”更不用说“这个故障是更一般故障的案例吗?”同时不仅仅是彻底的故障:航空航天工程师们一直在寻找异常现象,比如即使是发生直接损伤也不应该发生的故障。重要的是,航空航天工程师们面对故障时倾向于数据驱动和统计方法。

如今情况得到了好转,但是传统的开发人员仍然将失败看成是随机的从天而降的闪电:也许日志服务发生了故障,所以我们修复了问题,并忘了这件事。或者更糟糕的是,我们将软件缺陷看成是相关开发人员道德缺陷的证据:“你怎么可以让这种事情发生!!”是一种对软件故障可以理解的反应,但不是一个有用的反应。同样我们往往也会忽略异常行为:如果它不发生故障,就不进行修复。除非虽然你的系统没有发生故障,但是它引起了你的注意,试图告诉你它即将发生故障。

你可以将软件系统看成是由许多零件组成的复杂机器。事实证明收集系统的实际数据——包括故障和“有趣”的事件——基于收集的数据建立对系统的理解是我们应该一直考虑的事情。

InfoQ:您认为从成功和运转良好的事情中吸取经验教训如何?您对此看法是什么,它是否已经在软件行业中得到了充分的体现?

Olsen:我在软件行业中看到的一次又一次的主旋律是,我们过分推广我们在成功项目中学到的经验教训。在进行项目前,我们有着明确很好理解的目标、积极合作的客户、扎实的技术、灵活的思维和良好的设计文档,因此我们认为,“嘿,这个项目成功是因为我们有着良好的设计文档!”或者,“我们每天与客户交流一个小时,这是成功的原因。”或者,“我们充分理解需求,”这是灵丹妙药!问题是,为了构建复杂系统需要正确完成上百万的事情。如果你成功了,那么很好,尝试找出成功的根本原因。但是请注意,原因肯定不止一个。

InfoQ:您提到在太空中,再小的事情也可能会杀死你。这在软件开发中也是如此吗?

Olsen:软件开发是在所有尺度上把事情做对。清楚地获得正确的软件系统的整体设计是至关重要的。但是缺乏有效的执行力,好的设计也不会给你带来好的结果。同样好的执行力但是充满了 bug 同样也不会让任何一个人感到快乐。任何软件系统都会被许多“次要”的 bug 破坏。

InfoQ:对于进行复杂工作时如何使自己专注您有没有什么建议?您是如何处理这种细节的?

Olsen:在演讲中我试图表达的观点是当你构建某种复杂度类似登月火箭或者一个中度大小的企业信息系统时,肯定会有失败。我再说一遍:肯定会有失败。软件开发者终日试图得到正确的细节,花费整晚和周末寻求新方法以确保细节实际上是正确的。但如果我们在过去半个世纪的编程中学到了什么,那就是你可以降低缺陷率,但是你不能将其降低为零。因此我们需要让我们系统、组织和自己做好准备接受即将发生的失败,并准备好解决失败。正确的态度是尽你所能,确保功能、服务和系统是可靠的。然后当它失败时继续你的工作。US 太空计划的名言“失败不是一种选择”,其实,名言完全错误。当涉及到大型软件系统时,必然会发生失败。唯一的问题是,当失败时你和你的系统是否做好了准备。

InfoQ 将会报道 12 月 3 日和 4 日举行的 GOTO Berlin 会议。

查看英文原文: To the Moon:Parallels Between Space Missions and Developing Software

2015-12-07 18:001386
用户头像

发布了 92 篇内容, 共 27.6 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

区块链与物联网融合发展的机遇与挑战

CECBC

人工智能

未来五年数字经济九大技术趋势,区块链成数字时代刚需!

CECBC

人工智能

潘建伟团队再登Nature:建成全球首个集成量子通信网,全长4600公里

京东科技开发者

云计算

Experience Never Gets Old

三只猫

28天写作

Lock锁 精讲

伯阳

Java 多线程 lock lock锁

赛博时代,拿什么盛放对逝者的思念?

脑极体

《价值》- 投资分析(4)

石云升

零售 28天写作 价值 投资分析

技术er,你还特立独行坚持技术的优雅性么?

三石

28天写作 技术与业务

[3/28]保障研发反应开发需求

L3C老司机

9条消除if...else的锦囊妙计,助你写出更优雅的代码

苏三说技术

Python 条件判断

赵开忠

Python 28天写作

甲方日常 84

句子

工作 随笔杂谈 日常

量化交易机器人系统开发|市值管理系统开发搭建

W13902449729

量化交易机器人系统开发 市值管理系统开发搭建

市值管理机器人系统开发|量化策略交易系统开发搭建

W13902449729

市值管理机器人系统开发 量化策略交易系统开发搭建

面试被问AQS、ReentrantLock答不出来?这些知识点让我和面试官聊了半小时!

Java鱼仔

Java 面试 并发 JUC

精选算法面试-优先队列

李孟聊AI

算法 队列 28天写作

分布式唯一ID解决方案-雪花算法

JavaPub

Java 分布式

【Mysql-InnoDB 系列】事务模型

程序员架构进阶

MySQL 架构 innodb 事务 28天写作

SD-WAN:网络走向业务

JiangX

创业 投资 网络 28天写作 SD-WAN

人生苦短,开发用云 | 如何优雅完成程序员的侠客梦?

阿里巴巴云原生

人工智能 阿里云 Serverless 程序员 云原生

【计算机内功修炼】四:进程切换与线程切换的区别

码农的荒岛求生

线程 进程 进程线程区别

发达国家加紧数字货币政策布局

CECBC

数字货币

专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?

Java 学习 程序员 面试

Spring Boot 中的项目属性配置

武哥聊编程

Java springboot SpringBoot 2 28天写作

一文搞懂参数传递原理

Java 编程 程序员

一致性Hash算法Java版实现

Silently9527

Java 后端 一致性Hash算法

什么是TACACS?

来玩一玩Linux常见命令!

程序员的时光

Linux 程序员 28天写作

在CSDN的六载时光,由你来决定今年的博客之星

谙忆

九个最容易出错的 Hive sql 详解及使用注意事项

五分钟学大数据

sql 大数据 hive

电动汽车的小历史及汽车方面的一个基础概念 (28天写作 Day5/28)

mtfelix

28天写作 电动汽车

To the Moon:太空任务与开发软件的相似之处_语言 & 开发_Ben Linders_InfoQ精选文章