C语言编程学习 潜水
  • 2发帖数
  • 2主题数
  • 0关注数
  • 0粉丝
开启左侧

写代码是性命关天的工作:盘点那些改变天下的代码,程序员惊了

[复制链接]
 楼主| C语言编程学习 发表于 2019-12-19 16:10:09 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
| 本文约 4900 字,阅读约需 3 分钟 |

2009 年,Facebook 推出了一份改变天下的代码——点「赞」按钮。「赞」是包罗 Leah Pearlman 和 Justin Rosenstein 在内的数名程序员和设计师的创意。他们认为 Facebook 用户经常太忙而无法在朋友的帖子上发表评论,但是如果有一个简单的按钮可以使用,那一定会大受接待。「朋友们可以更频繁、更轻松地相互点赞互动」,Pearlman 说。

                               
登录/注册后可看大图



这个按钮见效了,甚至有点超乎想象。到 2012 年,「赞」这个按钮已经有了超过 1 万亿次的点击。但它也产生了副作用。我们发布一张照片后,会坐立不安地革新页面,等待更多的「赞」。我们想知道为什么别人的赞越来越多。因此,我们开始在交际网络中「暗暗发力」:变得更有趣、更犀利、更迷人、更极端。
代码重构了我们的生活。正如风险资本家 Marc Andreessen 写的那样,「软件正在吞噬整个天下」,不过说软件正在消化这个天下可能更准确。
因此,美国 Slate 杂志做了这样一个调查。为了厘清改变天下的那些软件,编辑们对计算机科学家、软件开发人员、历史学家、政界人士和新闻工作者进行了民意调查。他们需要选择:哪些代码有巨大影响力?哪些改变了我们的生活?有 75 位人士提出了自己的想法,Slate 选择了其中 36 位(译文有删减)。这并不是一个完整的清单,因为有影响力的代码太多。该清单旨在激发思想——帮助我们重新思考代码怎样影响我们的生活以及程序员的决策怎样影响未来。
二进制穿孔卡片(1975 年)

第一种代码
二进制编程出现时间比计算机都早。Basile Bouchon 是第一个在纸上打孔并用它来控制机器的人:1725 年,他发明了一种织机,该织机根据所送入的穿孔纸编织出不同图案。打孔是「1」,没有打孔是「0」。以后机器发生了很多变化,但基本的代码构成并没有改变。——Elena Botella, Slate
执行的第一个当代代码(1948 年)

引领了计算机代码的使用和核劫难计算机模型的出现,为暗斗时期的军备比赛打下了根本
电子数字积分计算机是第一台可编程电子计算机。它于 1945 年完成,通过在许多组件之间进行毗连来为每个新问题进行配置。当一项使命(例如加法)完成时,一个脉冲会触发下一项使命。但是几年后,冯·诺依曼(Von Neumann)和 Los Alamos 的科学家 Nicholas Metropolis 改进了 ENIAC,运行了在计算机上执行的第一条当代代码:从可寻址的只读存储器(ENIAC 的功能表开关)执行数百条数字指令。
他们使用蒙特卡洛技术模拟了在新墨西哥州的洛斯阿拉莫斯国家实行室提出的几种原子弹设计的爆炸过程,通过这种方法逐步模拟了复杂系统,绘制了可能效果的概率分布。冯·诺依曼和梅特罗波利斯向洛斯阿拉莫斯的核科学家发送了 20,000 多张卡片,通过引爆弹头追踪了模拟中子的过程。现在,此代码的后续版本仍在洛斯阿拉莫斯使用。——Thomas Haigh,《ENIAC in Action: Making and Remaking the Modern Computer》合著者
GRACE HOPPER 的编译器(1952 年)

使计算机处理单词成为可能
Grace Hopper 在对一台早期计算机编程时,为了简化整个过程决定将编程语言植根于人类语言。霍珀(Hopper)在第二次天下大战期间参加了美国海军准备役。她知道,像她的军事上司一样,人们都在努力理解二进制代码。如果编程语言可以是基于英语的,那么这项工作就不会那么容易出错,并且对于那些不是数学博士的人来说也更容易理解。
一些人对此想法不以为然,但到了 1950 年代初,她设计了一个编译器,即一组指令,将一种更易懂的代码转换为机器直接处理的低级代码。她和她的实行室使用该工具开发了 FLOW-MATIC,这是第一种将英文单词融入该过程的编程语言。——Molly Olmstead, Slate
太空战争!(1961 年)

