Worse is Better / Beating the Averages

On Wednesday, February 11th, the seemingly simple question was asked: what do we do in the face of duplicate bindings?

{with { {x 3} {y 2} {x 5} } {+ x y}}

The binding for "x" appears twice in this list of bindings. How do we handle this?

One question, many answers

One solution is to throw an error. Another solution is to produce a warning, allowing the multiple bindings, but letting the user know that it might be a bad idea. Yet another solution might be to throw the error, but introduce a new binding form into the language (perhaps with* or mültiwith) that allows this kind of re-binding to occur.

There are no right answers. We are talking about the design of a language, and to that end, we have not actually defined what our goals are. Who are our users? To what uses will they put the language we are implementing? Will it be for systems programming, or web scripting? The questions are many.

There are several essays that I would like to ask you to read. They are not highly technical unto themselves. I will introduce each of them briefly.

Worse is Better

Peter Gabriel is a long-standing member of the Lisp community. (Lisp, as I have mentioned before, is a linguistic parent  to Scheme.) In the late 1980's, he developed the idea that "worse is better" as part of  his essay Lisp: Good News, Bad News, How to Win Big. He later wrote a rebuttal to his own essay titled Worse is Better is Worse (PDF). The essays have a history unto themselves chronicled on the Wikipedia, which may or may not be trustworthy on this topic.


Beating the Averages

Paul Graham, another Lisp hacker of note, wrote an article in a similar vein in the early part of the new millennium titled Beating the Averages. In it, he chronicles the rise of Viaweb, the key (as he views it) to the company's success, and its eventual sale to Yahoo! (their product became Yahoo! Stores). 

For your consideration

On Friday the 11th of April, I'd like for us to be able to discuss Lisp: Good News, etc., Worse is Better is Worse, and Beating the Averages with respect to how they relate to our experiences so far with programming languages and their implementation. These are opinionated pieces, and I assume you will have your own reactions to them.

In what way is Gabriel right? Or, is his own rebuttal the correct answer? Or, worse yet, did he go soft on us, backing down from a radical-yet-right position? Graham goes on to suggest that the languages and tools we choose can give one an edge over competitors, yet... is he just drinking some kind of Kool-Aid? If Lisp and Scheme were so amazing, we'd all be using it for everything, right? Clearly, these are old-fashioned views, and Guy Steele's migration from Lisp to Java (as an implementer and designer) should be taken as all the evidence we need. (Granted, he has since moved on from Java to Fortress, so you'll have to decide what that means...)

Further reading

You may be interested in, but are not required to read, some of Guy Steele's papers on lambda. They contain some strong juju, so be sure to give them some time if you want to learn from them.

http://library.readscheme.org/page1.html 

If you're interested in language research, and you never read these papers, you're not serious about languages.

The entire site is a gold mine of interesting papers on all aspects of programming language research. Likewise, the weblog Lambda the Ultimate may provide some further readings of interest.