原文信息
- 标题: The Pendulum Swings Eternal
- 作者: Hillel Wayne
- 原文链接: https://buttondown.email/hillelwayne/archive/the-pendulum-swings-eternal/
原文的翻译与发布经过了作者授权。以下是由 Claude 3 初步翻译并由我润色修改的译文。
永恒的钟摆
当你开始研究软件历史时,你会注意到一个常见模式:
- 人们有一个有缺陷的“东西”,称之为X。
- 为了摆脱X的缺陷,他们转向Y。Y也有缺陷,但以不同的方式。这些人比较了X和Y的缺陷,认为对于他们的用例来说,Y更合适。
- Y的使用开始流行。随着时间的推移,越来越少的人使用X,越来越多的人使用Y。
- 最终,大多数人只熟悉Y。他们不记得X,也不记得人们当初为什么选择Y。
- 人们使用Y。Y同样存在缺陷。
- 为了摆脱Y的缺陷,他们转向X’。X’也有缺陷,但以不同的方式…
我将其可视化为一个巨大的傅科摆,来回摆动。每次摆动不尽相同,而且通常X’要么是X的改进版,要么是X中不同部分的一种变体。更重要的是X和Y这两种范式的对立,因为采用一种就是拒绝另一种。一些例子:
- 客户端与服务器: 主机、小型和微型计算机、Web 服务器上的计算、Web 客户端上的计算。在服务器上渲染 HTML,然后在 JavaScript 中渲染,然后又回到服务器渲染。
- 前期设计: 我们以前写代码的那些临时方式启发了“瀑布模式”,然后是方法论之战,最终产生了像“统一软件开发过程”这样的东西,后被“极限编程”和“敏捷开发”所拒绝。随着形式化方法越来越受欢迎,钟摆刚开始朝另一个方向摆动。
- 第三方库: 很多人抱怨 NPM 程序包的膨胀和依赖链攻击。30年前,“缺乏库是软件膨胀的原因”。
流行语言从高性能转向“开发者幸福感”,然后又回到性能。云端与裸机。单体应用到微服务再到单体应用。Flux 和 WndProc。大多数钟摆只会影响几个社区,而且很多时候在逆转方向之前就不会完全摆动。就像大多数 SQL 与 NoSQL 的转换实际上并不是那么大,但它们仍然遵循相同的弧线1。
为什么会发生这种情况?
有几个原因。第一次远离X通常来自于成本收益分析。他们了解X的利弊,对Y的利弊也有一些怀疑。就他们的用途而言,使用Y比使用X更有意义。但随着Y在主流中取代X,会发生两件事:
- 人们默认使用Y,即使在Y是最差选择的地方。这在新手中尤其常见,他们从未学习过X,只是在Y已成为一切的环境中长大。
- 人们在没有X的优点和Y的缺点的平衡力量时,会变得更加极端地使用Y,从而进入设计空间中“奇怪”2的地方。完全拒绝估计和规划。为了一行代码就导入整个包链。单页应用用于服务文本3。
这就产生了两股反作用力:寻找Y的替代品的人和怀疑Y的极端形式的人。然后有一些事情可能会吸引人们回到X:
- 使用X的社区实际上从未消亡,它们只是变得默默无闻。它们继续探索设计空间并找到了更加令人满意的X’,这吸引了远离Y的人。人工智能热潮通常遵循这种模式,尽管它更像是一种繁荣至衰落的周期,而不是钟摆运动4。
- X和Y的对比非常明显,任何远离Y的人都可以从第一性原理重新发现X的本质。第三方库就是一个显而易见的例子。
- 计算环境发生变化,使得X的优点变得更加重要。客户端与服务器之争正是如此:随着不同类型的计算设备的普及,要求也在改变。
最吸引我的是,这总是看起来像是“重新开始”。采用X’的人通常不了解X。对他们来说,他们正在第一次采用Y的替代品。历史和背景都被遗忘了5。
(如果有什么的话,对于这一点来说,拥有历史视角似乎是一种负担。如果人们确实了解X,通常会用来攻击X’,因为我们曾经使用过X,却转而使用Y)
为什么这很重要?
首先,我认为基本上不可能阻止这种情况发生。即使我让前期设计成为主流,10-15年后人们也会再次拒绝它。所以这里有一种谦逊的因素,我知道这是无法避免的。这也意味着我拒绝的任何范式,拒绝并不一定是因为它们本质上很差,而是因为大众舆论正在远离它们。也许最终我会遇到这是正确选择的情况,或者偶然发现让我很满意的变体。
更实用地说,这是一种启发式研究方法。我们可以研究钟摆之前的摆动,通过将X’与被“遗忘”的X进行比较,从而获得更多关于我们将走向何方的洞见。如果我们只有Y,而且它在当前环境中并没有帮助我们,我们可以利用钟摆推断出X的存在,并开始将其作为一种替代方案进行研究。
不过,最重要的是,这是理解事物的一个有用视角。当我通过这种视角来观察时,我发现可以更好地理解软件历史和文化。