每个开发人员应阅读的10篇论文

18-12-17 banq

这是来自Michael Feathers的推荐:

过去十年来,我们在行业中取得了一个有趣的转折。我们更加重视体验式学习,并且我们已经重新获得了强烈的实用主义关注,但我认为如果我们忽略了过去50年来人们学到的一些更深层次的东西,那将是一种耻辱。重新发现它们会很痛苦,(对我而言)不知道它们会是一种耻辱。

  • 关于将系统分解为模块的标准 - David Parnas
  • 关于分布式计算的一个注记 - Jim Waldo,Geoff Wyant,Ann Wollrath,Sam Kendall
  • 下一个700编程语言 - PJ兰丁
  • 编程可以从冯诺依曼风格中解放出来吗? - 约翰巴克斯
  • 关于相信信任的思考 - 肯汤普森
  • Lisp:好消息,坏消息,如何赢大 - 理查德加布里埃尔
  • 多版本编程中独立性假设的实验评估 - 约翰奈特和南希莱维森
  • 争论和结果 - Noble
  • 面向对象思维教学的实验室 - Kent Beck,Ward Cunningham
  • 作为一种体验编程:自我的灵感 - David Ungar,Randall B. Smith

关于将系统分解为模块的标准 - Parnas

这是一篇非常古老的论文,但它不仅仅是一本经典之作。在其中,Parnas是引入了单一责任原则的先行者。他介绍了我们应该使用模块化来隐藏设计决策的想法 - 隐藏那些可能会变化的事情。如今人们仍然不会经常考虑这一点。

在这论文中我真正喜欢的另一件事是他对KWIC系统的评论,他以此为例。他提到一个好的程序员需要一两个星期才能编码,今天,人们几乎没有时间。

关于分布式计算的一个注记 - Waldo,Wyant,Wollrath,Ken​​dall

抽象很棒,但它只能走得那么远。在本文中,作者奠定了曾经普遍存在的神话 - 我们可以设计一个分布式系统并使分发透明化。有没有想过在Java中为什么你必须实现特定的接口来进行远程处理?这本书告诉为什么。

下一个700编程语言 - 兰丁

我们大多数人都花了很多时间在传统的编程语言中工作,但是函数式编程语言正在逐渐增加,许多OO语言正在获得函数性特性。本文(读作教程)为面向表达式的编程风格提出了论据。它还为懒惰评估奠定了基础。

编程可以从冯诺依曼风格中解放出来吗? - 巴克斯

约翰巴克斯以其在计算机科学方面的一些成就而闻名。他因在Fortran工作而获得ACM图灵奖。他在颁奖典礼上发表的这篇论文当时相当令人震惊,因为它本质上说“我们弄错了。”巴克斯借此机会推荐纯函数式编程。他的论点令人信服,他们帮助制定了一个刚刚开始在主流中掀起波澜的研究议程。

关于相信信任的思考 - 汤普森

我曾经听说过,当这篇论文发表时,阅读后的人都会赶回去编译他们的C编译器并寻找问题。本文揭示了计算机安全核心的难题。如果您花了很多时间考虑安全性,那么您需要阅读它。

Lisp:好消息,坏消息,如何赢得大奖 - 加布里埃尔

本文在此列表中有点不典型。它针对的是Lisp社区,它有点像哀叹。但是,深藏在其中的是加布里埃尔对“更好的更糟糕”哲学的描述 - 这一理念对技术的接受和传播具有深远的影响。

多版本编程中独立性假设的实验评估 - 约翰奈特和南希莱维森

关于程序正确性的讨论,事实证明,其他学科的工程师采取的其中一个途径是让他们的产品更强大 - 冗余 - 在软件中并不真正起作用。多版本编程的想法是,您可以通过将规范交给多个团队,让他们独立开发软件,然后让系统并行运行来减少关键系统中的故障。监控过程会验证其结果,如果存在任何差异,则会选择最常见的结果。听起来应该有用,对吧?

争论和结果 - Noble

我认为这个列表中的所有其他论文在某些圈子中都是众所周知的。这个则不是,我喜欢这篇论文的是它需要我们每天处理的事情 - 论证集和函数结果 - 它通过一系列变化来实现它们,这些变化对很多人来说都是不会发生的。事实上,你使用的每个函数都有许多可能的方向,如果可以进化的话。并非所有函数都适用,但如果你知道可能的方向,你就会更加丰富。

面向对象思维教学的实验室 - Kent Beck,Ward Cunningham

关于面向对象的论文数量令人难以置信,它的伟大是它的直接性。OO经历了多个阶段。它曾经是新鲜和新颖的,然后它是华丽的,然后它变得事实。本文探讨了许多人不再谈论的关键思想:拟人化和放弃top/down视角。它还向您展示了如何使用索引卡进行设计。它可能听起来不是很酷,但却非常有效。

编程作为经验:自我的灵感 - Ungar,史密斯

有多少人知道自我项目?在我看来还不够,自我试图在计算中采用两个想法并尽可能地推动它们。第一个是极简主义:自编程语言完全在Lisp和Smalltalk静脉中 - 一切都是根据可能的最小数量的原语来定义的;另一个想法是直接操作 - 对象化方式在用户界面中一直被应用得很好 - 程序员和用户用鼠标坐在可直接点击的对象的海洋中并将它们用于一切。

今天最广泛分布的编程语言(JavaScript)是一种基于原型的编程语言,它借用了超级研究和自我的思想,这也是一种更为反常的讽刺。

1
Jinglmalan
2018-12-20 18:50

居然没有Eric Raymon的论文 The Cathedral and the Bazaar. 差评