ITADN
facundoolano/software-papers
facundoolano/software-papers · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

面向软件工程师的论文 workflow

一份经过精选的论文列表,可能对软件工程专业的学生或从业者感兴趣。 请参阅下方的来源选择标准


按主题划分的论文列表
  1. 冯·诺依曼的第一个计算机程序。Knuth (1970).
    计算机历史;早期编程

  2. Computing Machinery and Intelligence. Turing (1950).
    早期人工智能

    • Some Moral and Technical Consequences of Automation. Wiener (1960).
    • Steps towards Artificial Intelligence. Minsky (1960).
    • ELIZA—a computer program for the study of natural language communication between man and machine. Weizenbaum (1966).
    • A Theory of the Learnable. Valiant (1984).
  3. 一种构造最小冗余码的方法。Huffman (1952).
    信息论

  4. 工程化排序函数。 Bentley, McIlroy (1993).
    数据结构;算法

  5. 可靠软件系统的设计方法论。 Liskov (1972).
    软件设计

  6. 面向初学者的编程范式:每个程序员都应知道的知识。 Van Roy (2012).
    编程范式

  7. 编译器构建的增量方法。 Ghuloum (2006).
    语言设计;编译器

  8. 没有银弹:软件工程的本质与偶然。 Brooks (1987).
    软件工程;项目管理

  9. 通信顺序进程。Hoare (1978).
    并发

  10. UNIX 分时系统。Ritchie, Thompson (1974).
    操作系统

  11. 大型共享数据库的关系数据模型。Codd (1970).
    数据库

  12. 用于分组网络互连的协议。Cerf, Kahn (1974).
    网络

  13. 密码学的新方向。Diffie, Hellman (1976).
    密码学

  14. 分布式系统中的时间、时钟与事件排序。 Lamport (1978).
    分布式系统

  15. 为可用性而设计:关键原则与设计者的思考。 Gould, Lewis (1985).
    人机交互;用户界面

  16. 大规模超文本 Web 搜索引擎的解剖。 Brin, Page (1998).
    信息检索;万维网

  17. Dynamo,Amazon 的高可用键值存储。DeCandia et al (2007).
    互联网规模数据系统

  18. On Designing and Deploying Internet Scale Services. Hamilton (2007).
    运维;可靠性;容错

  19. Bitcoin, 一种点对点的电子现金系统。Nakamoto (2008).
    去中心化分布式系统;点对点系统

  20. 关于机器学习需要知道的几件有用的事。Domingos (2012).
    机器学习


仅限顶级论文
  1. 冯·诺依曼的第一个计算机程序。Knuth (1970)]

  2. 计算机器与智能。Turing (1950)]

  3. 一种构造最小冗余码的方法。Huffman (1952)]

  4. 工程化排序函数。Bentley, McIlroy (1993)]

  5. 可靠软件系统的设计方法论。Liskov (1972)]

  6. 面向初学者的编程范式:每个程序员都应知道的内容。Van Roy (2012)]

  7. 编译器构造的增量方法。Ghuloum (2006)]

  8. 没有银弹:软件工程的本质与偶然。Brooks (1987)]

  9. 通信顺序进程。Hoare (1978)]

  10. UNIX 分时系统。Ritchie, Thompson (1974)]

  11. 大型共享数据库的关系数据模型。Codd (1970)]

  12. 分组网络互连协议。Cerf, Kahn (1974)]

  13. 密码学的新方向。Diffie, Hellman (1976)]

  14. 分布式系统中的时间、时钟与事件排序。Lamport (1978)]

  15. 为可用性设计:关键原则与设计者的思考。Gould, Lewis (1985)]

  16. 大规模超文本 Web 搜索引擎的解剖。Brin, Page (1998)]

  17. Dynamo,Amazon 的高可用键值存储。DeCandia et al (2007)]

  18. 关于设计和部署互联网规模服务。Hamilton (2007)]

  19. Bitcoin, A peer-to-peer electronic cash system. Nakamoto (2008).

  20. A Few Useful Things to Know About Machine Learning. Domingos (2012).


