C The Rise of Worse Is Better By Richard P. Gabriel The key problem with Lisp today stems from the tension between two opposing software philosophies. The two philosophies are called “The Right Thing” and “Worse Is Better.”1 I, and just about every designer of Common Lisp and CLOS, have had extreme exposure to the MIT/Stanford style of design. The essence of this style can be captured by the phrase “the right thing.” To such a designer it is important to get all of the following characteristics right: • Simplicity—the design must be simple, both in implementation and interface. It is more important for the interface to be simple than that the implementation be simple. • Correctness—the design must be correct in all observable aspects. Incorrectness is simply not allowed. • Consistency—the design must not be inconsistent. A design is allowed to be slightly less simple and less complete to avoid incon- sistency. Consistency is as important as correctness. 1This is an excerpt from a much larger article, “Lisp: Good News, Bad News, How to Win Big,” by Richard P. Gabriel, which originally appeared in the April 1991 issue of AI Expert magazine. © 1991 Richard P. Gabriel. Permission to reprint granted by the author and AI Expert.
312 The Rise of Worse Is Better • Completeness—the design must cover as many important situations as is practical. All reasonably expected cases must be covered. Simplicity is not allowed to overly reduce completeness. I believe most people would agree that these are all good characteristics. I will call the use of this philosophy of design the “MIT approach.” Common Lisp (with CLOS) and Scheme represent the MIT approach to design and implementation. The worse-is-better philosophy is only slightly different: • Simplicity—the design must be simple, both in implementation and interface. It is more important for the implementation to be simple than the interface. Simplicity is the most important consideration in a design. • Correctness—the design must be correct in all observable aspects. It is slightly better to be simple than correct. • Consistency—the design must not be overly inconsistent. Consis- tency can be sacrificed for simplicity in some cases, but it is better to drop those parts of the design that deal with less common circum- stances than to introduce either implementational complexity or inconsistency. • Completeness—the design must cover as many important situations as is practical. All reasonably expected cases should be covered. Completeness can be sacrificed in favor of any other quality. In fact, completeness must be sacrificed whenever implementation simplic- ity is jeopardized. Consistency can be sacrificed to achieve com- pleteness if simplicity is retained especially worthless is consistency of interface. Unix and C are examples of the use of this school of design, and I will call the use of this design strategy the “New Jersey approach.” I have intention- ally caricatured the worse-is-better philosophy to convince you that it is obviously a bad philosophy and that the New Jersey approach is a bad approach. However, I believe that worse-is-better, even in its strawman form, has bet- ter survival characteristics than the-right-thing, and that the New Jersey approach when used for software is a better approach than the MIT approach. Let me start out by retelling a story that shows that the MIT/New Jersey distinction is valid and that proponents of each philosophy actually believe their philosophy is better.