Richard Stallman 提出「更糟即更好」设计哲学
来源标题:The Rise of Worse is Better (1991)
Richard Stallman 在文章中提出「worse-is-better」设计哲学,认为这种看似较差的设计策略在软件领域比 MIT 的「the-right-thing」方法更具生存优势。他将早期 Unix 和 C 语言视为新泽西方法的代表,与 Common Lisp 和 Scheme 所代表的 MIT 方法形成对比。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
我以及几乎所有 Common Lisp 和 CLOS 的设计者,都深受 MIT/斯坦福设计风格的熏陶。这种风格的精髓可以用“做正确的事”来概括。对于这样的设计者而言,把以下所有特性都做对至关重要:
我相信大多数人都会认同这些是好的特性。我将这种设计哲学的运用称为 MIT 方法。Common Lisp(含 CLOS)和 Scheme 代表了 MIT 的设计与实现方法。
“更差即更好”哲学则略有不同:
早期 Unix 和 C 是这一设计流派的应用实例,我将这种设计策略的运用称为新泽西方法。我故意对“更差即更好”哲学做了夸张的讽刺描绘,是想让你们相信它显然是一种糟糕的哲学,新泽西方法是一种糟糕的方法。
然而,我相信“更差即更好”——即便以其稻草人形式出现——也比“做正确的事”具有更好的生存特性,而且用于软件时,新泽西方法比 MIT 方法更好。
让我先讲一个故事,它表明 MIT/新泽西的区分是成立的,而且两种哲学的信奉者都真心相信自己的哲学更好。
两位名人,一位来自 MIT,另一位来自伯克利(但从事 Unix 工作),曾会面讨论操作系统问题。来自 MIT 的那位了解 ITS(MIT AI 实验室的操作系统),并且读过 Unix 源码。他感兴趣的是 Unix 如何解决 PC loser-ing 问题。PC loser-ing 问题出现在用户程序调用系统例程执行一个可能带有大量状态(如 IO 缓冲区)的耗时操作时。如果操作期间发生中断,就必须保存用户程序的状态。由于系统例程的调用通常是一条指令,用户程序的 PC 不足以完整捕捉进程状态。系统例程必须要么回退,要么继续推进。正确的做法是回退,并把用户程序的 PC 恢复到调用系统例程的那条指令,以便中断后恢复用户程序时,例如重新进入该系统例程。之所以叫 PC loser-ing,是因为 PC 被强制进入 loser 模式,而 loser 在 MIT 是对用户的爱称。
MIT 那位没有看到任何处理这种情况的代码,便问新泽西那位这个问题是如何处理的。新泽西那位说,Unix 的人知道这个问题,但解决方案是让系统例程总是执行完毕,不过有时会返回一个错误码,表示系统例程未能完成其动作。于是,正确的用户程序必须检查错误码,以决定是否简单地重试该系统例程。MIT 那位不喜欢这个方案,因为它不是正确的做法。
新泽西那位说,Unix 的解决方案是对的,因为 Unix 的设计哲学是简单,而“做正确的事”太复杂。再说,程序员可以很容易地插入这个额外的测试和循环。MIT 那位指出,实现是简单,但功能的接口复杂。新泽西那位说,Unix 选择了正确的权衡——即实现简单比接口简单更重要。
MIT 那位于是嘟囔了一句“有时候需要硬汉才能做出嫩鸡”,但新泽西那位没听懂(我也不确定我懂不懂)。
现在我想论证“更差即更好”更好。C 是一门为编写 Unix 而设计的编程语言,它是用新泽西方法设计的。因此,C 是一门容易写出像样编译器的语言,它要求程序员编写易于编译器解释的文本。有人称 C 为花哨的汇编语言。早期 Unix 和 C 编译器结构简单、易于移植、运行所需机器资源少,并提供你想要的操作系统和编程语言功能的约 50%–80%。
任何时刻存在的计算机中有一半比中位数更差(更小或更慢)。Unix 和 C 在它们上面运行良好。“更差即更好”哲学意味着实现简单具有最高优先级,这意味着 Unix 和 C 易于移植到这类机器上。因此,人们预期,如果 Unix 和 C 所支持的 50% 功能令人满意,它们就会开始到处出现。它们确实如此,不是吗?
Unix 和 C 是终极计算机病毒。
“更差即更好”哲学的另一个好处是,程序员习惯于牺牲一些安全性、便利性、省心程度,以换取良好性能和适度的资源占用。用新泽西方法编写的程序在小机器和大机器上都能很好地工作,而且代码可移植,因为它是建立在病毒之上的。
重要的是要记住,初始病毒必须基本是好的。如果是这样,只要可移植,病毒式传播就有保证。一旦病毒传播开来,就会有压力去改进它,可能是把功能提升到接近 90%,但用户已经被驯化到接受比“正确的东西”更差的东西。因此,“更差即更好”的软件首先会获得认可,其次会驯化其用户预期更低,第三会被改进到几乎就是正确的东西的程度。具体来说,尽管 1987 年的 Lisp 编译器与 C 编译器差不多好,但想改进 C 编译器的编译器专家比想改进 Lisp 编译器的多得多。
好消息是,1995 年我们将拥有一个好的操作系统和编程语言;坏消息是,它们将是 Unix 和 C++。
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。