按时间顺序排列的所有论文
  1. 我们如何思考。 Bush (1945).

  2. 计算机器与智能。 Turing (1950).

  3. 印刷英语的预测与熵。 Shannon (1950).

  4. 计算机的教育。 Hopper (1952).

  5. 一种构造最小冗余码的方法。 Huffman (1952).

  6. 关于图的最短生成子树与旅行商问题。 Kruskal (1956).

  7. 人机共生。 Licklider (1958).

  8. 关于图论中两个问题的注记。 Dijkstra (1959).

  9. 递归编程。 Dijkstra (1960).

  10. 自动化的某些道德与技术后果。 Wiener (1960).

  11. 迈向人工智能。 Minsky (1960).

  12. 符号表达式的递归函数及其机器计算。 McCarthy (1960).

  13. 快速排序。 Hoare (1962).

  14. 一个实验性分时系统。 Corbató, Merwin Daggett, Daley (1962).

  15. 将编程视为一种人类活动。 Dijkstra (1965).

  16. 并发程序控制问题的一个解。 Dijkstra (1965).

  17. 关于可访问计算的社会影响的一些思考。 David, Fano (1965).

  18. ELIZA——一个用于研究人与机器之间自然语言通信的计算机程序。 Weizenbaum (1966).

  19. 接下来的700种编程语言。 Landin (1966).

  20. Goto语句被视为有害。 Dijkstra (1968).

  21. 委员会如何发明? Conway (1968).

  22. “THE”多道程序系统的结构。Dijkstra (1968).

  23. 冯·诺依曼的第一个计算机程序。Knuth (1970).

  24. 允许误差的哈希编码中的空间/时间权衡。Bloom (1970).

  25. 大型软件系统的开发管理。Royce (1970).

  26. 多道程序系统的核心。Hansen (1970).

  27. 大型共享数据库的关系数据模型。Codd (1970).

  28. 通过逐步求精进行程序设计。Wirth (1971).

  29. 谦逊的程序员。Dijkstra (1972).

  30. 可靠软件系统的设计方法论。Liskov (1972).

  31. 关于将系统分解为模块时应使用的准则。Parnas (1972).

  32. 设计方法论的信息分布方面。Parnas (1972).

  33. 检索中术语特定性的统计解释。Spärck Jones (1972).

  34. 计算机编程作为一门艺术。Knuth (1974).

  35. 使用抽象数据类型进行编程。Liskov, Zilles (1974).

  36. 监视器:一个操作系统结构化概念。Hoare (1974).

  37. UNIX 分时系统。Ritchie, Thompson (1974).

  38. 分组网络互连协议。Cerf, Kahn (1974).

  39. 尽管存在分布式控制,系统仍能自稳定。Dijkstra (1974).

  40. 人月神话。Brooks (1975).

  41. 共享数据库中的锁粒度与一致性程度。Gray et al (1975).

  42. 谓词逻辑作为编程语言的语义。Van Emden, Kowalski (1976).

  43. 密码学的新方向。Diffie, Hellman (1976).

  44. 一种用于顺序数据压缩的通用算法。Ziv, Lempel (1977).

  45. Smalltalk-76 编程系统的设计与实现。Ingalls (1978).

  46. 编程中的类型多态性理论。Milner (1978).

  47. 编程能否从冯·诺依曼风格中解放出来?Backus (1978).

  48. 通信顺序进程。Hoare (1978).

  49. 关于操作系统结构的对偶性。Lauer, Needham (1978).

  50. 以太网:用于本地计算机网络的分布式分组交换。Metcalfe, Boggs (1978).

  51. 一种获取数字签名和公钥密码系统的方法。Rivest, Shamir, Adleman (1978).

  52. 分布式系统中的时间、时钟和事件排序。Lamport (1978).

  53. 编程范式。Floyd (1979).

  54. 无处不在的 B 树。Comer (1979).

  55. 设计易于扩展和收缩的软件。Parnas (1979).

  56. 关系数据库管理系统中的访问路径选择。Selinger et al (1979).

  57. 如何分享秘密。Shamir (1979).

  58. 应用语言的语义优雅性。Turner (1981).

  59. 事务概念:优点与局限。Gray (1981).

  60. 面向首次计算机用户的教程。Al-Awar, Chapanis, Ford (1981).

  61. 拜占庭将军问题。Lamport, Shostak, Pease (1982).

  62. 星形用户界面:概述。Smith, Irby, Kimball (1982).

  63. 人机界面设计原则。Norman (1983).

  64. 自动化的讽刺。Bainbridge (1983).

  65. 文学化编程。Knuth (1984).

  66. 可学习性理论。Valiant (1984).

  67. 编程珠玑:算法设计技术。Bentley (1984).

  68. 编程珠玑:信封背面的计算。Bentley (1984).

  69. 关于信任信任的思考。Thompson (1984).

  70. 系统设计中的端到端论证。Saltzer, Reed, Clark (1984).

  71. 编程即理论构建。Naur (1985).

  72. 论理解类型、数据抽象和多态性。Cardelli, Wegner (1985).

  73. 一种在扩展局域网中计算生成树的分布式算法。Perlman (1985).

  74. 存在一个故障进程时分布式共识的不可能性。Fisher, Lynch, Patterson (1985).

  75. 为可用性而设计:关键原则及设计师的思考。Gould, Lewis (1985).

  76. 计算机为何停止以及能做什么?Gray (1985).

  77. 使数据结构持久化。Driscoll et al (1986).

  78. 编程珠玑:小语言。Bentley (1986).

  79. POSTGRES 的设计。Stonebraker, Rowe (1986).

  80. 没有银弹:软件工程的本质与偶然。Brooks (1987).

  81. 基于传统加密函数的数字签名。 Merkle (1987).

  82. DARPA 互联网协议的设计哲学。 Clark (1988).

  83. 为什么函数式编程很重要。 Hughes (1990).

  84. 使用状态机方法实现容错服务:教程。 Schneider (1990).

  85. 信息管理:一项提案。 Berners-Lee (1990).

  86. SELF:简洁的力量。 Ungar, Smith (1991).

  87. 关于构建将会失败的系统。 Corbató (1991).

  88. 日志结构文件系统的设计与实现。 Rosenblum, Ousterhout (1991).

  89. 函数式编程的本质。 Wadler (1992).

  90. 工程化一个排序函数。 Bentley, McIlroy (1993).

  91. 使用续体进行编译的本质。 Flanagan et al (1993).

  92. 软件老化。 Parnas (1994).

  93. 重访软件演化定律。 Lehman (1997).

  94. 软件事务内存。 Shavit, Touitou (1997).

  95. 人机交互:作为设计科学的心理学。 Carroll (1997).

  96. 香农理论的五十周年。 Verdú (1998).

  97. 大教堂与集市。 Raymond (1998).

  98. 大规模超文本 Web 搜索引擎的解剖。 Brin, Page (1998).

  99. PageRank 引用排名:为 Web 带来秩序。 Page, Brin, Motwani (1998).

  100. 实时群组编辑器中的操作变换:问题、算法与成果。Sun, Ellis (1998).

  101. 数据工程中的经验法则。Gray, Shenay (1999).

  102. 实用拜占庭容错。Castro, Liskov (1999).

  103. QuickCheck:一种用于 Haskell 程序随机测试的轻量级工具。Claessen, Hughes (2000).

  104. 简化的 Paxos。Lamport (2001).

  105. 统计建模:两种文化。Breiman (2001).

  106. 恢复导向计算 (ROC):动机、定义、技术与案例研究。Patterson et al (2002).

  107. Kademlia:基于 XOR 度量的点对点信息系统。Maymounkov, Mazières (2002).

  108. 即时编译简史。Aycock (2003).

  109. Google 文件系统。Ghemawat, Gobioff, Leung (2003).

  110. 仅崩溃软件。Candea, Fox (2003).

  111. 激励机制构建 BitTorrent 的健壮性。Cohen (2003).

  112. LLVM:一个用于终身程序分析与转换的编译框架。Lattner, Adve (2004).

  113. 垃圾回收的统一理论。Bacon, Cheng, Rajan (2004).

  114. TOR:第二代洋葱路由器。Dingledine et al (2004).

  115. MapReduce:大型集群上的简化数据处理。Dean, Ghemawat (2004).

  116. 用于编译器教育的 Nanopass 框架。Sarkar, Waddell, Dybvig (2005).

  117. 丘奇论题与函数式编程。Turner (2006).

  118. An Incremental Approach to Compiler Construction. Ghuloum (2006).

  119. Out of the Tar Pit. Moseley, Marks (2006).

  120. Why the Internet only just works. Handley (2006).

  121. Bigtable: A Distributed Storage System for Structured Data. Chang et al (2006).

  122. The Salsa20 family of stream ciphers. Bernstein (2007).

  123. Paxos made live - An Engineering Perspective. Chandra, Griesemer, Redstone (2007).

  124. Dynamo, Amazon’s Highly Available Key-value store. DeCandia et al (2007).

  125. On Designing and Deploying Internet Scale Services. Hamilton (2007).

  126. Bitcoin, A peer-to-peer electronic cash system. Nakamoto (2008).

  127. Building on Quicksand. Helland, Campbell (2009).

  128. The Unreasonable Effectiveness of Data. Halevy, Norvig, Pereira (2009).

  129. ZooKeeper: wait-free coordination for internet scale systems. Hunt et al (2010).

  130. The Hadoop Distributed File System. Shvachko et al (2010).

  131. Kafka: a Distributed Messaging System for Log Processing. Kreps, Narkhede, Rao (2011).

  132. Conflict-free Replicated Data Types. Shapiro et al (2011).

  133. Programming Paradigms for Dummies: What Every Programmer Should Know. Van Roy (2012).

  134. CAP Twelve Years Later: How the "Rules" Have Changed. Brewer (2012).

  135. A Few Useful Things to Know About Machine Learning. Domingos (2012).

  136. 使用深度卷积神经网络进行 ImageNet 分类。Krizhevsky, Sutskever, Hinton (2012).

  137. 使用深度强化学习玩 Atari。Mnih et al (2013).

  138. 网络是可靠的。Bailis, Kingsbury (2014).

  139. 寻找可理解的共识算法。Ongaro, Ousterhout (2014).

  140. IPFS - 内容寻址、版本化、P2P 文件系统。Benet (2014).

  141. Ethereum:下一代智能合约和去中心化应用平台。Buterin (2014).

  142. 生成对抗网络。Goodfellow et al (2014).

  143. 迈向软件概念设计理论。Jackson (2015).

  144. 深度学习。LeCun, Bengio, Hinton (2015).

  145. 使用 WebAssembly 提升 Web 速度。Haas (2017).

  146. Amazon Aurora:高吞吐量云原生关系型数据库的设计考量。Verbitski et al (2017).

  147. 注意力就是你所需要的一切。Vaswani et al (2017).

  148. 本地优先软件:尽管有云,你仍拥有你的数据。Kleppmann et al (2019).

