写点什么

为什么 NASA 能开发出软件成功登月,而程序员却搞不定一场选举?

  • 2020-02-20
  • 本文字数:2281 字

    阅读完需:约 7 分钟

为什么NASA能开发出软件成功登月,而程序员却搞不定一场选举?


先说一件事:


最近,美国爱荷华州召开民主党总统候选人初选大会。以前,选举都是使用纸质投票的方式进行,这次要使用一款名为“IowaReporterApp”的电子计票应用程序。与纸质投票的人工计票方式不同,这款 App 最初有望投票 2 小时后快速公布投票结果。然而,让人大跌眼镜的是,这款 App 在使用时发生故障,导致大规模混乱,一直到第二天还未能公布结果。


最后,人们将数据导出,重新进行纸质计票审核。目前,该 App 的整个后端已经关闭,无法通过它或公司服务器访问任何信息。(更多信息,参见 InfoQ 报道《花 40 多万开发的 App 扰乱了一场大选,几乎毁了一家公司》)


InfoWorld 的编辑 Peter Wayner 撰文写道,对程序员而言,爱荷华州召开民主党总统候选人初选大会计票软件的失败是一个残酷提醒,告诉他们事情会变得有多糟糕。



简单的投票计数并不像有些事情那么复杂,比如制造一辆自动驾驶汽车、训练人工智能推荐电影,甚至安全更新银行数据库,但是程序员们没有成功。有一条带有恶意的推文写道,“很难相信,我们把人类送上了月球。”


问题在于将这件事与登月相比是不公平的


尽管引导阿波罗着陆器登上月球似乎比制表统计几千张选票要更困难,但是,所有与现代选票统计相关的额外工作让它变得更复杂。


有些部分变得更容易。新兴的“无服务器”让我们只需编写最基本的逻辑就行,但我们还未做到这一点。


当然,编写函数更简单,而其余时间我们都在处理配置选项。


我们花数小时编写几百行 YAML 代码,详细说明一个又一个的决策,但由于某些原因,这并不被认为是“编码”。


不管是不是编码,所有这些想法都有一定的道理。不是程序员就不会理解这一点。这里有一些可以解释的因素,而不是当作借口的理由。


当今,开发软件是非常困难和复杂的

一、以前的代码更简单

想了解 NASA 的工作是怎么做的,最好的方法是阅读一些代码,这些代码被保存在GitHub存储库中。


随机选择一个文件,例如GROUND_TRACKING_DETERMINATION_PROGRAM.agc,该文件有 204 行,其中超过 85 行是注释。与现代语言不同,每一行只包含一个操作,而现代语言可以将几十个具有多个选项的操作打包到一行中。


当你浏览这些文件时,明显感觉到它很简单。尽管代码在打印出来并放入活页夹时看起来令人印象深刻,但它只有几百个文件,大多数都很小,而且有非常详细的注释。


要知道,他们必须如此,阿波罗制导计算机只有 36K 的 ROM 来存放编译好的版本。


这意味着程序员可以很容易地忽略一些特性请求,只专注于最重要的步骤。


对大多数现代程序员来说,代码本身看起来难以理解,因为现在很少有开发人员学习阅读汇编语言或机器码。而学习编写的人就更少了。


虽然它看起来很神秘,但语义要简单得多。毕竟,机器只有一些寄存器、少量 RAM 和几个用于分支的 IF-THEN 选项。


将这些规则与现代程序员处理 closures 或 recursive object data 等抽象时必须掌握的规则进行下比较。Java 团队现在正推出第 14 版,一路走来,每个新版本都提供了新机制。


即使是旨在简化编程的思想,比如JavaScript中的回调函数,也需要相当的抽象思维。


一旦你弄明白汇编程序的神秘指令名,它实际上就比较容易编写了。

二、那时的安全更简单

对于发射,NASA 的安全措施很严格,但程序员们不必为连到互联网的机器编写代码而操心。


阿波罗制导计算机只与休斯敦通信,而且频率很低。而现在,每一部智能手机都在后台不断地与数十个可能背地里存在恶意的网站和服务进行交互。


这让如今的代码发布成为一个安全噩梦。



为保证一切安全,部署一个基本的容器需要处理一个特殊的文件,其中包含所有的密码和“secrets”。


Android 和 iOS 应用程序开发人员必须管理多个密钥来为他们的应用程序签名,然后才能上传至应用商店。如果这些 secrets 中的任何一个泄露出去,那任何一个连到互联网的人都有可能强行进入并按自己的方式使用它。


现代的互联网显然更复杂,里面有很多“坏人”,而垃圾邮件发送者、劫持者和网络钓鱼分子还算“好的”。

三、那时功能是重点

当时,还没有设计委员会考虑按钮是否应该移动一两个像素。