第一个分布式视频游戏(Spacewar)

                               
登录/注册后可看大图



电子邮件的起源(1965 年)

Come on,电子邮件来了!

                               
登录/注册后可看大图



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

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

                               
登录/注册后可看大图



Hello, World!(1972 年或更早)

引领一代又一代人打开编程大门的代码

                               
登录/注册后可看大图



当你坐下来学习一种新的编程语言时,教程要求你做的第一件事就是让计算机表现「Hello,world!」。也许最著名的早期示例来自贝尔实行室的「C—A 编程教程」。该教程写于 1974 年,尽管在 1972 年的手册中也发现了另一种更早的语言 B。
「Hello,world!」这是极好的教学方法。这是一项小的、可实现的使命,能够使门生有成绩感。这是一个尺度,有助于说明不同编程语言之间的差别。这也是高级程序员确保安装新环境后齐备正常的一种快速轻便的方法。(有时程序员使用「到'hello world'的时间」比较语言和环境的速度。)也许最重要的是,「Hello,world!」能帮你打开编程的大门,它告诉你这就是新天下。——Chris Noessel,IBM AI 设计主管。
以空字符结尾的字符串(1972 年)

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

                               
登录/注册后可看大图



1972 年,Dennis Ritchie 做出了一个庞大决定:用一种名为「空字符结尾字符串」(null-terminated string)的新语言来表示文本。这个概念早就出现了,但是他把其写进了他称为 C 的新语言中,这个决定就不绝影响我们到现在。
编程语言代表一段文本的主要方式有两种:一是具有固定、显式长度——「只包罗 10 个字符,不能再多了」或者可以以空值结尾——「这里有一串字符,继承努力,直到看到零字节为止!」
C 代码中有一个非常常见的错误,在将一个长字符串复制到一个较短的字符串中时,会出现结尾溢出,即你粉碎了刚幸亏附近的其他数据。就像在白板的边缘上乱涂乱画一样。
除了仅使程序出现故障外,还可以使用此类错误来改变程序举动,方法是使用经过精心设计的特定数据覆盖某些内容。这些就是缓冲区溢出攻击。你听说过的险些所有安全漏洞都从 1988 年的 Morris Worm 开始。
你必须在 C 语言中仔细编码以制止此类错误,但是此类错误仍然容易发生。从路由器到「智能」灯泡,险些每种当代语言都避开了空字符结尾字符串,但是 C 和 C++仍然在语言界有支配地位。因此,近 50 年后的现在,我们还在「饱受折磨」。——Jamie Zawinski,Netscape 开发人员、Mozilla.org 创始人
温哥华股票交易所的交易错误(1982 年)

不起眼的小数误差造成极大损失

                               
登录/注册后可看大图



1982 年初,温哥华证券交易所推出了一种电子股票指数,该指数最初定为 1000 点。在两年内,它跌了一半,这在 1980 年代初期的牛市中似乎匪夷所思。一项调查表现,使用 floor 而非 round,会造成对索引的计算错误。该命令意味着该值会被直接停止而不是四舍五入到小数点后三位。(数字计算机必须具有有限的分辨率,因此需要四舍五入或直接停止。)因此,如果索引计算为 532.7528,则会被存储为 532.752,而不是四舍五入为 532.753。
在每天数千次计算的过程中,这种看似很小的差别——每次必须四舍五入时未进行四舍五入——导致了巨大损失。这个编程错误终极在 1983 年 11 月得到办理,当时周五的收盘指数在 500 点左右。问题办理后,该股票于周一重新开盘,指数就超过了 1,000 美元,损失的价值得以规复。——Lav Varshney,伊利诺伊大学香槟分校助理教授
THERAC-25(1985-1987 年)

