我非常愿意将这个观点介绍给大家,第一是它并不被很多人所知,更重要的是它有非常深刻的内涵道理。
发展历史
这是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如果不是因为他的公司运营情况不好,可能也就不会得出这个结论。很多事情,是因为做成功的,而不是理论证明成功的。
分享到:
相关推荐
Google IO 2012大会上Chet Hase和Romain Guy做的主题演讲的ppt,介绍了Android绘图渲染的改进,以及如何调优渲染速度
1>基于vs2010,文件比较大。 2>在使用代码之前,建议先看一下‘使用说明.txt'.
This is where hardwareID is listed in the INF as a compatibleID, which is ranked worse than INF hardwareIDs. Note: INF compatibleIDs should not be confused with hardware compatibleIDs. All drivers ...
— than a statement about HTML5. But it’s really the truth: most of the people using HTML5 are treating it as HTML4+, or even worse, HTML4 (and some stuff they don’t use). The result? A real delay ...
你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件。 "改变矩阵元素"的操作定义为0变成1,1变成0。 Input 包含多个测试数据。每个测试数据有多行,第一行为矩阵的大小n(n),以下n...
For better or worse JavaScript is the world’s most popular programming language6 . If you have done any programming for the web, it is unavoidable. JavaScript, because of the sheer reach of the web, ...
formats makes matters worse, not better. Fabricators have not adopted the new formats. RS-274X remains the standard. The emergence of RS-274X as a standard for image exchange is the result of effort ...
Even worse is the situation with the practical aspect of RL application, as it is not always obvious how to make a step from the abstract method described in the mathematical-heavy form in a research ...
A cat’s eyesight is both better and worse than humans. It is better because cats can see in much dimmer light and they have a wider peripheral view. It’s worse because they don’t see color as well...
STM32F4UCOSiii源程序移植例程并优化移植过程,便于初学者快速掌握UCOSiii移植方法
and lawyers have strong organizations that, for better or worse, have changed the law of the land to keep the amateurs out. You just don't find a teenager practicing medicine, so "doctor" conveys a...
较差的PDF 将普通的PDF文件转换为恶意文件。用于从Windows计算机中窃取Net-NTLM哈希。 参考 : https://research.checkpoint.com/ntlm-credentials-theft-via-pdf-files/https://github.com/deepzec/Bad-Pdf作者:3...
With this anthology of reports from award-winning journalist Mike Barlow, you’ll appreciate how data science is fundamentally altering our world, for better and for worse. Barlow paints a picture ...
With it is the growing unease that our Internet is being taken away from us by these abusers and that, unless we band together and do something about it, the problem is going to get much worse....
图形处理傅里叶变换教程ppt,内有二维离散型傅里叶变换的公式,以及关于图像处理的概念
It is even worse if you have to debug someone else's code. The only thing that can help the pain is good comments. Notice I said "good" comments. Bad comments are worse than no comments at all. For ...
编译原理课程设计,详细描述了如何设计词法分析器
Whenever you use a computer it becomes, for better or for worse, an extension of your mind. This means that, over an extended period of time, the computer system you use changes how you think. Indeed...
基于蚁群算法的3D路径规划,运行结果自动出现3D路线图,路径节点可以在变量中查看。
Worse yet, other client/server applications rely on the client program to be "honest" about the identity of the user who is using it. Other applications rely on the client to restrict its activities ...