代码重构了我们的生活以及程序员的决策如何影响未来

从石板

机器之心编译参与:高璇、张倩

焦急的“点赞”按钮、失踪的火星气候轨道飞行器、导致数百人死亡的波音 737 Max 坠机事故……原来与代码有关。

2009 年,Facebook 推出了一个改变世界的代码——“Like”按钮。“Like”是几位程序员和设计师的创意,包括 Leah Pearlman 和 Justin Rosenstein。他们认为 Facebook 用户经常忙于评论他们朋友的帖子,但如果有一个简单的按钮可以使用它会很受欢迎。“朋友之间可以更频繁、更轻松地喜欢和互动,”Pearlman 说。

该按钮起作用了,甚至比预期的要多一点。到 2012 年,“Like”按钮的点击量已超过 1 万亿次。但它也有副作用。发布照片后,我们坐立不安并刷新页面,等待更多喜欢。我们想知道为什么其他人越来越喜欢。于是,我们开始在社交网络中“潜行”:变得更有趣、更犀利、更迷人、更极致。

代码重构我们的生活。正如风险投资家马克·安德森 (Marc Andreessen) 所写,“软件正在吞噬世界”,尽管说软件正在消化世界可能更准确。

因此,美国 Slate 杂志进行了这样的调查。为了确定正在改变世界的软件,编辑们对计算机科学家、软件开发人员、历史学家、政治家和记者进行了调查。他们需要选择:哪些代码影响最大?哪些改变了我们的生活?Slate 选择了 75 位提交想法的人中的 36 位(翻译删节)。这不是一个完整的列表,因为有太多的影响者代码。这份清单旨在激发思考——帮助我们重新思考代码如何影响我们的生活以及程序员的决策如何影响未来。

二进制打孔卡 (1975)

第一个代码

二进制编程出现在计算机之前。Basile Bouchon 是第一个在纸上打孔并用它来控制机器的人:1725 年,他发明了一种织机,可以根据送入的打孔纸织出不同的图案。打孔是“1”,不打孔是“0” . 从那以后机器发生了很大的变化,但基本的代码组成没有改变。——Elena Botella,Slate 执行的第一个现代代码(1948 年)

导致计算机代码的使用和核灾难计算机模型的出现,为冷战时期的军备竞赛奠定了基础

电子数值积分计算机是第一台可编程电子计算机。它于 1945 年完成,通过在许多组件之间建立连接来针对每个新问题进行配置。当一个任务(如加法)完成时,一个脉冲触发下一个任务。但几年后,冯·诺依曼和洛斯阿拉莫斯的科学家尼古拉斯·梅特波利斯改进了 ENIAC,以运行第一个在计算机上执行的现代代码:从可寻址只读存储器(ENIAC 的函数表开关)执行数百条数字指令。他们使用蒙特卡罗技术来模拟新墨西哥州洛斯阿拉莫斯国家实验室提出的几种原子弹设计的引爆,他们通过这种方法逐步模拟复杂系统,绘制可能结果的概率分布。冯诺依曼和大都会向洛斯阿拉莫斯的核科学家发送了 20,000 多张卡片,跟踪通过引爆弹头模拟中子的过程。该代码的后续版本今天仍在洛斯阿拉莫斯使用。—Thomas Haigh,ENIAC in Action: Making and Remaking the Modern Computer 一书的合著者

格蕾丝·霍珀的编译器 (1952)

让计算机处理文字成为可能

当 Grace Hopper 为早期的计算机编程时,她决定将编程语言植根于人类语言,以简化流程。霍珀在二战期间加入了美国海军预备役。她知道,就像她的军事上司一样,人们在努力理解二进制代码。如果编程语言可以以英语为基础,那么对于那些不是数学博士的人来说,这项工作将更不容易出错并且更容易理解。

有些人不理会这个想法,但到 1950 年代初,她设计了一个编译器,这是一组指令,可以将更易于理解的代码转换为机器可以直接处理的低级代码。使用该工具,她和她的实验室开发了 FLOW-MATIC,这是第一种将英语单词融入流程的编程语言。- 莫莉奥姆斯特德,石板

太空战争!(1961)

第一个分布式视频游戏(太空战争)

电子邮件的起源 (1965)

来吧,电子邮件来了!

阿波罗 11 号登月舱救援代码 (1969)

防止登月舱计算机在太空中空间不足的代码

你好世界!(1972 年或更早)

一代又一代引领编程之门的代码

当你坐下来学习一门新的编程语言时,教程要求你做的第一件事就是让计算机说“你好,世界!”。也许最著名的早期例子来自贝尔实验室的 CA Programming Tutorial。该教程写于 1974 年,尽管在 1972 年的手册中也发现了另一种较早的语言 B。

“你好世界!” 这是一种极好的教学方法。这是一个小而可完成的任务,给学生一种成就感。这是一个有助于说明不同编程语言之间差异的标准。对于高级程序员来说,这也是一种快速简便的方法,可以确保在安装新环境后一切正常。(有时程序员会用“time to ‘hello world’”来比较语言和环境的速度。)也许最重要的是,“Hello, world!” 打开编程之门,告诉你这是一个新世界。— Chris Noessel,IBM 人工智能设计主管。

空终止字符串 (1972)

计算史上最大的灾难性设计错误

1972 年,丹尼斯·里奇做出了一个重大决定:用一种称为“空终止字符串”的新语言来表示文本。这个概念很久以前就有了,但他把它写成一种他称为 C 的新语言,这一决定影响了我们至今。

编程语言可以通过两种主要方式来表示一段文本:一种具有固定的、明确的长度——“只有 10 个字符,不再有”,或者它可以以 null 结尾——“这是一个字符串,继续尝试,直到你看到零字节!”

C 代码中一个非常常见的错误是,当将长字符串复制到较短的字符串时,会出现报废溢出,即损坏附近的其他数据。这就像在白板的边缘涂鸦。

除了简单地使程序失败之外,还可以利用这些错误来改变程序行为,方法是用特定的、精心制作的数据覆盖某些东西。这些是缓冲区溢出攻击。您听说过的几乎所有安全漏洞都始于 1988 年的 Morris Worm。

您必须在 C 中仔细编写代码以避免此类错误,但它们仍然容易发生。从路由器到“智能”灯泡,几乎所有现代语言都避免使用以空字符结尾的字符串,但 C 和 C++ 仍然主导着语言世界。所以现在,差不多 50 年后,我们仍然在“折磨”。- Jamie Zawinski,Netscape 开发人员和 Mozilla.org 创始人

温哥华证券交易所的交易失误 (1982)

不显眼的小数错误造成巨大损失

1982 年初,温哥华证券交易所推出了电子股票指数,最初设定为 1,000 点。两年后减半,这在 1980 年代初期的牛市中显得离谱。一项调查显示,使用 floor() 而不是 round() 会导致索引计算错误。该命令表示该值被直接截断,而不是四舍五入到小数点后三位。(数字计算机的分辨率必须有限,因此需要四舍五入或直接截断。)因此,如果索引计算为 532.7528,则存储为 532.752,而不是四舍五入为 532.753。在每天数千次计算的过程中,这个看似很小的差异——不是每次都必须四舍五入——导致了巨大的损失。编程错误终于在 1983 年 11 月得到解决,周五该指数收于 500 点附近。问题解决后,该股于周一重新开盘像素生存者2全部代码,指数突破 1,000 美元,收复失地。—Lav Varshney,伊利诺伊大学厄巴纳-香槟分校助理教授

THERAC-25 (1985-1987)

过度自信是致命的

当真相浮出水面时,各大媒体的头条新闻都警告机器现代化。“在这个复杂的时代,软件错误是致命的,”《洛杉矶时报》宣称。一台用于治疗癌症的机器在几家医疗机构中让六名患者大量服用过量药物,造成至少三人死亡。

研究人员发现 Therac-25 的代码可能会引入致命的错误。该机器提供低功率和高功率治疗,后者需要金属装置来过滤光束。但由于软件中的错误,操作员可能会在没有金属设备的情况下意外触发高功率模式。

Therac-25 被设计为 Therac-20 的“改进型”,设计为万无一失,无需外部安全检查。结果:有几人死亡被归咎于过于自信的工程师像素生存者2全部代码,他们没有考虑到错误的可能性。——莫莉·奥姆斯特德

互联网中继聊天 (1988)

初始挂机

图片[1]-代码重构了我们的生活以及程序员的决策如何影响未来-老王博客

莫里斯蠕虫 (1988)

惊讶于互联网如此庞大

罗伯特莫里斯和互联网本身都还很年轻。当时 23 岁的康奈尔大学研究生莫里斯发布了他所谓的“互联网上的第一次重大攻击”。近 60,000 台连接到 Internet 的计算机中的 10% 遭到入侵,造成数百万美元的损失,这导致《纽约时报》首次发布了“Internet”一词。即使是精通技术的人也会对蠕虫的影响范围感到惊讶。莫里斯说,他从未想过会有这样的损失,他成为第一个根据“计算机欺诈和滥用法”受到指控的人。在被判处三年缓刑后,他成为著名的创业孵化器 Y Combinator 的联合创始人和麻省理工学院计算机科学助理教授。——埃琳娜·博特拉

只有一行代码的病毒(日期:90年代)

