更坏就是更好(Worse Is Better)

<p style="text-indent: 21pt;">我非常愿意将这个观点介绍给大家,第一是它并不被很多人所知,更重要的是它有非常深刻的内涵道理。</p>
<h3>发展历史</h3>
<p style="text-indent: 21pt;">这是Richard P. Gabriel 先生根据自己的亲身经历得出的著名论断。Gabiel在Lisp编程语言特别是Common Lisp上的著名专家。在1985~1994之间,他有一家Lisp公司,名字叫Lucid。但是运营的境况并不是很好。在1989年的一次Lucid走廊会谈中,他被一些Hackers问及为什么的时候,他开玩笑地说:“因为,嗯,更坏的就是更好的。”</p>
<p style="text-indent: 21pt;">在几个月后的,在一个叫EuroPAL(European Conference on the Practical Applications of Lisp)的小型Lisp会议上,他被邀请去定一个基调。他将自己在Lucid上的一些经验想法总结,并形成了一篇著名的报告:《Lisp: Good News, Bad News, How to Win Big.》[<a href="http://www.dreamsongs.com/WIB.html"><font color="#669966">html</font></a>] [<a href="http://www.dreamsongs.com/Files/LispGoodNewsBadNews.pdf"><font color="#669966">pdf</font></a>]。</p>
<p style="text-indent: 21pt;">在这篇报告上,他第一次提出了"Worse-Is-Better"的观点。但是,Gabriel关于它的完整想法并没有形成的。他自己本人也在反复探索中。在接下来的几年里,他发表了另外几篇文章,并阅读了很多书籍来验证自己的观点。这期间分别发表过下面的一些文章(包括别人反驳的)。</p>
<ol>
<li>
<div style="text-indent: 21pt;">1991~1992年冬天,《<a href="http://www.dreamsongs.com/Files/worse-is-worse.pdf"><font color="#669966">Worse Is Better Is Worse</font></a>》</div>
</li>
<li>
<div style="text-indent: 21pt;">1992年在Journal of Object-Oriented Programming(JOOP)上发布的反驳Gabriel的文章:《<a href="http://www.dreamsongs.com/Files/IsWorseReallyBetter.pdf"><font color="#669966">Is Worse Really Better?</font></a>》</div>
</li>
<li>
<div style="text-indent: 21pt;">2000年,在OOPSLA上,Gabriel发表了《<a href="http://www.dreamsongs.com/Files/WorseIsBetterPositionPaper.pdf"><font color="#669966">Back to the Future: Is Worse (Still) Better?</font></a>》</div>
</li>
<li>
<div style="text-indent: 21pt;">同年一个月后,他又发表了《<a href="http://www.dreamsongs.com/Files/ProWorseIsBetterPosition.pdf"><font color="#669966">Back to the Future: Worse (Still) is Better!</font></a>"》</div>
</li>
</ol>
<h3>观点描述</h3>
<p style="text-indent: 21pt;">在《Lisp: Good News, Bad News, How to Win Big》的2.1章节"The Risk of Worse is Better"中,Gabreil提到了更坏就是更好的设计理念原则。</p>
<p style="text-indent: 21pt;">他先提到了普遍认为是“好”的设计原则:</p>
<ol>
<li>
<div style="text-indent: 21pt;">
<strong>简单性</strong>:在实现和接口中,设计必须简单。接口的简单性比实现更重要。 </div>
</li>
<li>
<div style="text-indent: 21pt;">
<strong>正确性</strong>:在所有可观察的方面,设计都必须正确。一丝的错误都是不允许的。 </div>
</li>
<li>
<div style="text-indent: 21pt;">
<strong>一致性</strong>:设计不能不一致。为了避免不一致性,可以稍微减少一些简单性和完整性。一致性和正确性同样重要。</div>
</li>
<li>
<div style="text-indent: 21pt;">
<strong>完整性</strong>:实际上,设计必须覆盖许多重要的情况。应该覆盖可能出现所有情况。简单性不可以过度地削弱完整性。</div>
</li>
</ol>
<p style="text-indent: 21pt;">他又提到了“更坏是更好”的设计原则:</p>
<ol>
<li>
<div style="text-indent: 21pt;">
<strong>简单性</strong>:在实现和接口中,设计必须简单。相对于接口而言,实现的简单性更为重要。简单性是设计中最重要的注意事项。 </div>
</li>
<li>
<div style="text-indent: 21pt;">
<strong>正确性</strong>:在所有可观察的方面,设计都必须正确。正确性的重要程度仅次于简单性。 </div>
</li>
<li>
<div style="text-indent: 21pt;">
<strong>一致性</strong>:设计不能过于不一致。在某些情况下,为了实现简单性可以牺牲一致性,但放弃设计中处理非常见情况的那些部分比引入实现复杂性或不一致性更好。</div>
</li>
<li>
<div style="text-indent: 21pt;">
<strong>完整性</strong>:实际上,设计必须覆盖许多重要的情况。应该覆盖可能出现所有情况。为保证其它质量,可以牺牲完整性。实际上,只要危害到实现简单性,就必须牺牲完整性。如果保证了简单性,可以牺牲一致性以实现完整性;尤其是在接口的一致性没有价值的情况下。 </div>
</li>
</ol>
<p style="text-indent: 21pt;">对比两点不同,我们不难发现“更坏是更好”的要点。其观点几乎可以用另外一句话来概括:“Simple is Best”,但这只是我为了帮助大家理解,杜撰的一句话。</p>
<h3>经典案例</h3>
<p style="text-indent: 21pt;">Gabriel经常提到的就是Lisp和传统的Unix和C语言对比。Unix和C在设计上,充分考虑了实际环境,而放弃了一些一致性和完整性,保证了简单性。这点让C和Unix在历史的选择中胜出。C++也是如此。</p>
<p style="text-indent: 21pt;">David Mertz博士在《XML 问题 #15: 将 XML-RPC 作为对象模型》中,提出的XML-RPC案例也支持了这个观点:</p>
<blockquote>
<p style="text-indent: 21pt;">XML-RPC 是一个具有很大价值的远程函数调用协议:它比所有竞争对手都差。与 Java RMI 或 CORBA 或 COM 相比,XML-RPC 可以发送的数据类型很少,而其消息的大小却很庞大。XML-RPC 滥用 HTTP 协议以避开完全有必要存在的防火墙,因此会发送无状态消息并造成通道瓶颈。与 SOAP 相比,XML-RPC 缺少了重要的安全性机制和健壮的对象模型。作为数据表示法,与许多本机编程语言机制(如 Java 的 serialize 、Python 的 pickle 、Perl 的 Data::Dumper 或 Ruby、Lisp、PHP 和许多其它语言的类似模块)相比,XML-RPC 显得缓慢、笨拙且不完整。 </p>
<p style="text-indent: 21pt;">换句话说,XML-RPC 是 Richard Gabriel 关于软件设计的“更坏就是更好”理念(请参阅 参考资料)的完美体现。对于 XML-RPC,我几乎不能写出比上一段中更生动的描述,而且我认为这个协议非常适合许多大型的任务。</p>
</blockquote>
<h3>后续发展</h3>
<p style="text-indent: 21pt;">Rechard P.Gabriel 于1989年最早提出“越差就越好”(worse is better or WIB),后来发展为一种软件设计风格或理念。Gabriel的文章“the Rise of worse is better”中强调软件的简洁和界面。这同MIT approach(or the right thing)的作法形成鲜明对比,后者强调事前完美的设计。由于WIB可快速推出软件应用,并持续完善,故而易于推广。</p>
<p style="text-indent: 21pt;">20年来Gabriel反复论证WIB,他最后的结论是自己作主(Decide for yourselves.)。</p>
<p style="text-indent: 21pt;">社会化软件flickr和美味书签(delicious)对标签(Tag)的成功应用似乎验证了WIB。Damian Cugley用自己项目经验SeaHorse佐证之。目前研究人员认为自由分类法(folksonomy)不成熟的理由是:缺乏规范、无法控制一词多义和多词同意和多语种的问题。但按照WIB的观点,Cugley认为:</p>
<blockquote>
<p style="text-indent: 21pt;">Flickr and del.icio.us wisely give usability precedence over all other concerns, and use essentially the same system….The problems of synonyms, homographs, and localization have been dealt with by ignoring them: the problems are not bad enough to be worth the cost of solving them.</p>
</blockquote>
<p style="text-indent: 21pt;">面对大量元数据过分设计而失败的项目,Cugley的结论是“精致和完美不能代表一切”。所以说没有永恒的真理才是真理,但这也是“悖论”。</p>
<h3>斗胆批语</h3>
<p style="text-indent: 21pt;">谁好谁坏,我们往往是在用结果在说话。Gabriel如果不是因为他的公司运营情况不好,可能也就不会得出这个结论。很多事情,是因为做成功的,而不是理论证明成功的。</p>
<h3>参考资料</h3>
<ol>
<li>
<div style="text-indent: 21pt;">Worse Is Better by Richard P. Gabriel。<a title="http://www.dreamsongs.com/WorseIsBetter.html" href="http://www.dreamsongs.com/WorseIsBetter.html"><font color="#669966">http://www.dreamsongs.com/WorseIsBetter.html</font></a>
</div>
</li>
<li>
<div style="text-indent: 21pt;">Richard P. Gabriel。 <a href="http://w/"></a><a title="http://www.answers.com/Richard%20Gabriel" href="http://www.answers.com/Richard%20Gabriel"><font color="#669966">http://www.answers.com/Richard%20Gabriel</font></a>
</div>
</li>
<li>
<div style="text-indent: 21pt;">XML 问题 #15: 将 XML-RPC 作为对象模型。<a title="http://www-128.ibm.com/developerworks/cn/xml/x-matters/part15/index.html" href="http://www-128.ibm.com/developerworks/cn/xml/x-matters/part15/index.html"><font color="#669966">http://www-128.ibm.com/developerworks/cn/xml/x-matters/part15/index.html</font></a>
</div>
</li>
</ol>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值