Responses to Lisp: The Golden Age

I’m overwhelmed at the response to my recent article about Lisp: The Golden Age Isn\’t Coming Back, Let\’s Welcome a Bright Future! It clearly shows my blogging virginity that I’m excited about 4,000 page views, but that doesn’t make me any less excited! Not only that, there have been lots of good comments, almost 100 total, on this site, programming.reddit.com and Hacker News. I’d like to address some of the comments and criticisms in one place, here, rather than all over the place.

First, my mindset and perspective were poorly communicated and set the wrong stage going into the article. (I hate putting “WARNING” tags at the beginning of posts to set the right context, even though they are so useful!) A lot of people thought I was just another noob complaining about how hard it was to use Lisp. I mean, I guess I sort of was, but that wasn’t the point. The point was that Lisp has barriers to becoming a more popular, mainstream language, and every one of them is tractable! Here are a couple of the points, along with the solutions:

  1. There’s no default/most prominent implementation – finish SBCL threading work on Windows and OSX
  2. The family of languages thing is confusing to new users – refer to #1: making a default implementation removes this stumbling block for beginners without stifling the benefit to experienced users of having a choice of implementation
  3. Installing and setting up is hard (meaning not automatic) – write streamlined, bulletproof installers! Write better tutorials, FAQs, and troubleshooting guides, and have active forums where people can get help (note: these happen automatically with a larger user base)
  4. The learning curve is steep – there are dozens of valuable resources out there that beg to be organized. Watch this space for an upcoming announcement related to this
  5. Nobody believes me when I tell them Lisp is great – tell them in terms that matter to them why it’s great! Everyone says this can’t be done but I think it can (check back here for this, too)
  6. Lisp’s community is weird – no, it’s just headless. Viewed from the outside, Paul Graham is the biggest figure in the Lisp world, but he’s more of a philosopher than an evangelizer. He’s also not a teacher (at least not to the masses – I hear wonderful things about he treats his YCombinator companies!) The Lisp community is like the Mongol hordes: talented and powerful, but needing a Genghis Khan.

I didn’t see anything on that list that wasn’t fixable. The technical talent is certainly there to do #1 and #3. Solving #1 solves #2. #5 is one canonical resource away. #4 (and possibly #5 could be fixed by one organized, passionate person, and #6 could be solved by the same person but would probably be someone else. I know it seems like an oversimplification to say that 1-2 people could launch Lisp into popularity, but imagine where Ruby would be today without DHH?

Second, several people pointed out that the name Lisp is a barrier to wider adoption. Because Lisp is old and has a long history (that included some overhyping and a fall from grace), any new attempt to discuss or promote Lisp has to overcome decades of negative perception and introduce decades of improvement. A critical mass of new, successful uses of Lisp will wipe (or at least diminish) that old prejudice. For instance, Python probably has more legitimacy than any other emerging language because if anyone says “Python? Who the heck uses Python?” all you need to say is “Google and NASA.” No further explanation or legitimation necessary. Paul Graham did it with Viaweb, but that was a decade ago. I think the company with the biggest chance to do this is ITA Software. Most people haven’t heard of them but they have used Orbitz, etc, so it is a prominent display of the usefulness of Lisp. Of course, my favorite explanation of the baggage that the name Lisp carries is at A Nickel’s Worth:

Last but certainly not least, here is the worst programming language name of all time: Lisp. OMFG this is a bad name. Bad bad bad. What does “lisp” mean? Lisp means “speech impediment”!! Do you want a speech impediment!? I don’t think so! Back in college I had even less patience for Lisp than I did for Smalltalk. I mean, when it came down to it, I’d rather at least be able to make small talk, at a party, without having a lisp. Hint to John McCarthy: next time you come up with something brilliant, name it after something POSITIVE. Geez. And, as with Erlang, it just doesn’t get any better when you try to explain why Lisp is called Lisp. It’s short for LISt Processing… Get it? Isn’t that funny? I don’t hear you laughing. Yeah, ‘cuz it’s one of the worst puns ever. And not only is it not funny, guess what, most programmers don’t actually think they’re going to do much “list processing”, so they’re like, “maybe it IS good at List Processing, but I could give a flying monkey’s posterior because that’s just not what I want to be working on” (these programmers would much rather be working on their ORM layer, ironically).

