第四战略篇:膨胀软件与80/20的谣传

原创 2004年07月26日 22:57:00
作者: Joel Spolsky
译: Bo Yang
编辑: Wenjing Jiang
2001323

1993年,微软公司的电子表格软件Excel 5.0出版了。它是一个巨大的软件,需要15兆的硬盘空间。当年我们还记得最早上市(1985年左右)的PC硬盘只有20兆,所以15兆显得很多。

等到Excel 2000出版的时候,它竟需要146兆的硬盘空间,几乎增长到1993年的十倍!微软公司的程序员真是差劲,对不对?

不对。

我敢打赌,你以为我要写一篇令人厌烦的,批评膨胀软件的文章。这种文章因特网上到处都是。批一批,怨一怨,这些庞大臃肿的软件,令我讨厌,还是vi和edlin比Microsoft Word与Emacs强多了,因为前两者很小巧灵活...

哈哈,把你蒙了!我才不会去写一篇那样的文章呢,因为那种说法根本不对。

1993年,根据当时硬盘的价格,Microsoft Excel 5.0占用了$36元的硬盘空间。

2000年,根据当时硬盘的价格,Microsoft Excel 2000占用了$1.03元的硬盘空间。

(这些数字是根据此处的硬盘历史价格数据计算的,以把通货膨胀的效果算进去了。)

从实际经济角度出发,Excel好像变小了!

说真格的,什么叫膨胀软件?Jargon File把它嘲贬地定义为:“提供最低等的功能,同时占用不成比例的磁盘与内存空间的软件。特别是形容应用软件与操作系统升级来用的。此词在Windows/NT上是常见的,Windows/NT也是它的来源。”

我猜这帮人只不过是恨Windows而已。自从虚拟内存在Windows 386(1989年)上出现后,我已经有十多年没有把内存用完过了。再说硬盘价格已经降到$0.0071元一兆,而且越降越快。

也许Linus ?kerlund能把这个问题解释清楚。他在他的网页 上写道:“这些膨胀软件的一个大缺点,就是即使你只想干一件很小的事,你也要负载这个很大的程序。它把你的内存全用掉了…你不是很有效地利用你的系统。它毫无必要地把你系统的效率弄得很低。”

我明白了,原来它把你的内存都用完了。嗯,不对。自从Windows 1.0在1988年出版以后,操作系统只把用到的代码页放在内存中。如果你有一个15兆的可执行文件,但运行时只用到两兆的代码页,操作系统就只把这两兆从磁盘装入内存中。而且如果你用的是比较现代版的Windows的话,操作系统还会自动调整硬盘,把这两兆代码页放在一起,使程序起动得更快。

我想没有人会否定,在今天强大而便宜的计算机上,起动一个大程序比仅仅五年前起动一个小程序还要快。那么那些人在瞎叫唤什么呢?

RA Downes给了我们一个提示。看起来他花了几个钟头,把Microsoft的一个小程序研究了一通,而且因为这个程序有一兆大小,令他十分气愤(他写那篇文章,一兆硬盘只值3.15分)。以他看来,那个程序应该小下去95%才对。可笑的是,他研究的那个程序叫做RegClean,你很可能没听说过。它的作用,是把Windows registry中没用的东西找出来删掉。如果你整天为Windows registry中没用的东西担心的话,你性格上很可能有为事物着迷,难以克制的弱点。所以我怀疑批判膨胀软件是精神病 的体现,不是软件问题。

实际上讲,膨胀软件的存在是有道理的。最起码的,如果程序员不用担心软件的大小,那么软件就可以早点出版。用户可以早点得到更多的功能。这些功能用时有益,不用时无害。假如你的软件商在出版软件之前,花两个月的时间,把它的软件缩小50%,这对你的实际好处来说,几乎是感觉不到。也许,你的硬盘要是快满了的话,你可以多下载一首MP3歌曲。可是你多花两个月的时间,等新软件出版的损失,你就感觉得到了。而且你的软件商会丢掉两个月的销售额,损失更大。

很多搞软件开发的人,被"80/20"的老规律引诱了。这个规律好像很有道理:80%的人只用20%的功能。所以你以为,只要实现20%的功能,就能得到80%的销售量。

不幸的是,那从不是同样的20%。每个人都用到不同的功能。再过去十年中,我大概听说过几十家公司,下定决心不互相吸取教训,企图出版“轻形”版本,只有20%的功能的文字处理软件。大多数情况是,他们把软件送到记者哪里去评论,那些记者评论的方法,就是用这个新的文字处理软件去写他们的评论文章。文章写完了,记者就要用到“字数”这个功能了,因为大多数记者写文章时有明确的字数限制。可是“字数”这个功能在软件里却找不到,因为它是属于“没人用的80%”里面。结果记者就会写一篇文章,一方面说着这个“轻形” 软件怎么怎么好,膨胀软件怎么怎么糟,另一方面又说我不能用这个软件,因为它没有“字数”这个功能。而且这种文章 经常有人写。

