杰米·扎温斯基定律是什么意思?


Answers:


39

到目前为止,所有答案(和评论)似乎都完全集中在声明的前半部分,当它成为下半部分的重要部分时,就变成了“膨胀”的注释:那些不能如此扩展的程序被替换为哪个行。

这不是关于软件膨胀,而是关于市场的现实。人们可能会他们想要一个简单的产品,但是当您查看实际使用情况时,所使用的东西就是允许用户做更多事情的东西,最终他们替换了功能较弱的工具。

问题的一部分是“简单”是一个令人困惑的词。像“分裂”一样,它可能意味着两个几乎完全相反的事物。人们想要的是可以简化复杂任务的东西。那就是“很好的简单”,并且需要很多复杂性才能正确执行。但是,有些人将其解释为人们想要简单化或简约化的东西。这个概念可能有一定的吸引力,但总的来说,在设计产品时要注意的是“简单”的错误类型。无论您的工作多么出色,对新功能的要求都会不断增加。

举个例子,有我正在工作的程序。您可能从未听说过它,但我们是专业行业的市场领导者:媒体控制。我们的程序很可能会运行您喜欢的电视和/或广播电台。客户的厚爱,他们说这是这么比什么都重要,他们曾经使用过好得多。

这也是巨大的。EXE的大小超过65 MB,具有大约400万行代码,并由超过150个表的数据库作为后盾,这些数据库是在十多年的工作过程中建立的。但是,似乎每次我们尝试将其安装在某个新的站点或网络上时,对于他们的工作流来说,绝对有一两件事是绝对必要的,我们对此没有任何支持。因此,我们最终添加了新功能,因为否则客户将不希望从他们已经习惯的系统中切换。让我重复一遍,顾客喜欢它。


20
最终,这个software肿的软件被一个新的竞争对手取代,它“精简而卑鄙”,并且每次都会添加一个必需的功能,直到它具有其前任所拥有的所有功能为止……
jhonkola 2012年

嗯,我认为Zawinski的声明涵盖了这一部分:“接下来,我设计了Terry Weissman和我实现的Netscape Mail and News客户端,版本2.0到3.0。这是我们对证明软件封装法则的贡献”,但现在我已经重新阅读了,目前还不清楚。
扬尼斯2012年

1
@jhonkola,如果代码能够满足客户的需求,并且仅能满足客户的需求,那么它的功能就不会太多。

1
@ThorbjørnRavnAndersen我同意,我的意思是,当软件(以及用户/客户)越来越流行时,用户要求并最终实现的功能数量将会增加。
jhonkola 2012年

1
如果您的解释正确,则Zawinski的评论是夸夸其谈,而不是自嘲。我觉得很难相信。
–ctn

12

您必须了解这是很久以前发生的,那时对于给定的用户,计算机一次只能运行多个程序还不是主流。用于个人计算机的DOS(可能是Windows 3)和用于Unix用户的基于字符的终端(只有少数具有X11)。

这意味着为了检查您是否收到电子邮件,必须退出当前正在执行的操作,启动邮件程序,阅读邮件,退出邮件程序并重新启动旧程序。我想您会看到,如果您当前的程序可以让您阅读电子邮件,则可以避免所有这些事情。

因此,如果您当前的程序无法阅读您的电子邮件,则倾向于这样做(请记住这是MIT学生),或切换到可以阅读的电子邮件。

这些天,这是很难想象的,但你可以通过限制自己一个得到它是如何的端倪单个浏览器窗口-无标签,无额外的窗户-也许甚至没有使用书签。


9

正如其他人已经提到的,“法律”是对软件膨胀分数蠕变的幽默观察,它与Greenspun的第十条规则非常相似:

任何足够复杂的C或Fortran程序都包含一个临时的,非正式指定的,bug缠身的,缓慢执行的Common Lisp的一半。

法律体现Zawinski撰写与Netscape浏览器,后来与Netscape邮件和新闻工作,如所描述这里的,好了,自语道:

接下来,我设计了Terry Weissman,并实现了Netscape Mail and News客户端,版本2.0到3.0。这是我们对软件封装法则的证明:

“每个程序都会尝试扩展,直到可以读取邮件为止。那些无法扩展的程序将被可以扩展的程序替换。”

Netscape浏览器是当时最流行的浏览器,经常因其自身的功能过多而受到批评,如果我没误会的话,它是最后一个支持两个渲染引擎Gecko和Trident的(流行的)浏览器。例如,Ben Goodger指出Netscape的膨胀是导致创建Firefox 1的众多原因之一:

Mozilla的UI功能异常

由于Netscape产品的大多数用户界面设计是由Netscape员工按照Netcenter要求完成的,因此Mozilla用户界面受到了影响。Mozilla套件不是干净的核心,Netscape可以在其上构建满足其需求的产品,而从来没有感觉到完全正确。它充满了笨拙的UI构造,这些构造只存在于Netscape私有源存储库(“商业树”)中的覆盖层中。

加剧这种功能失调的是,当时CPD内不同部门之间(有时连接不佳)的一百多名工程师正在开发该项目。Netscape在过去几年中发展迅速,并且招聘酒吧工程师的能力参差不齐,这表明他们需要其他人的更多帮助,因此功能设计和实现方面的自主权过高。用户体验帮助很少,结果该应用程序迅速膨胀。

1来自本·古德格(Ben Goodger)现在已失效的博客的存档版本


5
啊...这解释了Emacs :-)
jwernerny 2012年

9
@jwernerny 什么也不能解释Emacs ...
扬尼斯2012年

4
@MichaelKohne-出于同样的原因,我认为Emacs是Matrix的早期非图形实现。
马丁·贝克特

2
同样,我得出的结论是,格林斯潘的第十条规则是从本质上在足够复杂的程序中发现的,必须具有在运行时提供代码的能力。

2
@jwernerny我相信这里有整页都在谈论:jwz.org/doc/lemacs.html
Michael

4

这不是一条真正的法律,而是对软件项目(如果管理不当)如何变得如此庞大和复杂的讽刺性评论,它们最终以某种方式包括电子邮件阅读器(即使与项目的初衷无关) 。我曾经有一个经理喜欢一个类似的短语:“任何足够复杂的系统中都包含一个半确定的LISP实现”。


2
亦称“格林斯潘的第十条规则”。
杰里·科芬

1
@JerryCoffin:谢谢,我不知道它的名字!en.wikipedia.org/wiki/Greenspun%27s_tenth_rule
FrustratedWithFormsDesigner

3

这是对某些软件项目似乎如何继续扩展并添加越来越多功能的评论。

无论是否需要,许多项目似乎都无法抵抗添加功能。

一个合理的结论是,每个软件最终都会发送邮件。

另请参阅范围蠕变


邮件通信是在某些地方从软件向人类发送通知的方法。
保罗·内森

发送邮件比阅读邮件更合理。我的路由器可以经常向我发送其日志,但是没有理由接受邮件。同样,许多Android程序都会通过电子邮件发送图像等以用于共享目的。
珍妮·平达

-1

我至少看到三种查看方式。

一种是忽略邮件阅读本身,而将其视为一种陈述,即人们似乎喜欢可以灵活地执行几乎所有任务的产品,而不管它与工具的原始意图有多小的关系。如果我们这样看,像Photoshop这样的不支持邮件阅读的产品就不是异常,因为它的插件体系结构足够灵活,可以支持邮件阅读,即使(据我所知)没有这样的插件存在。当“灵活性胜过专业化”时,可以更清晰地总结这种观点,但不是那么原始。

第二种查看方式是,杰米·扎温斯基(Jamie Zawinski)的注意力很狭窄,以至于他只是忽略了已经存在多年,不支持邮件阅读并且不支持此类产品的产品,例如Photoshop,PowerPoint,大多数游戏等。似乎并没有被其他任何一种替代。

第三个与第二个相对,这表示,实质上,产品之间的集成已达到某种程度,以至于有效地将邮件阅读功能集成到了所有内容中,因为现在大多数人都在后台运行邮件阅读器,时间,并且可以快速/轻松地切换到该时间,用其他任何东西剪切和粘贴等,因此邮件阅读器作为单独的应用程序打包的次要细节变得无关紧要。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.