2007年4月3日星期二

更坏就是更好(Worse Is Better)

我非常愿意将这个观点介绍给大家,第一是它并不被很多人所知,更重要的是它有非常深刻的内涵道理。

发展历史

这是Richard P. Gabriel 先生根据自己的亲身经历得出的著名论断。Gabiel在Lisp编程语言特别是Common Lisp上的著名专家。在1985~1994之间,他有一家Lisp公司,名字叫Lucid。但是运营的境况并不是很好。在1989年的一次Lucid走廊会谈中,他被一些Hackers问及为什么的时候,他开玩笑地说:"因为,嗯,更坏的就是更好的。"

在几个月后的,在一个叫EuroPAL(European Conference on the Practical Applications of Lisp)的小型Lisp会议上,他被邀请去定一个基调。他将自己在Lucid上的一些经验想法总结,并形成了一篇著名的报告:《Lisp: Good News, Bad News, How to Win Big.》[html]  [pdf]。

在这篇报告上,他第一次提出了"Worse-Is-Better"的观点。但是,Gabriel关于它的完整想法并没有形成的。他自己本人也在反复探索中。在接下来的几年里,他发表了另外几篇文章,并阅读了很多书籍来验证自己的观点。这期间分别发表过下面的一些文章(包括别人反驳的)。

  1. 1991~1992年冬天,《Worse Is Better Is Worse
  2. 1992年在Journal of Object-Oriented Programming(JOOP)上发布的反驳Gabriel的文章:《Is Worse Really Better?
  3. 2000年,在OOPSLA上,Gabriel发表了《Back to the Future: Is Worse (Still) Better?
  4. 同年一个月后,他又发表了《Back to the Future: Worse (Still) is Better!"》

观点描述

在《Lisp: Good News, Bad News, How to Win Big》的2.1章节"The Risk of Worse is Better"中,Gabreil提到了更坏就是更好的设计理念原则。

他先提到了普遍认为是"好"的设计原则:

  1. 简单性:在实现和接口中,设计必须简单。接口的简单性比实现更重要。
  2. 正确性:在所有可观察的方面,设计都必须正确。一丝的错误都是不允许的。
  3. 一致性:设计不能不一致。为了避免不一致性,可以稍微减少一些简单性和完整性。一致性和正确性同样重要。
  4. 完整性:实际上,设计必须覆盖许多重要的情况。应该覆盖可能出现所有情况。简单性不可以过度地削弱完整性。

他又提到了"更坏是更好"的设计原则:

  1. 简单性:在实现和接口中,设计必须简单。相对于接口而言,实现的简单性更为重要。简单性是设计中最重要的注意事项。
  2. 正确性:在所有可观察的方面,设计都必须正确。正确性的重要程度仅次于简单性。
  3. 一致性:设计不能过于不一致。在某些情况下,为了实现简单性可以牺牲一致性,但放弃设计中处理非常见情况的那些部分比引入实现复杂性或不一致性更好。
  4. 完整性:实际上,设计必须覆盖许多重要的情况。应该覆盖可能出现所有情况。为保证其它质量,可以牺牲完整性。实际上,只要危害到实现简单性,就必须牺牲完整性。如果保证了简单性,可以牺牲一致性以实现完整性;尤其是在接口的一致性没有价值的情况下。

对比两点不同,我们不难发现"更坏是更好"的要点。其观点几乎可以用另外一句话来概括:"Simple is Best",但这只是我为了帮助大家理解,杜撰的一句话。

经典案例

Gabriel经常提到的就是Lisp和传统的Unix和C语言对比。Unix和C在设计上,充分考虑了实际环境,而放弃了一些一致性和完整性,保证了简单性。这点让C和Unix在历史的选择中胜出。C++也是如此。

David Mertz博士在《XML 问题 #15: 将 XML-RPC 作为对象模型》中,提出的XML-RPC案例也支持了这个观点:

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 显得缓慢、笨拙且不完整。

换句话说,XML-RPC 是 Richard Gabriel 关于软件设计的"更坏就是更好"理念(请参阅 参考资料)的完美体现。对于 XML-RPC,我几乎不能写出比上一段中更生动的描述,而且我认为这个协议非常适合许多大型的任务。

后续发展

Rechard P.Gabriel 于1989年最早提出"越差就越好"(worse is better or WIB),后来发展为一种软件设计风格或理念。Gabriel的文章"the Rise of worse is better"中强调软件的简洁和界面。这同MIT approach(or the right thing)的作法形成鲜明对比,后者强调事前完美的设计。由于WIB可快速推出软件应用,并持续完善,故而易于推广。

20年来Gabriel反复论证WIB,他最后的结论是自己作主(Decide for yourselves.)。

社会化软件flickr和美味书签(delicious)对标签(Tag)的成功应用似乎验证了WIB。Damian Cugley用自己项目经验SeaHorse佐证之。目前研究人员认为自由分类法(folksonomy)不成熟的理由是:缺乏规范、无法控制一词多义和多词同意和多语种的问题。但按照WIB的观点,Cugley认为:

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.

面对大量元数据过分设计而失败的项目,Cugley的结论是"精致和完美不能代表一切"。所以说没有永恒的真理才是真理,但这也是"悖论"。

斗胆批语

谁好谁坏,我们往往是在用结果在说话。Gabriel如果不是因为他的公司运营情况不好,可能也就不会得出这个结论。很多事情,是因为做成功的,而不是理论证明成功的。

参考资料

  1. Worse Is Better by Richard P. Gabriel。http://www.dreamsongs.com/WorseIsBetter.html
  2. XML 问题 #15: 将 XML-RPC 作为对象模型。http://www-128.ibm.com/developerworks/cn/xml/x-matters/part15/index.html 

没有评论: