As a former Lisp user of five years, I profoundly disagree with the article’s thesis. That thesis is an attempt to explain the reason Lisp has not replicated its successes from before the “AI Winter” of the 1980s and 90s; specifically, the author takes the position that Lisp is so expressive that nobody can read code written in it.
This is a fairly extreme position to take against any programming language, so I hope my strongly-worded response won’t be viewed too harshly!
Briefly, I believe Lisp’s lack of 21st-century success has been due in large part to the existence of other functional languages out there, some of which even - as we know :) - have rich static type systems, and in that respect are actually superior to Lisp (gasp!). Recall that Lisp has existed in something resembling its current form since the 1960s, and at one time, it was the only game in town for functional programming - yes, Forth technically had higher-order functions, but it was very different in other ways and few people used it for general-purpose programming tasks! It’s unreasonable to expect it to fare as well in today’s landscape, which has far more competition from other excellent languages. I myself left Common Lisp for Haskell, for example. :)
Second, I would like to point out that many of the classic Lisp AI successes… let me get concrete. SHRDLU is my archetypical example. It was a wonderful piece of what today we would call natural-language processing, inventing multiple novel techniques… The PhD thesis describing it is titled Procedures as a representation for knowledge in computer programs for understanding natural language, which gives you some idea of the depth!
It provided a self-contained simulated world (modeling, in three dimensions, a robotic arm and some child’s toy blocks), which could be manipulated by directing the simulated robot in English! The robot understands complicated grammar for both commands and inquiries, which can be not only about the current state of the world, but also about its reasons for having taken particular actions. Google for some transcripts if you haven’t seen them.
NLP has moved on and can do similar things on behalf of private parties such as Google who, to my knowledge, have not really published their techniques… But there is no such simple end-to-end demonstration and testbed extant today.
So. I would like to point out that SHRDLU, then, not only no longer runs*, but its author (Terry Winograd) is no longer interested in the problem. And who can blame him? After seeing a seminal work like this ignored for decades, I would probably lose interest in ramming it down the world’s throat, too! The AI winter cut deeper and lasted longer than the more-recent 2000 tech crash, and the talent that was lost to it is in many cases simply no longer alive or not planning to return to the field. All the modern work in the fields which used to all be regarded as simply part of the single field of artificial intelligence… is essentially reinvention.
What does that have to do with the virtues of Lisp? Well, it was the preferred tool of the people who have moved on. There is no reason to expect that an entirely new generation of programmers not drawing on the techniques or codebases of the past will have any use for their forerunners' tools. The success of Lisp was the success of the programs that were written in it, and nobody is writing new artificial-intelligence research in Lisp anymore.
Okay - as you can probably tell, I have strong feelings about the language. For full disclosure, I hereby acknowledge that I consider Clojure in many respects a step backwards from Common Lisp, and my displeasure with the people currently programming in Lisp has therefore doubtless colored the views expressed above.
I would like to note also that what I am not doing here is trying to defend the language against the claim that it was “too expressive” - I am simply providing an alternate explanation as I see it. I don’t really understand how a language can be too expressive, but I suppose it might make sense to address the claim more thoroughly sometime. That would take a long time, though, and would not really be at the heart of the issue.
I consider Clojure in many respects a step backwards from Common Lisp
Would you mind expanding on that? I’m a hobbyist CLer turned professional Clojurian, so I’m keenly interested.
To me the biggest thing that’s stood about Clojure is that it’s a functional language. In CL I usually wrote in a functional style, but sometimes it just made more sense to get CLOS involved or to setf a dang variable. CL tooling is also superior, in my experience.
But I’m interested in your take on it.
Fascinating discussion. The “lisp is too power argument” appears at predictable intervals but when it scares out beautiful comments of this sort it is worth it.
I’m not a lisper at all but I did download the SHRDLU source code when it become available a while back (and I’ve looked at Winograd’s Understanding Natural Language - the published version of his thesis, it seems).
As far as I understand it, SHRDLU’s lisp dialect is significantly more “free form” than any modern lisp. You wind-up with a rather tightly-couple self-modifying parser - though one still based on the most sophisticated language concepts of its day.
It seems that SHRDLU was the apogee for the logical specification of natural language. If Google has things that are better, they still come from entirely different, more “brute force” approaches.
All this suggests the interesting possibility that human language may be logically specified with systems like SHRDLU but such systems need to be so tightly coupled they become unmanageable for humans. I remember a report that Winograd himself had a devil of a time making SHRDLU function, in fact.
Winograd went on the write a very sophisticated critique of AI, “Computers And Cognition”,
Posting something doesn’t necessarily mean I endorse it, but I found this particular quote amusing:
“Endgame: A random old-time Lisp hacker’s collection of macros will add up to an undocumented, unportable, bug-ridden implementation of 80% of Haskell because Lisp is more powerful than Haskell.”
My experience of Common Lisp was that it was a lot of Galapagos Island programmers/mini-languages in their own worlds. Clojure mostly avoided this.
Me? I left Clojure for Haskell.
Fair point! It would be fun to look back at Clojure someday and see how the community is different from the CL community that I remember.
During the period when I was actively involved, I never saw Lispers do anything even remotely resembling static types. So, I don’t see where the idea of Lispers reimplementing Haskell comes from. Oh well. :)
To be clear, I agree that Clojure was and is a step back from the strengths of Common Lisp, but it solved some social problems unrelated to those strengths.
Okay. :) I imagine that could easily be true.
The funny thing is, I think there’s a much simpler explanation for the “lisp curse”: while semantically it may be a very expressive language, the designers have forgotten that a programming language’s primary role is to be a human-computer interface. Syntactically it fails to provide a good interface for humans. Trying to read lisp is significantly harder than most other languages, and that’s the really simple reason for the curse - few people want to program in it.