没有启动画面、没有移动图标、没有背景阴影,也没有数百万种字体。直到 1961 年,IBM 才推出可更改的字体Selectric


虽然现代程序员能利用优秀的标准,如 HTML、CSS 和 SVG,以及不计其数的库,如 React 或 Vue,但同样的程序员也必须遵循这些标准。


只要这些小真空管还在发光,宇航员们就很高兴。

四、那时的移动部件更少

机械工程师往往会计算移动部件的数量,并将其作为衡量复杂性的指标。


月球着陆器的导航计算机有一项非常重要的工作,就是跟踪位置,仅此而已。


智能手机在同一时间做了无数事情,其中很多都被不加思考、漠不关心的大众认为是理所当然的,但是,如果应用程序在几毫秒内没有响应,他们就会卸载它。


所有这些都增加了复杂性。自动化构建代码、定义良好的 API 和无穷无尽的库意味着程序员可以让持续集成 pipeline 中的“精灵”来做大部分工作,但复杂性仍然存在。


一个仅打印“Hello World”的 Go 应用程序使用 1.7 版本编译只有 1.6MB,而 Go 社区对这个消息感到很兴奋,因为它之前有 2.3MB。

五、那时可免于和律师打交道

根据我的计算,在亚马逊云服务上租用一台机器的基本服务条款有 2.2 万字。为使用网站租用机器,还有一个完全不同的服务条款


然后,每个单独的产品通常都有自己的 TOS,比如Activate。它们加起来比月球着陆器电脑 ROM 里 36000 个指令字还要长得多。


阿波罗程序员不知道电影《外星人》会有这样的广告语:“在太空中,没有人能听到你的尖叫”,但他们理解这个想法,也知道这意味着趁人之危的律师听不到你的声音。


英文原文:


5 reasons we don’t write code like we used to


2020-02-20 07:001682
用户头像

发布了 756 篇内容, 共 498.6 次阅读, 收获喜欢 1560 次。

关注

评论

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

脚本之美│VBS 入门交互实战

Windows Server 6月月更 VBS 脚本之美

如何低成本构建一个APP

Geek_99967b

小程序

一款支持内网脱机分享文档的接口测试软件

Xd

Java 后端 接口测试工具

Android 11适配指南之Toast解析

yechaoa

android 适配 6月月更 11.0

Flutter中的GetX状态管理用起来真的那么香吗?

岛上码农

flutter ios 移动端开发 安卓开发 6月月更

国内外最好的12款项目管理系统优劣势分析

爱吃小舅的鱼

开发协同,高效管理 | 社区征文

武师叔

初夏征文

什么是数据中台

奔向架构师

数据中台 数据仓库 6月月更

给你讲懂 MVCC

Nick

MySQL 源码 MVCC 6月月更 深入解析

事件

Jason199

js 事件 6月月更

apipost接口断言详解

Xd

Java 接口测试工具

Java中使用正则检查有效日期

okokabcd

Java

Fabric.js 手动加粗文本iText

德育处主任

canvas FabricJS 6月月更

openGauss Developer Day 2022正式开启,与开发者共建开源数据库根社区

openGauss

远程办公之:如何成为时间管理大师?| 社区征文

甜甜的白桃

初夏征文

华为云低时延技术的九大绝招

坚果

6月月更

Java Core 「16」J.U.C Executor 框架之 ScheduledThreadPoolExecutor

Samson

学习笔记 Java core 6月月更

浅谈如何运营好小红书账号:利用好长尾词理论

石头IT视角

一次 MySQL 误操作导致的事故,「高可用」都顶不住了!

悟空聊架构

MySQL 高可用 悟空聊架构 6月月更 事故复盘

讲讲我的不丰富的远程办公经验和推荐一些办公利器 | 社区征文

Regan Yue

远程办公 初夏征文

SLSA: 成功SBOM的促进剂

安势信息

开源 开源软件供应链 软件物料清单 SBOM SLSA

RabbitMQ访问Web端口报错User can only log in via localhost

龙空白白

微信视频号如何用 PC 电脑做直播?

boshi

直播 视频号

一文简述:供应链攻击知多少

穿过生命散发芬芳

供应链攻击 6月月更

JVM调优简要思想及简单案例-怎么调优

zarmnosaj

6月月更

小程序容器到底是什么

Geek_99967b

ribbon

卢卡多多

6月月更

uni-app进阶之认证【day12】

恒山其若陋兮

6月月更

linux存储结构与磁盘划分

乌龟哥哥

6月月更

RabbitMQ基础知识

龙空白白

RabbitMQ

C语言自定义类型的介绍(结构体,枚举,联合体,位段)

未见花闻

6月月更

为什么NASA能开发出软件成功登月,而程序员却搞不定一场选举?_安全_Peter Wayner_InfoQ精选文章