Read the whole post, it’s worth it!

Third, I said that “I\’m learning Linux, emacs, SBCL, Slime and Common Lisp at the same time” and that it was a lot to absorb. Well, I broke my own cardinal rule of “Compared to what?” and I got called out on it. I didn’t mean that it was harder than learning a different programming stack, it was just a statement that learning a new programming stack is a lot of work. When I was choosing to embark on a project of learning a new language, I considered Ruby and Python because of the popularity of their web frameworks. But since I wanted to get comfortable with Linux anyway, and all of these languages use SVN or Darcs or some source control product that isn’t Visual Source Safe, I had to learn one of those too. So no matter what language I chose, I would have to learn 1) the language, 2) the libraries, and 3) its IDE of choice. Learning one language vs another is a wash – just read stuff and write programs. People complain about the difficulty of finding the right library in Lisp, but since identifying a good library is a bigger problem than installing a known one, this is not a big deal. And emacs hasn’t been hard – I made a nice cheat sheet and I use it like a normal IDE (just like you can write Fortran in any language, you can program like Visual Studio in emacs) – I’ll learn the power user stuff later. Since the total cost is about the same, I chose the one that I thought would be most powerful and have the longest shelf life.

Fourth, one additional comment on community: I’m sort of the opinion that if you live by the community, you die by the community. So languages like Ruby where community is one if its biggest strength could be in trouble if the community weakens or moves on. I think Lisp has the best technical foundation of any language, and that shines through even without (some would say in spite of) its community.

Out of all the comments and responses, this was one of the biggest treats:

Dan Weinreb\'s comment

I’ve enjoyed reading Dan’s blog since he started is a couple months ago (and I’ve already linked to it repeatedly). He has given me most of my historical perspective on Lisp and he seems to be very fair and impartial in his judgment, even though he was in the thick of many of these things! He’s also an excellent writer who quickly moved up my “Must Read” list in Google Reader. Dan – I’m a little giddy that you commented on my blog. I’m still getting used to the social aspect of the internet (as opposed to just consuming info) so the fact that someone whose writing and experience I admire very much read my article is flattering!

Thanks again everyone for your comments and I hope to keep producing articles worth reading and talking about!

Comments at programming.reddit.com

