Hacker News new | past | comments | ask | show | jobs | submit login
How I lost my faith in Lisp (groups.google.com)
183 points by deepu_256 on March 10, 2011 | hide | past | favorite | 65 comments



Unfortunately, the post spends most of its length on the author's professional history. It is only towards the end in which he spends a sentence or two talking about when he "lost his faith" in Lisp, but still gives not a lot of reasons. Basically, as far as I can tell, there are two major points: he used to think Lisp is great, but (1) no-one else seems to be using it and (2) the perceived superiority of Lisp was debunked when he observed experts in other programming languages.

Perhaps his priors were a bit off (seeing Lisp as the holy grail of all programming languages), but I think it is still fair to ask why Lisp has failed commercially? This has been discussed before, however (Lisp "wars" in the 80s, AI winter, etc.)

I find the way he ends his post interesting, where he argues that Lips has to evolve and improve. The article is from 2002 and in the mean time, a lot has actually happened in the Lisp world. New dialects like arc and clojure have created a renewed interest in Lisps. It would be interesting to know what the author thinks of these developments, and whether they could revive his personal faith.


I think you summarized his reasons correctly, but I see his reasons as faulty.

(1) assumes that if a technology is good, it will see steady adoption over time. This is not true. See "Why didn't the Romans have hot air ballons" http://news.ycombinator.com/item?id=2264998

About (2) I want to phrase my criticism carefully. To be clear, I'm not saying that Ron is a generally egotistical person, any more than your typical programmer, or than myself. What I am saying is that (2) is an egotistical line of reasoning. It's akin to seeing someone take a better picture with a cheap camera than you take with your expensive one, and losing faith in expensive cameras. Or like listening to someone make a song sound better on an upright piano than you make it sound on a grand piano. The Python programmers who knocked him off his high horse at Google are not proof that Python is better.


> (2) is an egotistical line of reasoning.

To be fair, at the time that reasoning was supported by a fair amount of data. To that point I had built a fairly successful career by doing (by my perception) very little work relative to my peers, and I ascribed that success to the leverage I got from using Lisp. I may have been wrong, but it was a defensible position given the available data at the time.


When you saw others not using Lisp and matching your productivity, you concluded that Lisp wasn't giving you as much leverage as you thought. The egotistical part is ignoring other possible explanations. Maybe those people are just really smart, and don't need all those nice Lisp features to help them think. (I personally benefit a lot from macros helping me think.)


> you concluded that Lisp wasn't giving you as much leverage as you thought

No, What I concluded was that Lisp might not give other people as much leverage as I thought it would.

> Maybe those people are just really smart

You can't have it both ways. If they're really smart but nonetheless choosing not to use Lisp then there's probably a good reason.


Unfamiliarity? Discomfort? The choice could be emotional as opposed to intellectual. Smart people can spend a lot of time and effort defending the status quo.


This deserves more discussion. I won't be able to do it justice today, but hope to restart the discussion later, maybe with a comment on your blog.


You might want to read this:

http://rondam.blogspot.com/2008/02/what-are-programming-lang...

