我非常愿意将这个观点介绍给大家,第一是它并不被很多人所知,更重要的是它有非常深刻的内涵道理。
这是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关于它的完整想法并没有形成的。他自己本人也在反复探索中。在接下来的几年里,他发表了另外几篇文章,并阅读了很多书籍来验证自己的观点。这期间分别发表过下面的一些文章(包括别人反驳的)。
在《Lisp: Good News, Bad News, How to Win Big》的2.1章节"The Risk of Worse is Better"中,Gabreil提到了更坏就是更好的设计理念原则。
他先提到了普遍认为是“好”的设计原则:
他又提到了“更坏是更好”的设计原则:
对比两点不同,我们不难发现“更坏是更好”的要点。其观点几乎可以用另外一句话来概括:“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如果不是因为他的公司运营情况不好,可能也就不会得出这个结论。很多事情,是因为做成功的,而不是理论证明成功的。