Comments

  1. w-g says

    I think the problem is that most of what you see as problems are not real problems to Lispers.

    > 1. There\’s no default/most prominent implementation – finish SBCL threading work on Windows and OSX

    I don’t want a default implementation. Current ones are suitable for different purposes (embedding, running on JVM, number-crunching, etc)

    > 4. The learning curve is steep – there are dozens of valuable resources out there that beg to be organized. Watch this space for an upcoming announcement related to this

    I don’t think it is as bad as people complain about. The problem is that there is a paradigm change from usual languages. You *need* to feel confused in order to finally understand Lisp.

    But a nice way to start is with Peter Seibel’s or David Touretzky’s books. Simple like that: “read this book”.

    > 6. Lisp\’s community is weird – no, it\’s just headless. Viewed from the outside, Paul Graham is the biggest figure in the Lisp world, but he\’s more of a philosopher than an evangelizer. He\’s also not a teacher (at least not to the masses – I hear wonderful things about he treats his YCombinator companies!) The Lisp community is like the Mongol hordes: talented and powerful, but needing a Genghis Khan.

    The Lisp community doesn’t need a leader for two reasons:

    – Additions to the core language will NOT happen. The standard is there, and noone will change it.
    – Lispers don’t even want a “standard set of libraries” or anything like that. They like Lisp the way it is. None of them wants a leader.

    — w-g

  2. Redd says

    And it’s your stubborn opposition to change that prevents the masses from “seeing the light”.

    I’ve heard your counter arguments from the community before. The problem is simple: Lisp and it’s community has an image problem and it’s not friendly towards new developers. Ideally, the community would look in the mirror and come to terms with these problems. It’s a matter of empathy, you need to understand what the outsider is experiencing.

    It isn’t my intention to be derogatory or demeaning to you or anyone, but to be blunt, do you realize how you sound?

    If you’re one to simply state everything is fine the way it is, and it’s the newbies’ problem, then why did you bother to speak?

    I’m a professional game developer, but a newbie to Lisp, and one of my biggest problems has been trying to find an implementation that is consistent across platforms, and one that can utilize other libraries and interfaces present on those platforms. Is it out there? Fuck if I know, because what documentation that is out there is too scatter brained for me to figure and sort out. There is no good starting point.

    Why would I pursue this mess when there are more consistent avenues? I can conceptually understand there are merits to the language, and I can think of no better way to really put Lisp in the stage light than to make a bunch of noise that our XBox 360 game was written in Lisp and saved us time and money; but as it stands, I’d rather use Python.

    I can’t fix these problems. I can’t do it alone. But if Lisp was somehow reborn, these problems were fixed, I’d jump on it in a second.

  3. admin says

    Redd – I assume the “you” that you’re talking to is w-g and not me. I totally agree with your points (implementation, libraries, documentation, a big success smoothing out old hard feelings) and I made most of them myself. I hope you keep reading my blog since I’m pretty sure the email address you entered it fake :). Hopefully we can fix some of these problems.

  4. says

    On your discussion of having to learn a whole new programming stack including libraries and tools, there’d be a way to address this at least for a very significant part of the community: By using a Lisp implementation on top of one of the well-known frameworks. Clojure is an example; it’s a Lisp dialect which runs on top of the JVM and integrates with libraries written in Java (and probably also other languages which run in the JVM).

    Personally, I would love to see something like IronLisp, ie. an implementation of Common Lisp on top of .NET and the DLR, similar in concept to IronPython and IronRuby. Such a language could directly integrate with all the .NET framework libraries and tools (including Visual Studio).

    For the Microsoft/.NET community, learning such a language would be relatively easy since they already know the tools and libraries, so all they’d have to learn is the language itself. Also, functional programming is all the rage in the .NET community now anyway, with F# soon becoming a “first-class” language integrated with Visual Studio etc.

    On the other hand, those who already know Common Lisp would only have to learn the typical .NET tools and libraries.

    IronLisp actually exists – see http://www.codeplex.com/IronLisp. However, the author apparently dropped it in favor of IronScheme (http://www.codeplex.com/IronScheme). But the code for IronLisp is still there, so a new project could be built upon it.

    As IronPython and IronRuby have demonstrated, Microsoft is surprisingly open to input from the open source community these days – and they’ve got the resources and the market significance which it takes to make a programming language successful. Both IronPython and IronRuby, by the way, try to be absolutely true to the language, which is something I’d find of high value for an IronLisp project as well.

    There have been attempts of implementing Lisp on top of .NET before, but AFAIK, they all deviate from the Common Lisp standard, or implement only a tiny part of it.

  5. says

    > Who the heck uses Python?” all you need to say is “Google
    > and NASA.” No further explanation or legitimation
    > necessary. Paul Graham did it with Viaweb, but that was
    > a decade ago. I think the company with the biggest
    > chance to do this is ITA Software.

    July 2010, Google announces it’s intention to buy ITA Software, April 2011 “acquisition completed” :-)

    http://googleblog.blogspot.com.au/2011/04/ita-software-acquisition-cleared-for.html

    (disclaimer: I work for Google)

Trackbacks

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>