Thursday, June 11, 2009

Worse is better, but what actually is worse?

Dan Weinrieb touched the most infamous theme in lisp, the historical Worse is Better and how it will repercuse on the future of lisp. I've planned to reply on his blog but the reply got little longer so I'm posting it here.

I can't shrink Richard Gabriel essey but basically it's about Good enough winning over the Right thing thus worse actually being better. So my question is please name the area that lisp is better? And the answer I will receive is probably :
"...Please don't assume Lisp is only useful for Animation and Graphics, AI, Bioinformatics, B2B and E-Commerce, Data Mining, EDA/Semiconductor applications, Expert Systems, Finance, Intelligent Agents, Knowledge Management, Mechanical CAD, Modeling and Simulation, Natural Language, Optimization, Research, Risk Analysis, Scheduling, Telecom, and Web Authoring just because these are the only things they happened to list." - Kent Pitman

Few days ago I was showing weblocks to a fellow Asp.Net programmer. He was impressed by what persistence, continuations and macros could buy him but he wanted a visual builder. After a little explaining of the inflexibility of that approach he was ready to accept lack of drag 'n' drop IF AND ONLY IF the controls he's used to working with from Asp.Net existed in weblocks. And they weren't. Another lost customer. He's doing half a dozen applications a year and his clients think perl is a typo for pearl and python is a snake so they wouldn't care if he writes their apps in whatever language he chooses including the speach defect I mean lisp. For him lisp is clearly worse, by far. It doesn't matter if he could express some weird continuation flow when actually he can't get a little calendar working with little glue code.

My little story tells us that whenever we say lisp is better at everything we actually say we don't have a clue at what the hell is lisp good for. So the more honest wording would be saying that Weblocks as a representative of lisp is better in a systems with most convulated control flow assuming that you're willing to write your own controls, because prefabricated do not exist.

So where is lisp now? My best guess is stuck in the prechasm trying to pass on several different areas. And its not working. Without choosing a beachead and launching invasion we're doomed to frustration. Being a favorite language of early adapters and getting older each day while they look for a newer toys will keep us at being no more death then usual. So if we want to win and get to the pragmatists and later conservatists we need to pick an practical niche and cross the chasm. Else my friend story will stay just one in many.


  1. You know, Slobodan, I was thinking about this from a slightly different direction. Almost for 1 year I'm developing a web app in CL (no frameworks, just CL-WHO). Using Lisp allowed me to evolve it, so to say, and change the architecture to correct the wrong early design decisions. But yesterday I've realized one architectural shortcoming, that even with Lisp I won't be able to change. :)
    Would ASP.Net support such development style? I don't think so. There are some patterns in it's land, following which you'll be able to create a reasonable design, solving a common problem. Would it be the best one for the particular problem -- hardly so. And if you decide to drastically change some part of the architecture, what will you do? Start anew -- there's no other way. Have you heard about maintainance nightmares, common in .Net land, with any Lisp project?
    So, first of all, Lisp gives you the most flexibility to evolve the system design. Sacrificing default solutions, sacrificing 'one right way'. So is Lisp suited for industry? In the sense of stock websites -- not at all (you're right). But in the sense of doing something new or anew -- surely.
    This is one aspect -- the answer to the case, you've brought up. Besides, there's other answer: go and build those widgets, but you know it to well, I think. (The underlying idea behind this answer is that, when people talk about such problems, they confuse the problem of a language with the problem of a community).

    There are other 'better' things about Lisp, mentioned in comments to Dan Weinreib's post. For example, REPL, great combination of dynamism and speed, multiparadigm nature.

  2. Sure lisp might have an edge in building something new but how many things are something new. Most people are doing just variations of the same CRM,store whatever theme. Maintenance nightmares don't occur for sites that are never started because in order to do that you must write every widget you need. Programmers don't want to program they want to build things and see the results. And very few people want to be tool builders most would be very happy to just glue something and see the vision unfolds. There is no place for drastic changes anywhere and clients will have to get used to it. You must stop once and make something usable rather then go for perfection. As soon any product, service or whatever is created is already outdated, there is always room for improvements in the creators minds. This could be faster, that could softer and the other thing could be more user friendly . BS just give damn something they could use and improve it little bit later. No vision is perfect and everchanging one is unachievable even with lisp. Or rather especially with lisp.

    Beside even REPL is not completely new. C# has immediate windows, not the same but close.

  3. You're right. And, I think, you've actually just reproduced Gabriel's argument. Lisp is the right thing, but what the world needs is something worse ;), yet more deliverable and simple.
    I think, that there are different tools for different jobs. There are not only CRMs and database-backed websites in the world, although it's a majority of programs built. Yet there are problems which require custom solution -- and for this problems Lisp is still arguably better. (Here I've recalled the great post from Erik Naggum, although it's not completely on topic:

  4. Thanks for the link. If you are free talk I am anxious to hear about lisp projects you work on. My mail is

  5. My point in the blog entry wasn't that Lisp is the best programming language, or anything like that. My real point is that what Gabriel has written in his "Worse is Better" papers doesn't actually say much about Lisp.

    Also, the quotation that you cited is not saying anything about what makes Lisp good. All it's saying is that Lisp has actually been applied to many areas. It's an answer to the then-common accusation that Lisp was used solely for artificial intelligence, or was used only for teaching students, and therefore it wasn't useful for real programing.


Note: Only a member of this blog may post a comment.