过分自信是致命的
当本相浮出水面时,各大媒体的头版头条就对机器当代化发出了警告。《洛杉矶时报》宣称:「在这个复杂时代,软件漏洞变得致命。」一台用于治疗癌症的机器在几家医疗机构中对六名患者进行了大剂量过量辐射,造成至少三人死亡。
研究人员发现,Therac-25 的代码可能带来致命的错误。该机器提供低功率和高功率治疗,后者需要一个金属设备来过滤光束。但是由于软件中的错误,操作员可能会在没有金属设备的情况下不测触发高功率模式。
Therac-25 被设计为 Therac-20 的「改进」,设计时被认为是万无一失的,不需要外部安全检查。效果:几起死亡归咎于过分自信的工程师,他们没有思量到失误的可能性。——Molly Olmstead
互联网中继聊天(1988 年)

最初的在线挂机

                               
登录/注册后可看大图



莫里斯蠕虫病毒(1988 年)

惊觉互联网已经如此巨大

                               
登录/注册后可看大图



罗伯特·莫里斯(Robert Morris)和互联网本身都还年轻。当时 23 岁的康奈尔大学研究生 Morris 发布了「莫里斯蠕虫病毒(Morris Worm)」,这是所谓的「互联网上的首次庞大攻击」。近 60,000 台毗连到互联网的计算机中有 10%遭到粉碎,造成数百万美元的损失,该事件导致《纽约时报》首次登载了「互联网」一词。纵然是精通技术的人也会吃惊于蠕虫病毒的影响范围之广。
Morris 说,他从未想过有如此大的损失,他成为根据《计算机敲诈和滥用法》被起诉的第一人。在被判处三年缓刑后,他成为著名的创业孵化器 Y Combinator 的共同创始人和麻省理工学院的计算机科学助理教授。——Elena Botella
只有一行代码的病毒(日期:90 年代)

单行代码的功能以及计算机惊人的脆弱

                               
登录/注册后可看大图



上图展示的是一种名为「fork 炸弹」的单行病毒。它需要一些特定的条件才华被触发(包罗较旧、易受影响的 Unix 操作系统副本)。如果在 Bash 中键入此命令,它将一遍又一遍地复制自己,直到耗尽计算机中的所有可用内存并导致瓦解。
它之所以有名不是因为它相对于其巨细所表现的危险性,而是它使用冒号作为函数名称。大多数函数(可重复使用的代码行)都以描述性方式命名,例如「Print」或「isThisEmailValid」,但并没有规定必须如此。在大多数计算语言中,不能使用冒号作为函数名称,但在 Bash 中可以。
2002 年,我在德国法兰克福的 Angewandte Kunst 博物馆第一次看到作为展品的这行代码。博物馆中没有展示多少代码。——Chris Noessel
HTML 超链接(1990 年)

毗连齐备的工具

                               
登录/注册后可看大图



JPEG(1992 年)

改变了我们与拍照的关系

                               
登录/注册后可看大图



Mosaic 浏览器(1993 年)

第一个获普遍使用且能够表现图片的网页浏览器

                               
登录/注册后可看大图



跟踪像素(1993 年)

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

                               
登录/注册后可看大图



通过跟踪像素下载,他们会了解了你的身份和位置,并触发一个 cookie 下载到你的浏览器中。该 cookie 使广告商可以在多个网站上跟踪你。
像素跟踪的乐成直接导致了 Facebook 的点「赞」按钮出现,该按钮可在每个嵌入的网站上进行跟踪。大量的数据收集实现了高度定向,也使 Facebook 广告大获乐成,终极 Facebook 从媒体公司口袋里赚到数十亿美元。
Robots.txt(1994 年)

一个对搜索及其他应用均具有庞大意义的小工具

                               
登录/注册后可看大图



维基(1994 年)

为维基百科铺平了道路

                               
登录/注册后可看大图



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

互联网的「害群之马」

                               
登录/注册后可看大图



Google 的 PageRank 算法(1996 年)

革新我们组织知识的方式

                               
登录/注册后可看大图



