One measure of the health and vitality of an online community is the number of people actively participating in that community. The online communities of many programming languages have grown tremendously with the advent of the Internet despite any technical limitations in the programming languages themselves. Although it has been argued for years that Common Lisp is technically superior to other (some would say all) languages, Lisp has failed to capitalize on the boom in Internet users to captivate the same scale of user base that other languages have. I will argue that the focus on technical merit is futile for attracting users and that a “killer-app” is needed to grow a sizable community.
One of Paul Graham’s principle arguments for the adoption of Lisp (especially on the server-side) is that Lisp will let you build powerful applications more quickly. The basic argument is that Lisp’s powerful abstractions (macros and first-class functions) were key to his success in beating the competition of Viaweb. His numerous essays expounding the benefits of a Lispy company have brought many people to consider Common Lisp as both a venerable repository of programming wisdom and an elegant tool for creating web programs.
But his essays have failed to bring the massive numbers of users the community needs and deserves. One of the most common complaints one hears of Common Lisp is its lack of libraries. This obviously wasn’t the case in the past (there are gigantic repositories of old Lisp code buried in FTP sites). People complain that even the simplest of tasks have no decently supported library. It used to be the case that Lisp had most of the libraries. But Common Lisp has failed to keep up with the burgeoning number of file types, protocols, algorithms, and API’s that has exploded with the adoption of ubiquitous computing.
While some may blame Common Lisp’s technical qualities (overeager use of parentheses, age, difficulty of use), I believe that these are not the cause of its lack of popularity. Many of the popular languages today began life much worse off than Lisp is today. Java was hideously slow when it first emerged from its corporate womb. Despite Ruby-on-Rails’ admitted scalability issues, the popularity of Ruby continues to grow. The list goes on. But if it’s not technical merit, how does a language become popular? How does anything become popular on the Internet?
In order to understand what draws and keeps users online, I would like to use YouTube as an example, though many other websites would do as well. YouTube has built its popularity on three main functions: consume content, share content, and create content. These are the three purposes of social media that Clay Shirky expounds on. Users can browse YouTube’s website for videos, send cool videos they see to their friends, and upload their own videos.
The triad of functionality (consume (“This looks cool”), share (“Hey, look what I found”), create (“Hey, look what I made”)) create a virtuous circle. People who browse to the site find cool videos that they want to send to their friends. Those friends then tell more friends, who tell more friends. People want to upload their videos. Some want to impress people and get lots of views. Others just want a place to put their video and get feedback. But for whatever reason they do it, the community grows in size and strength for each video seen, shared, and created.
But there’s something more to it: there are extremely compelling reasons to want to participate. Video allows for Narrative. Humans have a deep need to tell and listen to stories. Stories help us navigate the difficulties of life and keep us feeling connected to each other. Video allows for Novelty. New “viral” videos appear all the time on YouTube. Though they don’t necessarily tell a deeply compelling story, they are new and creative enough to get sent to their friends a lot. Lastly, video allows for Community. At least the way YouTube does it. People post not only text comments but video responses as well. YouTubers want to participate, find common ground, and express themselves. It was not the technical aspects of streaming video on the web that made it so compelling to use. It was the way it let people interact.
It is this same aspect that brought Perl users together. Perl has the same triad that made YouTube a success: consume, share, create. Perl poetry brought narrative to the community. Perl one-liners in email signatures spread a kind of novelty. People love to compete to write the shortest Perl program that sings Happy Birthday (community). There is something that made people exclaim “Hey, look what I made!” on IRC. Some people collected them on their web pages under a heading equivalent to “Hey, look what I found!”. It was compelling to learn how others did what they did. There was a kind of implicit narrative about how extremely obfuscated programs worked. Legends were born. Perl was a social programming language. CPAN (Perl’s module repository) acts the same way. People consume modules, tell others about a cool module, and upload their own modules.
I would argue that Ruby is the same. People are excited to find some cool feature, some new idiom. Excited enough to exclaim it to enough people to get the buzz rolling. The RubyGem system allows for sharing and creation of new code in a social way. Ruby’s features are novel enough to make people want to share. People feel compelled to try it (consume) because of the ease of creating a new web app with Rails. Before Rails, Ruby was not very well-known. Rails was its killer app.
And if Common Lisp wants a bigger, more vital community, that’s what it needs. Common Lisp needs a killer-app. A social application that lets people consume code, share code, and create code. An application that makes it compelling to participate. Technical merits are not enough.
I don’t think there is a “magic formula” for creating such an application. I would guess that a lot of experimentation would be needed before anything has the “killer app effect”. But I can suggest a domain that I think has a good chance of working. It combines narrative, novelty, and community into its medium (and therefore message). That domain is video games.
Video games are a great medium for narrative. People can tell very compelling, interactive stories with simple games. Novelty also plays a big role in games. Players want new graphics, new gameplay, and new levels. And consuming good games is inherently compelling because it is fun. Sharing cool video games is natural.
The last part of the triad needed to make it compelling is the community. And that has to be done right. People need to feel that they belong and that they want to contribute. It would be a trivial exercise to emulate YouTube and make a website that had pages for each video game, score boards for high scores, and comments.
And although on the surface people are creating and playing video games, more fundamentally they are writing and sharing Lisp code. A cool video game will most certainly stoke the curiosity of programmers. And when they ask “How was this written?”, the answer is but a click away. People will post their code to their blogs and on IRC and in their email. Much as Javascript one-liners make their way around the web-development world, Lisp one-liners would allow the prowess of coders to be known by all. “Run this line at the REPL and watch my cool fireworks display.” “Pong in 10 lines.” I think it speaks for itself.
The technical hurdles are small. At base, one needs to be able to create, consume, and share the games. A good Common Lisp video game framework would let users interactively develop small, fun games. People could develop the game interactively—they could see the results of their coding as they code. A good framework would make it simple to create a simple game. The SDL bindings in Lisp seem to have a good reputation, so it shouldn’t be hard to bootstrap something. Consuming should be as easy as downloading a file and pointing their Lisp image at it. Sharing is trivial with the ubiquity of email.
I believe that this could work, if executed well. And there are certainly other applications that have potential. But I am certain that Common Lisp needs a compelling application to draw new users. Espousing its technical merit (even superiority) will not grab a decent share of the programmosphere. Can we encourage an irresistible urge to show off Lisp code? What would it be like to commonly see Lisp expressions in people’s email signatures?
