译者 | 晶颜
审校 | 重楼
在软件开发历史中,有一些时刻扩展了我们认为的可能性,从而改变了我们作为开发人员所做的一切。某些历史文献记录了计算技术中最重要的范式转变,它们是无价的。这篇文章回顾了过去一个世
纪的软件开发历史,总结了每位开发人员都应该阅读的9篇非凡文献。
在软件开发史上具有决定意义的9篇文献
论可计算数及其在判定性问题上的应用
作者:艾伦·图灵(Alan Turing)
时间:1936年
这是一个范例文件的原型。图灵的作品具有这样的特点:在纸上探索不确定的地形,并找到地标来绘制地图。这张特殊的地图已经为我们服务了近一百年。
这篇论文提出了一种新的抽象计算模型,后来被称之为“图灵机”。图灵机是一种理论上的机器,它的构造非常简单,由一条无限长的纸带和一个能够在纸带上左右移动的可读写头组成。纸带被划分成了一个个格子,每个格子上可以写入一个符号(0或者1)。可读写头能够读取当前所在格子上的符号,并根据一些规则改变自己的移动方式和纸带上的符号。这些规则被称为“转移函数”,它们描述了图灵机在读取某个符号时应该采取什么行动,例如改变当前格子上的符号、向左或向右移动可读写头、或者停机等。
图灵机的能力基本上就只有这些。但当艾伦仔细思考图灵机的能力和限制时,发现图灵机能够解决所有可计算问题,而无法解决不可计算问题。在论文中,艾伦给出了计算的定义,并对计算所能实现的目标给出了绝对限制,这一发现也成为了现代计算机科学的奠基之作。
《论可计算数》(On Computable Numbers)在很多层面上都是必读的,包括作为哥德尔(Gödel)不完备定理的延续。此外,图灵的“判定性问题”(Entscheidungsproblem)是一个有趣的窗口,它将数学、逻辑和计算机科学结合在一起。它要求在给定的一组公理中,对于给定的输入,有一种推导是/否真理的通用方法。
传送门:https://www.cs.virginia.edu/~robins/Turing_Paper_1936.pdf
关于EDVAC的报告初稿
作者:约翰·冯·诺依曼(John von Neumann)
时间:1945年
《关于EDVAC的报告初稿》是第一份系统描述计算机制造方法的公开出版物,具有划时代的革新意义。
冯·诺伊曼提出的EDVAC(电子离散变量自动计算机)架构是一种突破,计算机的内存可以同时存储数据和指令。换句话说,内存可以保存可执行的信息。除了核心理念之外,作者还定义了当时机器的可能性。从图灵的哲学数学讨论到冯·诺伊曼对信息的实际讨论,这是一个巨大的飞跃。
这篇论文有各种有趣的想法,包括关于计算中的错误处理的想法:“设备可以自动识别最常见的故障,通过外部可见的标志指示它们的存在和位置,然后停止。”冯·诺伊曼的论文站在了现代计算机的大门上,以一种半真实、半推测的方式描述了我们今天使用的设备的性质。这就是计算机的一般架构仍然被称为冯·诺依曼架构的原因所在。
不过,尽管《关于EDVAC的报告初稿》描述的是工程学和数学领域的研究成果,但它的遣词造句通俗而又浅显,几乎人人都能看懂。
传送门:https://web.mit.edu/STS.035/www/PDFs/edvac.pdf
IBM数学公式翻译系统的规范,FORTRAN
作者:约翰·巴克斯等人(John Backuss et al)
时间:1954年
虽然FORTRAN规范没有公开发布,但它对语言设计和软件产生了很大的影响。
FORTRAN是编程语言的古老祖先,是当时高级语言的一项突破。它是第一个真正通用的语言。
试想一下,当图灵在1936年构想出计算机仅仅28年之后,便诞生了FORTRAN语言,其重要性不言而喻。
FORTRAN规范给出了一个很好的起点,并帮助创建了一个语言设计者可以依赖的模型。它抓住了一种蓬勃发展的契机,即当时的硬件和软件刚刚成为可能。
传送门:https://archive.computerhistory.org/resources/text/Fortran/102679231.05.01.acc.pdf
GoTo语句有害论
作者:艾兹格·迪科斯彻(Edsger Dijkstra)
时间:1968年
Edsger Dijkstra这篇发表于1968年的论文除了给我们提供有关“有害论”的梗之外,不仅指出了循环和条件控制流相对于难以遵循的go-to语句的优越性,而且激发了一种思考和讨论代码质量的新方式。
Dijkstra的论文给了我们一个完整的环境,一种对编程的态度,以及一种用一页半的篇幅来看待这个学科的方式。
在这里,我们不仅要考虑软件在编写和运行时的结构,还要考虑工作的特征和我们作为其中的人的角色。这让我们对软件工程文化有了一个粗略的了解,它是一种充满激情的努力;这种文化支撑着我们今天在软件领域所做的一切。
Dijkstra的简短论述还帮助引领了高阶语言的产生,使我们离今天使用的编程语言更近了一步。
传送门:https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf
密码学的新方向
作者:惠特菲尔德·迪菲(Whitfield Diffie)和马丁·E·赫尔曼(Martin E. Hellman)
时间:1976年
这篇论文在三个方面表现突出:
- 这个提议乍一看似乎不可能。
- 该解决方案优雅且易于理解。
- 它改变了历史的进程。
如果你已经知道非对称加密的密钥交换是如何工作的,那么你就知道为什么这篇论文会在我们的名单上。公钥/非对称加密的发现和发明为互联网上所有安全通信(如HTTPS)奠定了基础,并为32年后的比特币白皮书奠定了基础。
《密码学新方向》一问世,就在公开通信和国家安全局(NSA)等政府间谍机构之间掀起了一场史诗般的战斗。作者似乎也明白他们的提议的激进本质——毕竟,论文的开场白是:“我们今天站在密码学革命的边缘。”
传送门:https://www-ee.stanford.edu/~hellman/publications/24.pdf
GNU宣言
作者:理查德·斯托曼(Richard Stallman)
时间:1985年
进入八十年代后,黑客社群在软件工业商业化的强大压力下日渐土崩瓦解,甚至连AI实验室的许多黑客也组成了Symbolic公司,试图以专利软件来取代实验室中黑客文化的产物——免费可自由流通的软件。
斯托曼对此感到气愤与无奈。在对Symbolic进行了一段时间的抗争后,他于1985年发表了著名的《GNU宣言》,正式宣布要开始进行一项宏伟的计划:创造一套完全自由免费,兼容于Unix的操作系统GNU(GNU's Not Unix!)。之后他又建立了自由软件基金会来协助该计划。
从某种意义上说,《GNU宣言》是开源软件的宣言。这也是对当今许多开发人员所信奉的“热爱IT”编程精神的大胆声明。
该宣言可读性强,有趣,反对当时主导行业的闭源、付费许可模式。令人难以置信的是,历史证明,这是勇敢的少数派取得胜利的一个例子。如今,开源软件无处不在,为热爱它而编程,同时也以此为生,已经成为一种主流方式。
时至今日,《GNU宣言》仍然不过时,读起来甚至就像2023年为GitHub项目写的一样。它无疑是这份名单上最有趣的论文。
传送门:https://www.gnu.org/gnu/manifesto.en.html
架构风格和基于网络的软件架构设计
作者:罗伊·菲尔丁(Roy Fielding)
时间:2000年
虽然这篇论文是在2000年发表的,但它总结了90年代分布式编程环境的经验教训,然后提出了前进的方向。由此,我认为它应该在二十年的软件开发历史中占有一席之地。
该论文收集了开发人员从早期互联网中学到的一切,并为其最紧迫的问题提供了解决方案。REST很重要,因为它瞄准了现代软件复杂性的核心。这就是为什么20年来它一直是架构决策的试金石。
此外,作者关于复杂性和Web架构中的应用设计的讨论也很适合今天的开发人员阅读。
传送门:https://ics.uci.edu/~fielding/pubs/dissertation/top.htm
比特币:点对点电子现金系统
作者:中本聪
时间:2008年
这篇论文汇集了数字货币的所有现有技术,并总结了其主要问题的解决方案。特别是,比特币论文解决了双重支出问题。
它很好地用简单的语言概述了双重支出的问题,然后提供了一个概念性的回应,然后深入研究了解决方案的一些实现细节。
除了像比特币这样的简单货币概念之外,该论文还提出了一种可以利用密码学来生产像以太坊这样的分布式虚拟机的引擎。
这篇比特币论文是一个很好的例子,说明了如何为看似混乱的复杂性提供一个简单、干净的解决方案。
传送门:https://bitcoin.org/bitcoin.pdf
TensorFlow:用于大规模机器学习的系统
作者:马丁·阿巴迪(Martin Abadi)等人
时间:2015年
如果你正在寻找现代大语言模型(LLM)人工智能系统道路上的一个重要里程碑,那么一定非TensorFlow白皮书莫属。它与广义机器学习框架的讨论相关,并详细介绍了TensorFlow——一个旗舰AI平台。
虽然这篇论文深入地研究了机器学习池的复杂一端,但它也给出了简洁的提炼结果,例如,“给定一个单词序列,语言模型预测最有可能的下一个单词。”这是对现代聊天AI原理和现实的简明总结。
这篇论文由Martín Abadi和许多贡献者共同撰写,内容十分广泛,重点聚焦TensorFlow的细节,特别是在制作更通用的人工智能平台方面。在这个过程中,它提供了一个优秀的、高层次的机器学习技术之旅。对于那些好奇ML和寻找简单语言进入更深层次理解领域的人来说,这是一个不容错过的读物。
传送门:https://www.usenix.org/system/files/conference/osdi16/osdi16-abadi.pdf
原文标题:9 extraordinary documents every developer should read,作者:Matthew Tyson