写点什么

为什么 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:001725
用户头像

发布了 774 篇内容, 共 525.8 次阅读, 收获喜欢 1578 次。

关注

评论

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

工程中实践的微服务设计模式

京东科技开发者

AI从入门到入门之手写数字识别模型java方式Dense全连接神经网络实现

京东科技开发者

Python与数据库交互的最佳实践

技术冰糖葫芦

api 货币化 API 接口 pinduoduo API

TiDB与MySQL在备份容灾体系的衡量对比

TiDB 社区干货传送门

管理与运维

PTCP认真学习始(不是错别字,啊喂

TiDB 社区干货传送门

社区活动 学习&认证&课程

BizDevOps全局建设思路:横向串联,纵向深化

嘉为蓝鲸

DevOps Dev Ops BizDevOps

写给职场新人|从迷茫到屡获殊荣的技术人成长之路

京东科技开发者

NL2SQL技术方案系列(1):NL2API、NL2SQL技术路径选择;LLM选型与Prompt工程技巧,揭秘项目落地优化之道

汀丶人工智能

自然语言处理 text2sql NL2SQL

旅游电商的智能化升级:携程景点详情API引领新潮流

技术冰糖葫芦

API 接口 API 测试 pinduoduo API

TiDB 新特性解读 (6.0~6.6)

TiDB 社区干货传送门

管理与运维 版本测评 新版本/特性解读 6.x 实践 7.x 实践

TiDB 版本升级常见问题处理(v6.0 及以上版本)

TiDB 社区干货传送门

版本升级 故障排查/诊断

WorkPlus企业即时通讯国密加固-为企业信息安全保障

BeeWorks

一个游戏服务器多少钱?价格与配置的完美指南

一只扑棱蛾子

服务器

记一次某节点没有Leader的问题分析

TiDB 社区干货传送门

实践案例 故障排查/诊断 7.x 实践

NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学

汀丶人工智能

text2sql NL2SQL

HAS2024:华为云以系统性创新加速千行万业智能化升级

华为云开发者联盟

云计算 华为云 华为云开发者联盟 企业号2024年4月PK榜 HAS2024

我们开源啦!一键部署免费使用!Kubernetes上直接运行大数据平台!

智领云科技

开源 大数据平台 K8s 多集群管理

TiDB学习认证之路:数据库界的“快乐大本营”

TiDB 社区干货传送门

社区活动 学习&认证&课程

TiDB Vector抢先体验之用TiDB实现以图搜图

TiDB 社区干货传送门

数据库架构选型 新版本/特性解读 数据库前沿趋势

Kafka 线上性能调优

不在线第一只蜗牛

kafka 分布式

企业im即时通讯工具推荐,企业内部即时通讯软件工具怎么选?

BeeWorks

全球AI音乐会,第一次听见中国声音

脑极体

AI

Create 2024 分论坛:百度大模型安全解决方案护航开发者一起创造未来

百度安全

RocketMQ 存储机制浅析

字节跳动云原生计算

RocketMQ

云PBX的相关介绍

cts喜友科技

通信 通讯 云通讯

调试 WebSocket API 教程实践

Apifox

程序员 前端 后端 websocket WebSocket API

尝鲜 TiDB 企业管理器TEM 2.1.3 新版本

TiDB 社区干货传送门

监控

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