October 27, 2006 at 18:12 Tags Lisp

When someone says that "people like flocking, like sheep" it's usually meant in a derogatory way. However, when it comes to programming, flocking may be very useful. If you're a dedicated hacker, you can surely have a lot of fun implementing a language of your own, adding to it tools of your own, and using it to develop software, but when it comes to solving real problems rather than reinventing the wheel all the time, when it comes to creating interesting and useful programs quickly and effectively, a strong community support is essential. A strong, wide community means better modules that solve a wide range of already solved problems, in a more efficient way and with less bugs. It also means a strong support base which you can use when you're stuck solving your challenges.

This is what makes Perl such a wonderful language for writing programs quickly. Although the Perl 5 language itself is far from perfect, and many valid claims can be said about its deficiencies, its powerful user community still makes it the best language out there to just get things done. CPAN - the Perl archive of modules and Perlmonks - the community forum, are the two best things about Perl, things other languages lack. For there is no other language I know of that has a module archive as comprehensive and useful as CPAN, and as great a user community support as the one at Perlmonks.

On the other hand, there is Lisp. I don't want to start a discussion here, but in my humble opinion on a pure language-wise basis Lisp is superior to Perl (and probably to any other language out there). This is all good and well while hacking at toy projects for fun. When it comes to creating real, useful applications quickly, Lisp falls far behind Perl. The reason for this is, I believe, is fragmented, small and belligerent community.

First of all, the name Lisp stands for a family of programming languages. The family consists of two major dialects - Common Lisp and Scheme and several smaller ones (Newlisp, Arc, EuLisp and others). Of the two major dialects, Common Lisp seems to be more practical and uniformly supported, as the Scheme community is smaller and is further sub-divided into different implementation specific dialects.

The Common Lisp community consists of a few loosely coupled module archives (nothing even resembling CPAN in breadth and quality) and a discussion group - comp.lang.lisp (formerly a Usenet newsgroup, now part of Google Groups). comp.lang.lisp has an interesting history, but to tell it I want to first define what a flame war is.

The term "flame war" was coined on Usenet to describe a discussion that has slided from professional rails and moved to personal insults - a heated exchange between two or more posters - a "noisy" brawl. Such "wars" often result from people called "flamers" or "trolls" who act in a deliberately hostile and insulting way, such as posting "C sucks, long live Fortran" in comp.lang.c, or claiming for years that they've found a simple proof of Fermat's Last Theorem on sci.math, objecting any attempt to criticize the obviously incorrect proof steps they present (look up "James Harris" on sci.math, or read this).

Well, comp.lang.lisp is a champion of flame wars. In fact, it is my firm belief that during the past few years extensive flame wars made the group barely useful for sane discussion of Common Lisp. The biggest problem here is a complete resistance to any form of introspection. I will clarify this point: by introspection I mean the act of people discussing the relative merits of the language their group is devoted to, and acknowledging its shortcomings. There is something in the comp.lang.lisp atmosphere that's wholesomely opposed to such study. It probably didn't start with him, but one man's acts have played a major role in this - the Norwegian Common Lisp programmer Erik Naggum.

Now would be a good time to search for "Erik Naggum" in the Common Lisp archive - 10 minutes spent reading the search results should leave a good understanding of what he was. "Was", because Naggum bade farewell from comp.lang.lisp a couple of years ago after another noisy flame war (of which there were many). And yet, as much as the CL community will hate to admit it, and as much as its leading members have fought against Naggum for years, in some metaphorical way Erik Naggum is what Common Lisp and its community are. He is an experienced programmer of the highest level - his wizardry is apparent from the serious discussions he took place in. This is probably what leads to his inflated sense of total and utter perfection. Any objection, any misunderstanding leads immediately to an articulate rebuttal which very quickly descends to personal tones.

And yes, I think it still represents the comp.lang.lisp group, even in the post-Naggum area. Just look up the latest debate of the shortcomings of Common Lisp that was incited by Steve Yegge. Lisp is as close to a perfect programming language as any, and its zealots guard it rabidly. Criticism isn't tolerated. Ignorance isn't tolerated - which drives many newbies away quite quickly. Lisp has been attacked so much before, that any post by a newbie meekly seeking an advice on some arcane feature gets immediately interpreted as criticism and turns into a flame war. True, Erik Naggum was the main cause of such flame wars in the past, but he wasn't the only one. Wake up, Common Lisp gurus - your language is so unpopular because of you - there is no one else to blame. If you ever asked yourself why is CL much less popular than the obviously "brain dead" Perl (paraphrasing Naggum's favorite Perl quote), the answer is the community, that is you. Try logging into Perlmonks, and ask a simple newbie question, wondering why something works like this and not that. Note the answers you will get. Unless your post is obvious flame bait, you will be answered in a helpful way, often by some of the most high-standing Perl luminaries. Now, compare this to comp.lang.lisp !

So, true, Lisp is a great language. Many seasoned programmers come to acknowledge it after a few years of looking for the best language to program in. However, after 40 years, it's still not ready for the "big world", and that's because of the user community. Once comp.lang.lisp learns to accept that (1) their language is not perfect, but there's nothing fundamentally bad about it, and (2) not all programmers are wizards, especially in their first couple of years on the craft, Common Lisp might just experience a renaissance. I sure hope to see that happen.