(Submitted to HN -- http://news.ycombinator.com/item?id=2314572 -- but it died with a whimper.)


Yes, that's where I would reply.

Unfortunately I'm not surprised it died. It's better thought out than the original Usenet posting, but less controversial.


> It would be interesting to know what the author thinks of these developments, and whether they could revive his personal faith.

I am very encouraged by the developments of the last 9 years. Clojure in particular is a Good Thing (notwithstanding my on-going allergy to Java), and even the Common Lisp landscape to day is much improved over what it was in 2002. Clozure Common Lisp in particular is wicked cool, and I'm using it for some hacking projects on the side. But when it comes time to do something industrial strength it would still be a very tough call for me even today.

I would love to do a Lisp-based startup, and a CL based startup in particular. If anyone out there shares this interest please let me know.


It would be interesting to know what the author thinks of these developments, and whether they could revive his personal faith.

"Erann Gat" and "Ron Garret" are the same person; you find him on c.l.l. regularly since 2004.


He's also occasionally on Hacker News:

http://news.ycombinator.com/user?id=lisper


Is he that Ron, the xoogler, who was forced to use Java on AdWords?

Edit: Yup.

http://www.flownet.com/ron/xooglers.html

    So I was a little disappointed when I found out
    on day 1 that I had been assigned to the ads group.
    But that disappointment turned to dismay when I learned
    what my assignment was to be: I was the lead engineer
    on a new advertising system code named "adstoo", what
    eventually became AdWords. That part wasn't so bad.
    The bad part was, this was going to be the inaugural
    Java project at Google. Google, which had until now
    been a Java-free zone (which was one of the reasons I
    took the job) was going for Java in a big way, and I,
    the consummate Java hater, was supposed to be its
    chief evangelist.

    Just peachy.




This is from the same Erann Gat (aka Ron Garret) who wrote the popular lisp at the JPL essay[1], and it covers some of the same ground.

His last point, that lisp can and should be improved, is one that he makes periodically. There's a barrier to some improvements to Common Lisp caused by the fact that the standard has been long closed and doesn't look like it will be reopened, but there have been improvement in areas that are outside of the standard.

For example both Ron's extended post and the previous hn discussion of this post note the pain of finding and installing lisp libraries. Quicklisp beta was recently released which relieves a significant amount of that pain.

[1]http://www.flownet.com/gat/jpl-lisp.html

Edit: I noticed this in the previous posting of this thread:

Ron> For the record, I did not submit this article, and specifically declined a request to do so. It's not that I don't stand by what I wrote (I do) but it was written for a specific audience at a specific time and I don't think it deserves the attention that it's getting now.

...

akkartik> I noticed. http://rondam.blogspot.com/2008/02/what-are-programming-lang... Thanks.


I'd submit http://www.xach.com/naggum/articles/3208226254834485@naggum.... if my site wasn't blacklisted. "What I want from my Common Lisp vendor and the Common Lisp community"


Why is your site blacklisted?


Sometimes I make fun of Paul Graham.


Um, your site isn't blacklisted:

http://news.ycombinator.com/item?id=2309858


Notice how it's instantly [dead]? Same for anything on xach.com.


But it should be! http://www.xach.com/lisp/taste-for-the-web.html

(btw, that link leads to a blank page for me, so I think it is blacklisted)


It also possible he is still unhappy about the exploit from a while ago. I did write him and ask that the blacklist be lifted, but did not get a reply.


TLDR Person found out other people can be immensely productive with other languages. Then person learned languages X, Y and Z with cool libraries and is now very productive and happy using them.

TLDR TLDR Libraries make a big difference!


To add some detail.

Programming languages live and die by their libraries, i.e. vocabulary. The differences in grammar are in my opinion rather small, when we talk about how expressive a clever programmer can be. Can a person be even more expressive in Lisp? Perhaps but it's not essential. The library support on the other hand is essential. You want to stand on the shoulders of giants for the next step. In all modern languages you can write elaborate, expressive libraries (read DSLs) for your pet problems.

I think my TLDR summarizes the original author's post but if someone disagrees, then we can have a fruitful discussion :)

Disclaimer I use Java and Racket daily.


I actually don't think that's the point of the article - it may be true, but it's not supported by the text or background story. This was written in 2002, and the author's tenure at Google was 2000-2001. That was pre-BigTable, I think it was pre-MapReduce, and it may even have been pre-GFS. Plus, Google's known for it's NIH syndrome - while there are a fair number of third-party libraries in use now, there weren't really in Google's codebase of 2000, which had just dumped many of the early frameworks they'd used for prototypes.

Rather, I think this is more evidence of the old "Good programmers will be productive in any language." The advantage that an expressive programming language like Lisp gives you is that it frees you to think about the problem domain and not worry too much about the details of the machine. However, if you're skilled enough that you've pushed those details into unconscious muscle memory, they don't matter anyway. And a language like C++ gives you the option of dropping down to the bare metal if the need arises.

There are a fair number of Lispisms in early Google code - MapReduce is the obvious one, and there're others that I'm not at liberty to discuss. However, they're Lispisms implemented in C++, where the author took the concept and transplanted them into a language that could give the efficiency needed. This is not a bad strategy - when you understand the concept fully, you're free to tweak it and adapt it exactly as necessary for your problem.

Perhaps not coincidentally, many early Googlers were also programming language & compiler guys before Google. Urs Hoezle (employee #9 and Google's first VP) had previously done StrongTalk (statically-typed SmallTalk), Self (the prototypical prototype-based language and an early inspiration for JavaScript), and the VM that later became Java HotSpot. Jeff Dean got his Ph.D on the Cecil/Vortex compiler, one of the first optimized implementations of CLOS-like multimethods. Rob Pike worked on Plan9 at Bell Labs and invented the Limbo programming language as part of it.


Yeah, I agree that good people can be successful with any tools, but I also think that good people with decent tools are even more successful. And good people will quickly see what is wrong and with what tools they can be expressive enough. And I think modern languages generally fall close to each other.

If you go into a significant company with any significant developer culture, they would have their own libraries and tools, which you would use because then you can deliver. So when those are written in f.ex. Python you would use it. Sometimes this also means that you use e.g. Eclipse though it has numerous problems because at least those problems are shared with most other developers and you don't have to fight them alone.

Google undoubtedly had great programmers pre-MapReduce et al. so they already had great stuff to use.


When you say early code, do you mean code that was replaced or just older code?


Older code, some (but not all) of which was replaced.


Very interesting points. Though in a clarification (http://groups.google.com/group/comp.lang.lisp/msg/fde8853dad...), he wrote: "You said it yourself: it's the library: regexps and database connectivity in particular."

In my own perspective, "all else considered equal", things like macros, CLOS, dynamic variables and conditions system have enormous advantages over say what Python has. But this advantage can be overwhelmed by other factors, since industry programming is a very cooperative venture. (Not just cooperation with coworkers, but also people you've never met.)


I think I half-agree with you. I don't think a great library can ever elevate an OK language to great. However, a poor library can certainly drag an OK language down to poor.

One of the most complicated decisions in developing any new programming language today must surely be where to draw the line separating standard library facilities from those to be provided externally. Provide too little, and you get a zillion incompatible external implementations popping up (C++ and strings; JavaScript and DOM manipulations). On the other hand, go too far, and you get your entire community relying on mediocre facilities, or worse, multiple competing facilities in your own standard (Java and GUIs; D in general). Likewise, if you have a common repository for additional libraries, you can be too restrictive on contributions and wind up with many basics still not covered (C++ and Boost) or you can be too open and wind up with a whole load of substandard or incomplete junk (Perl and CPAN).


Yes, Java is not elevated to great language status by the wealth of libraries. It gets the job done and it is possible to be productive with it, but many times you have to fight it. The language drags the libraries down in this case. In most other modern languages, I would say the libraries are what matters.

Racket has a decent repository (PLaneT) for libraries and easy ways to wrap C libraries.


Exactly. Looking from the other side, I suspect Java's much more comprehensive library caused more programmers to favour it over C++ than Java's garbage collection ever did.

I think the almost symbiotic relationship between C# and the .Net libraries today is an interesting case. It seems clear that several of the language features added to C# (or the underlying .Net execution model, if you prefer) in recent years were motivated by particular ways of working with the libraries. Usually, we see mostly one-way traffic, with standard libraries trying to paper over any cracks in the underlying language.


I think that ease to create libraries is the key here.

I should point that the existence of specific libraries can be seen as a library creation with zero effort. So heavy-library-weight Java can be seen as a very productive language, but only when you use already created libs.

The difference between languages shows when you're on your own, when there's no library or tool under your hand. When you cannot find a giant to stand on his shoulders.


Honestly, I'll probably get crucified for this, but:

tl;dr it's possible to be a Blub programmer in Lisp.


If we consider libraries part of the language, then I would say yes. All lisp implementations lack something for someone. And a language with great libraries may appear to be higher than others in some perspective because they offer a set of great existing tools. As far as limiting your thinking, Lisp in itself does no such thing, the libraries do it.

As a thought, I have sometimes wondered, why is it difficult for me to do something in Racket? It is not because a library is missing (though it could happen), but because it does not limit me. So it does not guide my thinking as much as let's say a strict language like Java.

When I don't have to think about classes with single inheritance and single-dispatch methods, I start to think about class systems, generic methods, multiple dispatch, may ditch classes altogether, go to a great unified graph of data or something crazier. I end up thinking how I should be modeling something and not doing the modeling itself. It does go overboard sometimes :)

Does anybody else face this problem?


You have the typicall overthinking problem. You should just start to write useful functions and then when you really see a need for something like multiple dispatch you have it at hand to solve your problem.

This way your System will grow into what you want you don't have to design everything upfront thats the wrong we to go about it.

(Design is fine but on a much higher level then the object system in your language)


Yes can be. My typical approach is to write down what I want to say in an as idiomatic way as I can. Then I go on to implement the notation that I have come up with.

The code I write is usually very high-level code. It can be written like an acceptance test or feature test. I essentially try to model the business domain of the software as cleanly as possible. I might refactor the code until I can express the domain clearly, with DRY etc.

Implementing all the bits of my DSL is often then the actual problem. Often I meet areas of the domain that are tricky because I have never solved such problems before. I think only my the third implementation of some idea can be something usable. So sometimes it takes a long time to get there! :)

This is only a problem in my personal projects because, well, the main goal is to advance my capabilities and thinking and finishing the project is secondary.


It could be that you have trouble think about these concepts but come up with good solutions in the end. Know that you have these features how would it feel to go back to Java. Then you think something like ok I would implement this with a multimethod and then you can start look for a complicated and ugly designpattern do mimic something like a multimethod.


> As far as limiting your thinking, Lisp in itself does no such thing, the libraries do it.

Isn't this BLUB at it's finest? I can't think of X in context Y, so X is unthinkable, thus Y allows me to think of everything.


I don't speak for the author, but I had the feeling he would retract those remarks today, based on our exchanges here on HN.

In other news, STFU and hack. Enough with Lisp politics posts. It's just a language.


Sadly, these multiple identities are not angry enough to qualify him as a "Mad people of comp.lang.lisp"

http://www.tfeb.org/lisp/mad-people.html


I guess I'm not mad enough yet :-)


Do you know of any startups using a LISP as the primary dev language?


I made a list a while ago but it's a couple years out of date. It's probably a big underestimate because I last updated it before Clojure started to boom. I'll add anything people mention in this thread and if anyone knows more, email peter @ pchristensen . com

http://www.pchristensen.com/blog/lisp-companies/


Yep, I just been to the new lisp meeting in Zürich. The meeting was by a startup that do pretty cool networking stuff. The use like 80% lisp, some low level C code and a tiny bit of R.

http://teclo.net/


There's a ton. I'm working at a new company and we use JazzScheme for everything, but it's a spin-off and not a startup.

The author of the original post made an angel investment in a Common Lisp-based startup after they went through YC.


ITA uses Lisp and was bought by Google for $700M.


The startup that Akamai bought that helps companies make mobile versions of their websites primarily used Clojure, and continues to do so at Akamai.

My creation, the world's best photo sharing site, primarily uses Kawa Scheme: http://ourdoings.com/


Flightcaster was using clojure as a core part of their infrastructure.


PG's Viaweb: http://en.wikipedia.org/wiki/Viaweb ...and they managed a good exit ;-)

PG's take on this subject: it's about beating the averages: http://www.paulgraham.com/avg.html


Does it have to be a _startup_?


``In other news, STFU and hack.'' -- best wrap-up of the month. You sire are a genius :-D sig'd.


He says norvig left lisp behind when he came to google witch is true but in Codes at Work he basiclly says that it was to hard to retrain all those C++ Programmers to Lisp was to much work and he uses Python because its a better sudo-code. He still thinks lisp is better for big projects.

It was again the problem that people where all trained in C/C++.


> its a better sudo-code

Now that's a powerful language. :)


Pervious discussion on Hacker News: http://news.ycombinator.com/item?id=107683


A more accurate title today would be, "How I lost my faith in Common Lisp".


Note python.

The beginning of the article was all Lisp demolishing C and Fortran. Then he saw that Python could stand up to it. Most of the flexibility, nicer syntax and better libraries.

Lisp has stood still for the past 25 years. Is it any surprise the rest of the world caught up?


I understand that casual conversation doesn't always require one to factcheck every statement, but did you think before you wrote "Lisp has stood still for the past 25 years" whether you really know that? And did you think it would lead to productive discussion?


When I read his comment I automatically converted it in my mind to "Common Lisp has stood still for the past 25 years." 25 years is probably too much, but compared to clojure and racket Common Lisp seems archaic, like reading Shakespeare. If it has had updates they've been on the edges, making the standards bulkier and more arcane, harder to parse.


Yeah, a total surprise that the world has taken 25 yrs to catch up.


I laughed at your comment and there's a good point in there, but then I downvoted it because it's counterproductive to this discussion. I'll get a headache if the comments here end up like every other language war on the Internet.


Maybe not that obvious, but my facetious comment was along the lines of other languages needing such a long time to catch up with Lisp. And the gist of it being that those all-the-rage features they are including are already present in Lisp. It something that leaves me thinking away, but hey, don't get too serious. I promise to be more direct next time!


Great write-up! Basically a person that was using more than 20 years of Lisp successfully and considered Lisp allowing higher productivity admits that there are now other languages that allows higher productivity than Lisp.

At the end when I read the comment:

> I think that if Lisp does not evolve it will die, and I > don't want to see that happen. I still think Lisp is > great. I also think it can be, and should be, improved.

I wonder what kind of improvements does the author have in his mind! If somebody knows please kindly enlighten me.


"Basically a person that was using more than 20 years of Lisp successfully and considered Lisp allowing higher productivity admits that there are now other languages that allows higher productivity than Lisp."

No, just a case of Stockholm Syndrome. http://groups.google.com/group/comp.lang.lisp/msg/d11c7e5619...

"I wonder what kind of improvements does the author have in his mind! If somebody knows please kindly enlighten me."

As Erik Naggum said: Erann Gat does not want to enhance Common Lisp, he [just] wants to feel better.

I encourage you to keep reading Naggum's line of thought: http://groups.google.com/group/comp.lang.lisp/msg/9edc8f7ee2...




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: