天天看点

人类历史上最重要的36个代码片段(一)

神译局是36氪旗下编译团队,关注科技、商业、职场、生活等领域,重点介绍国外的新技术、新观点、新风向。

编者按:Marc Andreessen十年前说的“软件蚕食世界”不仅完全正确,而且似乎不仅如此:软件正在重塑世界。人类世界的运转已经无法离开软件。在浩如烟海的软件代码当中,哪些对我们起到了关键作用呢?Slate网站邀请了各方人士对那些改变了一切的代码进行评选,这里筛选出36个代码片段。如果你有更好的选项,不妨在评论区留下你的意见。原文作者是Future Tense,标题是:The Lines of Code That Changed Everything。鉴于篇幅太长,我们将分三部分刊出,此为第一部分。

人类历史上最重要的36个代码片段(一)

早在2009年,Facebook推出了改变世界的代码段——点“赞”按钮。“赞”是几名程序员和设计师的创意,其中包括Leah Pearlman和Justin Rosenstein在内。他们推测,Facebook用户常常因为太忙而没时间到朋友的帖子上发表评论,所以想如果有一个简单的按钮可以按一下的话,也许互动就会爆发:这可以释放出大量令人兴奋的肯定。就像Pearlman 后来所说那样:“朋友们可以通过这种频繁的多、容易得多的互动手段来相互验证。”

这个点子奏效了,也许有点太好了。通过把“赞”做成一个零阻力的手势,到了2012年,大家的点赞次数已经超过1万亿次,并且的确释放出了大量的验证。但是它的副作用也令人不安。我们发布了一张照之后片,就会坐在那里焦急地不断刷新页面,等待点赞数的增加。我们想知道为什么别人拿到的点赞数会比自己的多。于是我们开始给自己日常的在线行为放大功率:想变得更有趣、更刻薄、更迷人、更极端。

代码塑造了我们的生活。就像风投家Marc Andreessen所写那样:“ 软件蚕食整个世界”,尽管此刻说软件正在消化世界可能会更准确些。

从文化角度上来讲,代码是比较下层的存在。我们可以感觉到它对我们日常现实的神秘影响,但是却很少能看到它,而且对于非初学者来说有点高深莫测。(硅谷的人喜欢这样这有助于他们自我神话为巫师。)我们给电影、游戏和电视都立了十大排行榜,让那些塑造了我们灵魂的作品扬名立万。但是,即便代码跟这些类型的作品一样反映了时代思潮,我们却未曾坐下来汇编过世界上最重要的代码清单。

所以Slate杂志决定自己来做这件事。为了弄清楚有哪些让世界为之倾斜的软件,杂志编辑对计算机科学家、软件开发人员、历史学家、政策制定者以及新闻工作者进行了民意调查。这些人需要做出以下选择:哪些代码段影响巨大?哪些代码改变了我们的生活?约有75位受访者提出了各种各样的想法,Slate从中选择了36位。鉴于写成的有影响的代码如汗牛充栋,这里的清单并不完整,也不可能完整。(我很喜欢的一个并没有人选:快速排序算法!或者Ada Lovelace的伯努利算法也许也算一个。)就像所有的榜单一样,它的目的是启发,去帮助我们重新思考代码是如何影响我们的生活,以及程序员所做的决策是如何影响未来的。

里面的有些代码你可能已经听说过,比如HTML什么的。有的代码功能强大(比如用来对概率建模的蒙特卡洛模拟),但一般人完全不知道是什么。有的则包含了致命错误,比方说波音737 Max的缺陷。还有一些令人毛骨悚然,比方说让营销人员知道你是否已打开电子邮件的像素跟踪。

有一个趋势是很明显的:最重要的代码往往会通过消除阻力来塑造新行为。当软件让做某件事情变得更容易时,这种事情我们就会做得更多。1988年编写的代码第一次建立起“Internet Relay Chat(IRC,多人在线交谈系统)”,这使得早期的网民彼此可以实时进行文字聊天。现在,实时文字聊天已经无处不在,从令人应接不暇的Slack职场闲聊吹水,到Twitch直播的钓鱼和反钓鱼之战,不一而足。

某些代码什么时候具备了划时代意义未必总是很清晰。一开始它只是个怪异的尝试,一个实验气球。《Spacewar !》是第一个获得病毒式流行的视频游戏。可是在1961年的时候,用价值12万美元(相当于2019年的100万美元)的机柜式计算机万游戏被视为一种相当无聊的使用方式。但是它独创了很多帮助计算机进入主流的概念:用图标表示数据,让用户用手持控制器操作这些图标。

代码的影响可能会让所有人感到惊讶,包括写代码的人在内。—Clive Thompson,《程序员: 新部落的形成和世界的重塑(Coders: The Making of a New Tribe and the Remaking of the World)》作者