单行代码的力量和计算机惊人的脆弱性

上图显示了一种称为“叉子炸弹”的单行病毒。它需要触发一些特定条件(包括旧的、易受攻击的 Unix 操作系统副本)。如果您在 Bash 中键入此命令,它将一遍又一遍地复制自己,直到它用完计算机中的所有可用内存并崩溃。

它之所以出名,不是因为它相对于它的大小存在危险,而是因为它使用冒号作为函数名。大多数函数(可重复使用的代码行)都以描述性方式命名,例如“Print”或“isThisEmailValid”,但并不要求如此。在大多数计算语言中,您不能使用冒号作为函数名,但在 Bash 中可以。

我第一次看到这行代码是 2002 年在德国法兰克福的 Angewandte Kunst 博物馆展出的。博物馆里展示的代码不多。——克里斯·诺塞尔

HTML 超链接 (1990)

连接一切的工具

JPEG (1992)

改变了我们与摄影的关系

马赛克浏览器 (1993)

第一个广泛使用的能够显示图像的网络浏览器

追踪像素 (1993)

现代数据收集始于这些看不见的图像。

通过跟踪像素下载,他们可以了解您的身份和位置,并触发 cookie 下载到您的浏览器。此 cookie 使广告商能够跨多个网站跟踪您。

像素追踪的成功直接导致了 Facebook 的“Like”按钮,可以在每个嵌入式网站上进行追踪。海量数据收集、高度针对性,也让 Facebook 广告如此成功,以至于 Facebook 最终从媒体公司的腰包中赚到了数十亿美元。

机器人.txt (1994)

一个非常适合搜索和超越的小工具

维基 (1994)

为维基百科铺平了道路

第一个弹出式广告(90 年代中期)

互联网的“害群之马”

谷歌的 PageRank 算法 (1996)

彻底改变我们组织知识的方式

在 PageRank 之前,搜索引擎会根据我们的查询词是否与文档中的词匹配来查找信息。但借助 PageRank,拉里·佩奇和谢尔盖·布林提出了一个绝妙的主意:知识是社会性的,搜索也应该如此。他们创建了一种算法来通过庞大的超链接关系网络确定页面的排名。一个页面的PageRank是根据链接到它的所有页面的重要性,通过递归算法得到的。具有更多链接的页面将具有更高的排名。正是这两个人的洞察力使谷歌取得了今天的成就。——克莱夫汤普森

失踪的火星气候轨道器 (1999)

由于数学错误而失败的任务

1999 年 9 月 23 日,美国宇航局的科学家与价值 25 亿美元的火星气候轨道器失去了联系。后来的调查确定了原因:承包商使用英制单位对轨道器进行编程,这是美国的标准,但美国宇航局的软件使用公制。两条代码之间的一个简单的通信错误使轨道飞行器飞向了未知空间。

这种测量错误很容易被认为是偶然的,但它显示了当今连接软件的世界是多么脆弱。所有连接的技术(电话、航天器、机器人榨汁机等)都依赖于定义与他人通信方式的接口。即使是最小的差异也会导致混乱。——查尔斯段

比特币(2008)

激发人们对货币信心的代码

喜欢按钮 (2009)

它催化了监视经济。

Facebook 设计了“赞”按钮,让我们可以向世界展示我们喜欢辛普森一家或炸薯条的地方。但实际上,它利用我们的认知偏见和设计的力量来吸引我们分享更多信息。他们使用上述跟踪像素在互联网上跟踪我们并收集有关我们浏览习惯的数据。然后,Facebook 使用该信息并将其行为定位算法出售给广告商。如果一家户外用品公司想要做广告,Facebook 可以针对那些“喜欢”远足帖子、访问过露营地和有户外朋友的人。当这些用户喜欢公司的广告时,这些信息就会反馈到定位算法中。因此,监视和商业操纵形成了一个循环。都是因为一个小小的蓝色竖起大拇指。——阿里·埃兹拉·沃尔德曼,

波音 737 Max (2017)

软件漏洞与企业贪婪相结合,导致数百架飞机丧生

2018年10月,狮航610航班起飞后不久坠海。波音公司向公众保证这架飞机是安全的,并表示需要更多的飞行员培训和“软件升级”。但仅仅四个月后,另一架埃塞俄比亚航空公司的飞机坠毁。飞行员试图抬起机头 20 次,但飞机的自动系统将机头拉下。起飞几分钟后,飞机坠毁。全球航空当局立即将飞机停飞。调查表明,坠机是由 737 Max 的设计引起的,尤其是鲜为人知的软件,它可能会迫使飞机不断俯冲。——Mar Hicks,技术历史学家和 Programmed Inequality () 的作者。

原文链接:

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论