在 PageRank 之前,搜索引擎根据我们的查询词是否与文档中的词匹配来查找信息。但是对于 PageRank,拉里·佩奇和谢尔盖·布林提出了一个绝妙的主意:知识是社会性的,搜索也应该是。他们创建了一种算法,通过网络浩瀚的超链接关系来确定一个页面的等级。一个页面的 PageRank 是由所有链向它的页面的重要性经过递归算法得到的,一个有较多链入的页面会有较高的等级。正是两位这种独具慧眼的洞察力作育了 Google 的当今地位。——Clive Thompson
失联的火星气候轨道飞行器(1999 年)

因数学错误而失败的使命
1999 年 9 月 23 日,NASA 的科学家与耗资 1.25 亿美元的「火星气候轨道飞行器」失联。厥后的调查确定了原因:承包商使用英制单位为轨道飞行器编写了程序,这在美国是尺度的,但是 NASA 的软件使用了公制。两段代码之间一次简单的通讯错误使轨道飞行器飞向了未知的地方。
人们很容易把这种度量错误看做偶尔,但这表明当下这个互联软件的天下多么脆弱。所有互联的技术(电话、航天器、机器人榨汁机等等)都依靠于界说与他人进行通信的方式的接口。极小的差别也会导致紊乱。——Charles Duan
比特币(2008 年)

激发人们对某种钱币的信心的代码

                               
登录/注册后可看大图



点赞按钮(2009 年)

它催化了监视经济。

                               
登录/注册后可看大图



Facebook 设计的点「赞」按钮,使我们可以向天下展示我们的喜欢《辛普森一家》或炸薯条。但实际上,它使用了我们的认知私见和设计的力量,诱使我们分享更多的信息。它们使用上面提到的跟踪像素在互联网上跟踪我们,收集有关我们浏览习惯的数据。然后,Facebook 使用该信息,并将其举动定位算法卖给广告商。如果一家户外用品公司想要做广告,那么 Facebook 可以锁定那些「点赞」远足信息、访问露营网站以及有户外朋友的人。当这些用户给公司的广告点赞时,该信息就会反馈到定位算法中。因此,监视和贸易操纵会形成循环。都是因为一个小小的蓝色竖起大拇指。——Ari Ezra Waldman,纽约法学院教授
波音 737 Max(2017 年)

软件错误加上公司贪婪,导致数百人丧生,大批飞机停飞
2018 年 10 月,狮航 610 航班起飞后不久就坠入海中。波音向公众保证飞机是安全的,并表示需要更多的飞行员训练和「软件升级」。但是仅仅四个月后,埃塞俄比亚航空又有一架飞机失事。飞行员努力将机头抬起 20 次,但飞机的主动系统却将机头往下拉。起飞后几分钟内,就机毁人亡。全球航空政府当即将飞机停飞。调查表现,坠机事故是由 737 Max 的设计引起的,尤其是那些鲜为人知的软件,可能迫使飞机不绝俯冲。——Mar Hicks,技术史学家,《Programmed Inequality (http://www.amazon.com/dp/0262535181/?tag=slatmaga-20)》作者。
想要在程序员生涯内有更高的成绩的话,最最重要的是尽可能的提升自己的编程能力,并且,与其想着怎么去提升,不如从现在开始动手动脑,如果对于C/C++感兴趣的话,可以关注+私信小编【C/C++编程】有一些视频盼望可以帮助到你,学习不怕从零开始,就怕从不开始。
来源:机器之心(编译)、slate(原文链访问文末)
编译参与:高璇、张倩
原标题:写代码也是一份性命关天的工作:盘点改变天下的那些代码
原文链接:https://slate.com/technology/2019/10/consequential-computer-code-software-history.html

精彩评论2

xunmengxiari 发表于 2019-12-19 19:28:07 | 显示全部楼层
转发了
酉卒虫下 发表于 2019-12-20 01:01:22 | 显示全部楼层
转发了
猜你喜欢
在线客服邮箱
wxcy#wkgb.net

邮箱地址#换为@

Powered by 创意电子 ©2018-现在 专注资源实战分享源码下载站联盟商城