年代:1725

第一段代码

二进制编程早在计算机诞生之前就有了。大家认为Basile Bouchon 是第一个给纸片打孔并用来控制机器的人:1725年,他发明了一种织布机,这种机器可以根据送入的穿孔卡片的指令编织图案。打孔的是“1”,没有打孔是“0”。尽管此后东西发生了很大的变化,但代码的基本构建块并没有改变。— Elena Botella ,Slate

年代:1948

既开辟了计算机代码的使用,也引领了塑造冷战军备竞赛的核毁灭计算机模型的使用

ENIAC(电子数字积分计算机)是第一台可编程的电子计算机。机器于1945年建成,每解决一个新问题都要靠重新连线许多部件来完成。当一项任务(比如加法)完成时,会用一个脉冲来触发下一项任务。但是几年后,克拉拉· 丹·冯·诺依曼和洛斯阿拉莫斯的科学家Nicholas Metropolis对ENIAC重新进行了接线,让这台机器跑出来有史以来在任何计算机上执行的第一段现代代码:从可寻址只读存储器(ENIAC的函数表开关)执行数百条数字指令。他们模拟了新墨西哥州洛斯阿拉莫斯国家实验室正在评估的几种原子弹设计的爆炸情况,用蒙特卡洛技术来模拟一个复杂系统,几乎是一步步地把可能结果的概率分布呈现出来。冯·诺依曼和Metropolis)向洛斯阿拉莫斯的核科学家发送了20000多张卡片,跟踪弹头引爆后模拟中子的变化情况。知道今天,这段代码的子孙后代还在洛斯阿拉莫斯那里发挥作用。—Thomas Haigh ,《ENIAC in Action: Making and Remaking the Modern Computer(ENIAC实战:现代计算机的制造和改造)》合著者

年代:1952

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

IF END OF DATA GO TO OPERATION 14 .

来自维基百科

当Grace Hopper决定通过以人类语言为基础来简化整个过程时,她正在对一台早期计算机进行编程。二战期间,Hopper加入了美国海军预备队,她知道,像她在部队的上司一样,大家都在努力去理解二进制代码。而如果编程语言是基于英语的话,那么这项工作就不会那么容易出错,并且对于那些没有数学博士学位的人来说也更加平易近人了。

一些人对这种想法嗤之以鼻,但1950年代初时,她设计出了一种编译器,也就是一组可以将更容易理解的代码转化为由机器处理的较低级代码的指令。通过这一工具,她和她的实验室开发出了FLOW-MATIC,这是第一种将英语纳入该过程的编程语言。——Molly Olmstead,Slate

年代:1961年

发行的第一款视频游戏

/ this routine handles a non-colliding ship invisibly / in hyperspace hp1, dap hp2 count i ma1, hp2 law hp3 / next step dac i ml1 law 7 dac i mb1 random scr 9s sir 9s xct hr1 add i mx1 dac i mx1 swap add i my1 dac i my1 xct hr2 dac i mdy dio i mdx setup .hpt,3 lac ran dac i mth hp4, lac i mth sma sub (311040 spa add (311040 count .hpt,hp4 xct hd2 dac i ma1 hp2, jmp .

Steve Russell,收集自Bitsavers.org

1961年末,一群年轻的MIT雇员、学生和同事(其中很多是Tech Model Railroad俱乐部的成员)拿到了最近别人捐赠的DEC PDP-1计算机的深夜使用权。属于非军事计算前沿技术的PDP-1售价为12万美元(按今天计算将超过100万美元),字长达18位,程序存储用的是纸带。这帮程序员用五个月的时间开发了一个游戏,里面是两名玩家控制着飞船(针和楔形物)进行一对一的太空战,同时还要避开位于屏幕中心的恒星的引力。

很快,星际飞行!就在早期的“黑客”社区中传播开来。后来DEC把它预装进了每一台PDP-1里面,并预装到核心内存里面,准备在安装时进行演示。这个程序对1960年代规模还很小的编码社区产生了重大影响,并启发了后面数代的视频游戏创作者。现在它还从模拟者那里找到自己的存在,并且在计算机历史博物馆的最后一台可操作PDP-1上还在定期演示。2018年,游戏的首席开发者Steve Russell在史密森尼学会上说:“它已有50多年的历史。没有未解决的用户投诉。没有崩溃报告。而且支持依旧提供。”——Arthur Daemmrich ,导演,勒梅森发明与创新研究中心

年代:1965

拜托,这是电子邮件。

WHENEVER A(1).E.FENCE.OR.A(2).E.FENCE.OR.A(3).E.FENCE PRFULL.(