跳至正文
杂学书库让好奇心有所归处
简体中文

比硬件变快更快地变慢:沃斯定律(Wirth’s Law)

新买的笔记本电脑在头几个月里非常快。可是操作系统和程序更新几次之后,它不知不觉就像旧电脑一样开始卡顿。芯片年年变快,体感速度却迟迟不见提升。有一句话用一句话点破了这种奇妙的现象,那就是“沃斯定律(Wirth’s Law)”。

简单来说,沃斯定律指的是“软件变慢的速度比硬件变快的速度更快”这一经验法则。无论硬件进步多少,软件都会先把这些提升吃掉,因此用户感受到的速度原地踏步,甚至不进反退。

本文将依次介绍沃斯定律的由来、软件变得臃肿的原因、当今我们身边可见的例子,以及打造精简软件的方法。

沃斯定律说明图。在假设示例中,工作量为4、处理速度为1时需要4秒,工作量为12、处理速度为2时需要6秒,说明当工作量的增长超过硬件速度的提升时,等待时间可能会变长。图中建议专注于必要功能、减少不必要的代码,并测量速度和内存。
这是为理解沃斯定律而简化的假设示例,并非实际基准测试。出处:Niklaus Wirth,“A Plea for Lean Software”,Computer 28(2),64–68(1995)。论文原文

追赶更快芯片的臃肿软件

沃斯定律从何而来?

20世纪90年代瑞士大学机房的木桌上,摆着一台屏幕昏暗的米色旧工作站、显像管显示器、键盘和鼠标、一摞封面空白的学术期刊和一个咖啡杯,窗外隐约可见群山

这条定律得名于瑞士计算机科学家尼克劳斯·沃斯(Niklaus Wirth)。沃斯在1970年发布了编程语言Pascal,并于1984年获得被誉为计算机科学界诺贝尔奖的图灵奖。

(1) 《精简软件的呼吁》
1995年,沃斯在学术期刊《计算机》(Computer)上发表了一篇题为《精简软件的呼吁》(A Plea for Lean Software)的文章。他在文中把“软件变慢的速度比硬件变快的速度更快”这句话作为同事马丁·赖泽(Martin Reiser)的话加以介绍,这句话后来被称为沃斯定律。

(2) 用数字看臃肿的软件
沃斯写道,仅仅约25年前,交互式文本编辑器用8,000字节就能做出来,编译器则必须装进32千字节以内。然而它们的后代却需要以兆字节计的内存,他批评说,若不是硬件快了大约一千倍,这些软件根本无法使用。

(3) 与摩尔定律成对的观察
如果说摩尔定律(Moore’s Law)是预测半导体芯片上的晶体管数量会持续翻倍,那么沃斯定律就是相反一面的观察:由此获得的性能并没有原封不动地回到用户手中。沃斯写道,从1978年到1993年,英特尔80×86系列处理器的性能提高了335倍,同时补充说,软件无止境的胃口却丝毫没有减小的迹象。


软件为什么越来越臃肿?

平静的海面上,一只轻巧的小纸船漂在一艘装载了过多彩色集装箱的巨大货轮旁,比喻精简软件与臃肿软件

沃斯指出了人们轻易接受软件膨胀的两个原因。一是硬件性能提升得太快,二是消费者分不清必要功能和锦上添花的功能。

(1) 功能蔓延(Feature Creep)
每推出新版本就添上一两个功能,久而久之,连大多数人几乎不用的功能也越积越多,程序随之变得臃肿。沃斯尖锐地指出,人们把复杂误当成了精巧。

(2) 层层叠加的抽象层(Layers of Abstraction)
把让开发更轻松的工具和库叠上好几层,开发速度虽然加快了,运行时要经过的步骤也相应增多。

(3) 对快速硬件的信赖
一旦“反正电脑会变快,优化以后再做也行”的想法蔓延开来,打磨效率的工作就会被往后推。正如沃斯引用的另一句话所说,软件会不断膨胀,直到占满可用的内存。


今天我们身边的沃斯定律

明亮的书桌前,一位年轻上班族看着只显示模糊加载图标的新笔记本电脑屏幕,露出有些烦闷的表情,旁边放着熄屏的智能手机、盆栽和咖啡杯

沃斯定律在每个时代都换着名字反复上演。20世纪90年代流行一句玩笑:“英特尔给的,微软都拿走了。”2009年在谷歌开发者大会上,谢尔盖·布林也以联合创始人拉里·佩奇的名字,把同样的现象称为“佩奇定律”。

  • 即时通讯应用(Messenger Apps):收发文字这件事古今无异,但一个应用占用数百兆字节内存已是常事。
  • 网页(Web Pages):读几段新闻,却要连同广告、跟踪代码乃至视频播放器一起下载,页面因此迟迟打不开。
  • 文字处理软件(Word Processors):输入、删除、移动文字的基本工作没变,安装容量和启动时间却一版比一版多。沃斯指出,有了窗口和图标,并不意味着编辑器的本来任务发生了变化。
  • 手机系统更新(OS Updates):新操作系统按最新设备打造后,用了几年的设备做同样的事也会明显变慢。

打造精简软件的方法

整洁的白色书桌上,开发者的双手小心地从一座整齐堆叠的木块塔中抽出几块小木块,旁边放着熄屏的轻薄笔记本电脑和一套精密螺丝刀

沃斯没有止步于批评,而是亲自做出了榜样。1986年至1989年,他与同事尤尔格·古特克内希特(Jürg Gutknecht)仅凭两人之力打造了名为Oberon的操作系统,还一并设计了同名编程语言。包括编辑器和编译器在内,Oberon的核心还不到200千字节。

(1) 专注于本质
先确定真正必要的功能,其余部分则拆分开来,只让需要的人自行添加使用。

(2) 持续测量性能
每加入一项新功能就测量运行速度和内存用量,及早察觉程序一点点变重的趋势。

(3) 敢于删减的勇气
沃斯说,编程中最大的满足感来自成功删掉某样东西的时候。删除不再使用的代码,和添加功能一样重要。


沃斯定律提醒我们,在硬件进步替软件掩盖赘肉的同时,有些代价很容易被忽视。要让用户随着芯片变快而享受到更快的体验,开发者必须从一开始就把效率和简洁作为标准。这也与减少电力消耗和设备更换成本息息相关。

与其先想着添加,不如先考虑删减,这正是开发快速而持久的软件的第一步。