代码最厉害的人,世界著名代码
神译局是36氪旗下专注介绍国外新技术、新观点、新趋势的编辑团队,关注科技、商业、职场、生活等领域。
编者注:看来Marc Andreessen 十年前所说的“软件正在蚕食世界”不仅完全正确,而且更加正确。软件正在重塑世界。没有软件,人类世界就无法运转。在浩瀚的软件代码海洋中,哪一个对我们起着重要的作用呢?Slate网站邀请各界人士回顾那些改变一切的代码,我们挑选了36个代码片段。如果您有更好的选择,欢迎在评论区留下您的意见。原作者是未来时态,标题是《The Lines of Code That Changed Everything》。由于文章太长,我将分三部分发布,但这次是第一部分。
2009年,Facebook推出了改变世界的33,354点赞按钮。 Like 是包括Leah Pearlman 和Justin Rosenstein 在内的几位程序员和设计师的创意。他们假设Facebook 用户通常太忙而无法评论朋友的帖子。所以我们认为,如果我们按下一个简单的按钮,我们可能会看到交互的爆炸式增长。它可以释放出大量鼓舞人心的肯定。正如帕尔曼后来所说,“朋友们可以通过更频繁、更轻松的互动来相互了解。”
这个想法很有效,但也许有点太好了。到了2012年,到了2012年,“点赞”数量已经突破1万亿,通过“点赞”零阻力的姿态,得到了很多验证。然而,它的副作用也令人不安。发布照片后,我们坐在那里,焦急地刷新页面,等待点赞堆积起来。我们想知道为什么其他人比我们得到更多的喜欢。因此,我们开始扩大我们的日常在线行为。我们想要变得更有趣、更刻薄、更迷人、更极端。
代码塑造我们的生活。风险投资家马克·安德森(Marc Andreessen) 写道: “软件正在吞噬世界。”然而,在这一点上,说软件正在吞噬世界可能更准确。
从文化角度来看,代码是一个相对低级的实体。尽管我们可以在日常生活中感受到它的神秘影响,但它很少见,并且对于非新手来说可能有点令人困惑。 (硅谷的人们喜欢这个;它帮助他们将自己神话为巫师。)我们创建了十大电影、游戏和电视排行榜来庆祝那些塑造了我们灵魂的作品。Masu。但是,尽管代码与此类工作一样反映了时代精神,但我们从未坐下来编制一份世界上最重要代码的列表。
所以Slate决定自己做。为了找出哪些软件正在改变世界,杂志编辑对计算机科学家、软件开发人员、历史学家、政策制定者和记者进行了调查。这些人必须做出以下选择:代码的哪些部分影响最大?哪些代码改变了我们的生活?大约有75 名受访者贡献了各种想法,其中Slate 选择了36 名。鉴于正在编写大量有影响力的代码,该列表并不完整,而且可能永远不会完整。 (我最喜欢的算法之一并不容易获得:快速排序!或者可能是Ada Lovelace 的伯努利算法。)与所有列表一样,它的目的是帮助您重新思考代码的工作原理。未来。
它包含的某些代码您可能很熟悉,例如HTML。代码的某些部分很强大(例如用于建模概率的蒙特卡罗模拟),但普通人不知道它们是什么。有些包含致命错误,例如波音737 Max 中的缺陷。还有一些令人毛骨悚然的东西,比如像素跟踪可以告诉营销人员他们的电子邮件是否已打开。
一个趋势是明确的。最重要的代码往往会通过消除阻力来形成新的行为。当软件让做某事变得更容易时,我们就会做得更多。 1988年编写的代码首先建立了“互联网中继聊天”(IRC,多人在线聊天系统),它允许早期的互联网用户进行实时文本聊天。如今,实时文本聊天无处不在,从Slack 上铺天盖地的工作场所聊天到Twitch 上播出的网络钓鱼和反网络钓鱼战斗。
当一段特定的代码变得具有革命性时,并不总是很清楚。它开始于一个奇怪的尝试:一个实验气球。《Spacewar !》 是第一个获得病毒式流行的视频游戏。但早在1961 年,在价值12 万美元(相当于2019 年100 万美元)的机架式计算机上玩游戏被认为是相当无聊的。但他们发明了许多帮助计算机成为主流的概念,例如使用图标来表示数据以及允许用户使用手持控制器操作图标。
代码的影响可能会让每个人都感到惊讶,包括编写代码的人。 —克莱夫·汤普森,《程序员: 新部落的形成和世界的重塑(Coders: The Making of a New Tribe and the Remaking of the World)》 作者
1. 二进制打孔卡年份:1725
第一个代码
二进制编程在计算机出现之前就已经存在。 Basil Bouchon 被认为是第一个在纸上打孔并用它来控制机器的人。 1725年,他发明了一种织机,可以根据打孔卡上的说明编织图案。如果有空洞,则为“1”,如果没有空洞,则为“0”。从那时起,事情发生了很大变化,但代码的基本构建块保持不变。 ——埃琳娜·博特拉,《Slate》
2. 最新代码首次执行的年份:1948
率先使用计算机代码和计算机模型进行核毁灭,从而塑造了冷战时代的军备竞赛
ENIAC(电子数值积分计算机)是第一台可编程电子计算机。这台机器建于1945 年,每个新问题都是通过重新布线许多零件来解决的。一旦完成一项任务(例如加法),就会使用脉冲来触发下一项任务。但几年后,克拉拉·邓恩·冯·诺依曼和洛斯阿拉莫斯科学家尼古拉斯·梅特罗波利斯重新连接了ENIAC,使机器能够运行有史以来在任何计算机上运行的第一个现代代码。从可寻址只读存储器(ENIAC 的函数表)执行数百条数字指令。转变)。他们模拟了新墨西哥州洛斯阿拉莫斯国家实验室正在评估的几种原子弹设计的爆炸,使用蒙特卡罗技术来模拟复杂的系统,并且几乎一步一步地显示了可能结果的概率分布。冯·诺依曼和大都会)向洛斯阿拉莫斯的核科学家发送了20,000 多张卡片,以跟踪弹头爆炸后模拟中子的行为。该代码的后代至今仍在洛斯阿拉莫斯使用。 —Thomas Haigh,《ENIAC in Action: Making and Remaking the Modern Computer(ENIAC实战:现代计算机的制造和改造)》 合著者
3. 格蕾丝·霍珀(Grace Hopper) 编译:1952 年
使计算机能够处理文本
如果是数据末尾,则继续步骤14。
来自维基百科
格蕾丝·霍珀(Grace Hopper) 在对早期计算机进行编程时,决定基于人类语言来简化整个过程。第二次世界大战期间,霍珀在得知像他的军事上级这样的人很难理解二进制代码后,加入了美国海军预备役。如果编程语言基于英语,那么即使对于没有数学博士学位的人来说,这项工作也不会那么容易出错,也更容易完成。
有些人嘲笑这个想法,但在20 世纪50 年代初,她发明了编译器,这是一组指令,可以将更容易理解的代码转换为机器可以处理的较低级别的代码。使用这个工具,她和她的实验室开发了FLOW-MATIC,这是第一种将英语纳入流程的编程语言。 —— 莫莉·奥姆斯特德,板岩
4.世界大战!年份:1961
第一个视频游戏发布
/此例程以隐形方式处理非碰撞船只
/在超空间中
hp1、dap hp2
我数ma1,hp2
法律HP3/后续步骤
DAC 我ml1
法则7
达克我mb1
随机的
碎石9 秒
9号先生
xctr1
加我x1
DAC iMX1
交换
请加我1
鸭子我我的1
随机的
碎石9 秒
9号先生
xctr2
鸭眼药
迪奥我mdx
设置.hpt,3
拉克兰
我这个月
hp4,这个月有架
苏玛
子(311040
温泉
添加(311040
我这个月
计数.hpt, hp4
XCT高清2
达克马1
hp2,jmp。
摘自Steve Russell,Bitsavers.org
1961 年底,一群年轻的麻省理工学院员工、学生和同事(其中许多人是技术模型铁路俱乐部的成员)在深夜使用了一台最近捐赠的DEC PDP-1 计算机。位于非军事计算领域最前沿的PDP-1 售价为12 万美元(如今超过100 万美元),具有18 位字,并使用纸带存储程序。程序员花了五个月的时间开发了一款游戏,其中两名玩家控制飞船(Needle 和Wedge)进行一对一的太空战斗,同时避开屏幕中央星星的重力。
星际飞行即将来临!它在早期的“黑客”社区中传播。 DEC 随后将其预安装在所有PDP-1 上,并将其预安装在核心内存中,以便在安装过程中进行演示。该计划对20 世纪60 年代规模还很小的编码社区产生了巨大影响,并激励了一代又一代的视频游戏创作者。现在,它在模拟器中得到了认可,并且计算机历史博物馆仍然定期在最后一台工作的PDP-1 上展示它。 2018 年,该游戏的首席开发者Steve Russell 告诉史密森学会:“它已经有50 多年的历史了。没有未解决的用户投诉。没有崩溃报告。并且仍然提供支持。” —— Arthur Daemmrich,Le Maison 中心主任发明创新研究
5. 电子邮件的起源:1965年
请,这是电子邮件。
任何时间A(1).E.FENCE.OR.A(2).E.FENCE.OR.A(3).E.FENCE
PRFULL.($'R'1指令:$)
PRFULL.($ '4邮件名称1 名称2 PROB1 PROG1 PROB2 PROG2 .$)
PRFULL.($ WHERE '=NAME1 NAME2'=是要邮寄的文件,$)
PRFULL.($ 和'=PROBN PROGN'=是'8$,
将发送1 美元。 'B$)
中国通信.(0)
有条件终止
CTSS 程序员MAIL 手册页
1961年,麻省理工学院的黑客开发了一个系统,允许多个用户登录同一台计算机并互相发送短信。 1965 年,一群程序员决定开发一个正式的命令系统来发送、接收和显示这些数字化字母。尽管高层管理人员最初拒绝了“MAIL”命令,认为它有点鲁莽,但它的使用变得如此流行,以至于到1971 年,第一封垃圾邮件出现在麻省理工学院。这是一条反越南战争的信息。 ——克莱夫·汤普森
6. 警察巡逻算法创建年份:1968
现代预测警务的开端和种族定性的计算机化
1965年,当林登·约翰逊总统成立总统执法和司法委员会时,他命令该委员会研究如何利用计算机来解决美国的“犯罪问题”。约翰逊总统和委员会将该问题描述为“城市问题”。和“黑人问题”。这个问题的答案是警察殴打算法(PBA)。它旨在解决规划问题,例如需要多少警察来巡逻城市的特定区域。通过将PBA 与犯罪数据库集成,警方可以在犯罪发生前根据种族人口统计数据自动生成嫌疑人档案,并相应地引导资源(警察、武器和其他设备)进行部署。今天的预测性警察相对不成比例地对黑人和棕色人种进行警察和刑事定罪。正如PBA 的故事提醒我们的那样,这种情况并不是意外技术故障的结果,而是该技术50 年设计的完美体现。 —— 查尔顿·麦克伊尔文,《黑人软件(Black Software: The Internet Racial Justice, From the Afronet to Black Lives Matter)》 作者
7.阿波罗11号登月舱紧急救援代码年份:1969
防止月球着陆器计算机在太空中耗尽空间的代码
普渡小贴士
CAQ
TS阿玛卡多
TC银行电话
CADR VAC5STOR # 保存可擦除文件以用于调试目的。
指数ALMCADR
咖啡馆0
ABORT2 TC 电压
OCT77770 OCT 77770 #请不要动
CA V37FLBIT # 是平均G ON
掩码标志RD7
CCSA
TC Whymper -1 # 是的。请停止使用poodoo。请救救我。
TC 下降标志
地址状态标志
TC 下降标志
地址线标志
TC 下降标志
地址Nodflag
TC银行电话
CADR 清洁先生
TC 温珀
数字化:虚拟AGC 和麻省理工学院博物馆
阿波罗制导系统计算机(AGC)非常棒。计算阿波罗返回轨迹的Poppy Northcutt 告诉我,AGC 的计算能力不如今天记录个人信息的贺卡。但它做了它必须做的事情。
由于计算能力和存储容量有限,必须仔细管理任务,因此AGC 始终专注于最重要的工作。如果没有足够的空间来执行任务,则无法执行该任务。 AGC Software 团队知道总有一些事情是您无法计划的。所以他们制定了救助计划。当计算机面临空间不足(或“溢出”)的风险时,AGC 会触发BAILOUT 来传输不太重要的数据和操作,以便重要的数据和操作能够继续成功运行。
当鹰号着陆器准备在大约30,000 英尺的高度登陆月球时,AGC 发出了“1202”警报,但尼尔·阿姆斯特朗和休斯敦的飞行控制人员都没有立即注意到这一点。但指挥中心的计算机专家表示,不到30秒,AGC软件就按预期工作了,删除了低优先级的工作,恢复了重要的工作。速度之快,没有人注意到。)阿姆斯特朗和巴兹·奥尔德林将继续从AGC 获得他们继续安全着陆所绝对需要的东西。
在阿姆斯特朗说“老鹰已经着陆”之前,溢出警报又响了三遍,但这只是因为事情按预期进行。 “救援”一词通常指的是以失败告终的任务,但在这里它实现了人类最伟大的壮举。 —Ellen Stofan,史密森国家航空航天博物馆馆长
8. 你好,世界!计划开始日期:1972年之前
一句话介绍代码生成
main{ printf ("你好,世界\n"); }
当您尝试学习新的编程语言时,教程要求您做的第一件事就是告诉您的计算机显示“Hello, world!”字样。也许最著名的早期例子可以在贝尔实验室的备忘录《C语言编程教程》 中找到。这本书是1974年写的,但是B语言手册从1972年就提到了它,所以它可能比那还要早。
你好,世界!是一本非常漂亮的教材。小的、可实现的任务可以让你尽早获得成就感。这已成为一种标准,有助于解释各种编程语言之间的差异。对于高级程序员来说,这也是一种快速、简单的方法,可以确保安装新环境后一切正常工作。 (程序员有时会使用“实现‘hello world’的时间”作为速度测试来比较语言和环境。)也许最重要的是“Hello, world!” “它很天真,很友好,并且有助于向新程序员解释他们的代码可以产生的影响范围。这就是世界。” —— Chris Noessel,IBM AI 设计主管。
9. 空终止字符串——Null 年份:1972
计算史上最致命的设计错误
char Yellow[26]={'y', 'e', 'l', 'l', 'o', 'w', '\0'};
GNU C 参考手册
1972年,丹尼斯·里奇做出了一个重大决定。他的新语言使用所谓的“空终止字符串”来表示文本。尽管这个概念已经存在很长时间了,但他将其合并到了一种新语言C 中,从那时起,这个决定的遗产就一直伴随着我们。
在编程语言中,有两种主要的方式来表示文本: 它本质上可以是固定长度的,——“仅包含10 个字符,仅此而已。”或者它可以以null 结尾。是的—— 您的文本位于此处。继续阅读,直到最后出现0 字节。祝你好运。 ”
C 代码中一个非常常见的错误是将长字符串复制为短字符串,导致末尾溢出。这意味着会损坏附近的任何其他数据。这就像在白板边缘书写一样。
有时,此类错误不仅会导致程序出现故障,还会通过诱导程序用专门为该程序创建的特定数据覆盖某些内容来改变程序的行为。这是缓冲区溢出攻击。几乎您听说过的所有安全漏洞都是从这里开始的,而始作俑者就是1988 年的Morris 蠕虫病毒。
在C语言中,您可以通过仔细编写代码来避免此类错误,但由于C语言的性质,此类错误既容易检测又难以检测。尽管几乎所有现代语言都避免以null 结尾的字符串,但C 和C++ 仍然为世界的基础提供动力,从路由器到“智能”灯泡。所以近50 年后,我们仍然在用这个bug 玩打地鼠游戏。 ——Jamie Zawinski,Netscape 开发人员、Mozilla.org 创始人、DNA Lounge 所有者
10. Telenet远程网络时代:1975年
第一个基于分组交换的公共数据网络,当今互联网的骨干
互联网的起源是阿帕网(ARPANET),这是高级研究计划局(现为DARPA)的研究人员用来在机器之间交换数据的计算机网络。随着阿帕网在政府内部的扩展,网络建设者意识到这项技术对公众有多么有价值,以及加入阿帕网可以创造多少商机。 1975年8月,阿帕网的商业版本Telenet在七个城市上线。该网络允许早期客户(主要是计算机或数据库公司)使用电话拨号或远程访问来上传和下载(例如原型电子邮件消息)。中央计算机上的代码。尽管ARPANET 通常被认为是现代互联网的祖先,但专为公众设计的Telenet 实际上是Web 的先驱。事实上,Telenet 在20 世纪80 年代最大的客户之一是Quantum Link,即后来的AOL。 ——Jane C. Hu,将来时贡献者
11. 温哥华证券交易所舍入误差年份:1982
小数点上的微小差异可能会导致巨大的成本。
- 返回下限(值)+ 返回回合(值)
温哥华证券交易所使用的代码如下所示:
1982年初,温哥华证券交易所推出电子股指,最初盯住1000点。但在其发行后的两年内,它的价值就跌至原来的一半,这与20 世纪80 年代初的牛市时期形成了令人费解的反例。经过一番调查,我们发现指数的计算存在问题,用的是下限而不是轮数。使用Floor 意味着指数四舍五入到最接近的三位小数,而不是四舍五入到小数点后三位。 (数字计算机必须具有有限的精度,因此需要进行舍入或截断。)因此,如果计算出的指数为532.7528,则计算机会将该值存储为532.752,而不是将其舍入为532.753。这个微小的差异其实并不重要,但由于该指数每天都会被计算数千次,这个看似微小的差异(基本上每次都四舍五入)可能会导致该指数的价值大幅下降。这一编程错误最终于1983 年11 月得到纠正,当时该指数在周五收盘时跌至500 点左右。到了接下来的周一,该指数开始突破1000 点并收复失地。第——章拉夫·瓦什尼,助理教授,伊利诺伊大学厄巴纳-香槟分校
12. Therac-25 代码年份:1985-1987
事实证明,过度自信会害死你
当真相大白时,头条新闻对现代化发出了警告。《洛杉矶时报》 索赔:“复杂时代的软件故障正在导致人员死亡。”一台用于治疗癌症的机器使多个医疗机构的六名患者受到过量辐射,导致至少三人死亡。
经过调查,研究人员发现Therac-25 的程序允许发生致命错误。最初,该机器提供两种类型的治疗:低功率和高功率,后者需要金属装置来过滤光束。然而,如果没有安装适当的金属设备,软件错误可能会让操作员意外触发高功率模式。
从设计上来说,Therac-25 是Therac-20 的“改进”版本,该软件被认为是万无一失的,不需要外部安全检查。结果:过于自信的工程师因没有考虑到错误的可能性而被判对一场严重的致命事故负责。 —— 莫莉·奥姆斯特德
人类历史上最重要的36个代码片段(二)
人类历史上最重要的36个代码片段(三)
译者:四四方方。