当你去推销你的“轻形” 软件时,你跟人家说:“嗨,这个软件很小巧,只有一兆。” 人家听了一般都很高兴,然后就会问你有没有对于他们来说很重要的功能,要是没有,就不会买你的软件。

基本概要是:如果你的战略是“80/20”,你就很难卖出你的软件。事实就是这样。这个战略自从软件工业开始时就有,从来没有胜利过。令人吃惊的是,很多倒闭了的公司的高级主管还觉得它是个好的主意。

Jamie Zawinski 在讨论改变世界的首版Netscape时讲得最好:“Mozilla [Netscape 1.0]很大并不是因为里面全是没用的东西(如果真是那样,解释起来倒很方便)。Mozilla很大,是因为你的需要很大。你的需要很大,是因为因特网是个很大的东西。网上有很多小型的浏览器,说起来基本上是没用的。我们当初写Mozilla的时候,从未想把它做成一颗完美无缺的明珠。”



本文最先用英文出版,题为 Strategy Letter IV: Bloatware and the 80/20 Myth  

在软件开发中应用80:20原则

本文来源于我在InfoQ中文站原创的文章,原文地址是:http://www.infoq.com/cn/news/2013/11/80-20-rules-software-devJim Bird是一位经...
  • ricohzhanglong
  • ricohzhanglong
  • 2013年11月19日 23:53
  • 3160

软件测试的原则

在软件测试中有很多重要的指导原则,这些原则看上去大多是显而易见的,但是总是被我们忽略,作为虫师,我们当然应该把这些原则牢记于心,作为专业测试人员的基本素养。 原则1 测试用例中一个必需部分是对预期输...
  • aertimiss
  • aertimiss
  • 2014年04月23日 16:34
  • 797

软件测试中的80/20原则

80% 的软件缺陷常常生存在软件 20% 的空间里。这个原则告诉我们,如果你想使软件测试有效地话,记住常常光临其高危多发 “ 地段 ” 。在那里发现软件缺陷的可能性会大的多。这一原则对于软件测试人员提...
  • niqinwen
  • niqinwen
  • 2013年04月15日 13:00
  • 508

软件测试中80/20原则

80% 的软件缺陷常常生存在软件 20% 的空间里。这个原则告诉我们,如果你想使软件测试有效地话,记住常常光临其高危多发 “ 地段 ” 。在那里发现软件缺陷的可能性会大的多。这一原则对于软件测试人员提...
  • u011793251
  • u011793251
  • 2016年05月20日 16:43
  • 1737

专访戴文渊:第四范式(现在)是一家怎样的公司?

李根 发自 凹非寺  量子位 报道 | 公众号 QbitAI △ 第四范式创始人及CEO戴文渊 第四范式是一家备受关注的公司。 仅创始团队成员来看,哪一个不是计算机、机器学习领...
  • yH0VLDe8VG8ep9VGe
  • yH0VLDe8VG8ep9VGe
  • 2017年12月06日 00:00
  • 327

棋盘问题---状态压缩

例题:         在n*n(n≤20)的方格棋盘上放置n个车(可以攻击所在行、列),求使它们不能互相攻击的方案总数。 如果用组合学的角度来考虑此问题,那么非常简单:         我们一行一行...
  • lijunqiangacm
  • lijunqiangacm
  • 2013年07月31日 18:58
  • 1567

披荆斩棘——我的2015

路越走越清晰,人越活越明白。———— 题记一 对我来说,今年是切切实实的学校到社会的过渡之年。对于这个鸿沟,很多人如白猿一般飞度而过,而我,我认为或许是最笨的办法,那就是先从山的一侧攀援而下,再从另...
  • xinzhangyanxiang
  • xinzhangyanxiang
  • 2016年02月19日 17:01
  • 5813

machine-learning第四周 上机作业

本周开始学习大名鼎鼎的神经网络,赶脚忽然高大上了有木有,一键识别直男腐女,想想都醉了。话不多说,本期作业要点:...
  • dialoal
  • dialoal
  • 2016年01月12日 18:11
  • 1299

自动化测试实施策略(自动化测试经验分享)

自动化测试一直都不是件容易的事。在研发团队广泛采用UI框架和敏捷开发来提升交付效率的今天,Web自动化测试变得愈发困难;Web开发过程中UI框架的广泛采用极大提高了开发效率和用户体验,也从技术的角度保...
  • yangyinsong815
  • yangyinsong815
  • 2016年04月24日 21:16
  • 450

防止模板代码膨胀

转载自百度文库 模板导致的代码膨胀问题和解决 模板是一种源码复用技术,在某些情况下使用它可以使代码看起来非常优雅,著名的boost库就是模板发扬的典范. 然而模板也存在弊端,大量使用模板可能导...
  • jiuduying
  • jiuduying
  • 2013年07月16日 19:07
  • 833
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第四战略篇:膨胀软件与80/20的谣传
举报原因:
原因补充:

(最多只允许输入30个字)