This blog post is primarily based on the paper Worse is Better by Richard Gabriel. I have taken the liberty of reading most of the articles that are linked on that page to get a better feel of this topic. Another article that is worth reading is Worse is Worse by Jim Waldo.
One of the problems (I hear) that most new comers to Lisp have is the fact that the community itself is pretty divided. There is no "one" implementation of Lisp1 (the standard is supposed to be Common Lisp). And there is no one "right" way to do things. In fact, having more than one way to do things is probably one of the appealing features of Lisp. Nonetheless to a new comer who is learning a functional language for the first time, the arduous task of learning a new programming paradigm and trying to get things to work in the simplest way possible might be too much. And the worse scenario is when new comers are chagrined for mentioning that which-must-not-be-mentioned: Lisp and its hideous parentheses2.
But I digress. The main point of this article is not really about Lisp. It's about the Worse is Better approach to software design.
"Worse is better, also called the New Jersey style, is the name of a computer software design approach (or design philosophy) in which simplicity of both interface and implementation is more important than any other system attribute (including correctness, consistency, and completeness). [Contrast this to the MIT style of software development]"
So why did Gabriel choose Lisp as an example to his statement? It's probably because Lisp is purported to be a very powerful programming language. It has correctness, consistency and completeness. Every new programming paradigm can be expressed in Lisp: functional programming, procedural programming, object-oriented programming, etc. However, it's interface and implementation leaves much to be desired. With this great power comes a greater responsibility on the programmer to not shoot his own foot.
There has been criticism that Gabriel's essay is not substantiated in any way. His opponents argue that Gabriel's examples with Lisp vs. C and ITS vs. Unix are not real examples that can support his claim. The truth is that, Gabriel himself is not certain of his claim. He has written other essays under the pseudonym Nickieben Bourbaki that rebuts his Worse is Better essays. What Gabriel has done is merely stating the obvious and offering a possible explanation for it. There are a lot of things out there in the world today that are far from perfect and yet they are being used more than their perfect counterparts. It could be because of marketing or price but the truth is that better is not always better.
Personally, I agree that Lisp is really powerful. You can make use of macros and meta-programming and define new domain-specific languages inside Lisp: you have the power to define another programming language within this programming language. Why would you need another programming language if you can do it all in Lisp? However, I am more of a fan of using various languages for different tasks. Want to quickly do some string manipulation? A quickly thrown together script with some regular expressions would get the job done. Need to do some logic programming? Using Prolog and the built-in tools would make it simpler.
That is the philosophy that the Pragmatic Programmers take. They believe in learning a new language each year. After all, you never know what you might discover. This is the power that you have with variety. The little pieces themselves might not be complete but by combining different pieces together you end up with something simple yet powerful. So standalone products might seem less-than-perfect on their own but when combined with other less-than-perfect components, something good might come about.
"Learn at least one new [programming] language every year. Different languages solve the same problems in different ways. By learning several different approaches, you can help broaden your thinking and avoid getting stuck in a rut."
Worse is Better is not an excuse for creating sub-standard software as Waldo pointed out in Worse is Worse. It's a guideline that when faced with the conflicting decision between simplicity and power, always choose simplicity. Simplicity allows more people to understand it and with more people using the software, the development team will get better feedback. This feedback allows the developer to improve the areas that really need to be improved. Simplicity also opens the software to a wider range of users and developers. Why limit software to the aristocratic few?
Then again, having a provably correct implementation that takes care of all the cases has a certain appeal as well. This is the struggle between being pragmatic and being perfect. But who gets to decide what is worse or better? In what sense is C worse than Lisp? In what sense is Microsoft worse than Linux? After all, one man’s meat is another man’s poison3.
2 In fact in some communities, any questions on the syntax or justification for a particular feature is viewed as a personal attack on the community. The community then would lynch the defector in cyberspace usually through the means of nasty posts and comments. See Software Development: It's a religion
3 It appears that after a product gets pass the tipping point, regardless of how bad it is, it will survive for many years to come. This scenario will continue regardless of how good a competitor's product is. Finding out the way to break this tipping point will make anyone in marketing very very rich.Tweet
comments powered by Disqus