来源

本列表受到(并取材于)多本书籍和论文集的启发:

元阅读

以下是来自 Papers We Love 及其他来源的一些关于阅读论文的有趣资源:

选择标准

  1. 列表应保持简短。例如,不超过 30 篇论文。
    • 其目的并非收录我遇到的每一篇有趣论文,而是维护一份具有代表性的列表,使其能够以与通读一本技术书籍相当的精力从头到尾读完。
    • 我尝试为每个主要主题和作者各收录一篇论文。由于在此过程中我发现了许多值得注意的替代方案、相关或后续论文,并希望同时记录这些内容,因此我将它们作为子列表项包含在内。
  2. 论文不应过长。基于与上一条相同的原因,我尽量避免收录超过 20 或 30 页的论文。
  3. 它们应当是自包含的,并且足够易读,以便普通技术读者能够轻松入门。
  4. 它们应当可以免费在线获取。
  5. 尽管考虑了历史相关性,但在以下情况下我省略了开创性论文:当我发现它们难以入门时,当论文的主要主题并非使其具有影响力的原因时,等等。
    • 这方面的例子包括冯·诺依曼、图灵和香农的经典著作。
    • 话虽如此,在可能的情况下,我倾向于选择每个主题的原始论文,而非现代更新或综述论文。
  6. 我倾向于偏好那些与我专业实践相关的主题,通常是源自工业界 或关于后来被广泛采用的创新的论文。
  • 同样,我倾向于跳过更多理论性论文,例如那些专注于计算机科学数学基础、硬件电子学等方面内容的论文。
  1. 我按照主题相关性和模糊的时间顺序混合对列表进行了排序,以便按照建议的顺序阅读是合理的。例如,历史性和开创性的主题排在前面,当代互联网时代的发展排在最后,网络学先于分布式系统等。