更壞就是更好(Worse Is Better)

我很是願意將這個觀點介紹給你們,第一是它並不被不少人所知,更重要的是它有很是深入的內涵道理。html

發展歷史

這是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關於它的完整想法並無造成的。他本身本人也在反覆探索中。在接下來的幾年裏,他發表了另外幾篇文章,並閱讀了不少書籍來驗證本身的觀點。這期間分別發表過下面的一些文章(包括別人反駁的)。app

  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提到了更壞就是更好的設計理念原則。編程語言

他先提到了廣泛認爲是「好」的設計原則:ide

  1. 簡單性:在實現和接口中,設計必須簡單。接口的簡單性比實現更重要。
  2. 正確性:在全部可觀察的方面,設計都必須正確。一絲的錯誤都是不容許的。
  3. 一致性:設計不能不一致。爲了不不一致性,能夠稍微減小一些簡單性和完整性。一致性和正確性一樣重要。
  4. 完整性:實際上,設計必須覆蓋許多重要的狀況。應該覆蓋可能出現全部狀況。簡單性不能夠過分地削弱完整性。

他又提到了「更壞是更好」的設計原則:函數

  1. 簡單性:在實現和接口中,設計必須簡單。相對於接口而言,實現的簡單性更爲重要。簡單性是設計中最重要的注意事項。
  2. 正確性:在全部可觀察的方面,設計都必須正確。正確性的重要程度僅次於簡單性。
  3. 一致性:設計不能過於不一致。在某些狀況下,爲了實現簡單性能夠犧牲一致性,但放棄設計中處理很是見狀況的那些部分比引入實現複雜性或不一致性更好。
  4. 完整性:實際上,設計必須覆蓋許多重要的狀況。應該覆蓋可能出現全部狀況。爲保證其它質量,能夠犧牲完整性。實際上,只要危害到實現簡單性,就必須犧牲完整性。若是保證了簡單性,能夠犧牲一致性以實現完整性;尤爲是在接口的一致性沒有價值的狀況下。

對比兩點不一樣,咱們不難發現「更壞是更好」的要點。其觀點幾乎能夠用另一句話來歸納:「Simple is Best」,但這只是我爲了幫助你們理解,杜撰的一句話。設計

經典案例

Gabriel常常提到的就是Lisp和傳統的Unix和C語言對比。Unix和C在設計上,充分考慮了實際環境,而放棄了一些一致性和完整性,保證了簡單性。這點讓C和Unix在歷史的選擇中勝出。C++也是如此。xml

David Mertz博士在《XML 問題 #15: 將 XML-RPC 做爲對象模型》中,提出的XML-RPC案例也支持了這個觀點:htm

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 
相關文章
相關標籤/搜索