So it’s now my second week of playing with LISP and I have to tell you it’s been a heck of a ride so far. I’ve played with LISP in the past, but never with such intensity. I figured I’d share some of my experiences as I engage with this language once more.
It’s hard to convey the value of learning LISP. I’ve played with Scheme in the past as essentially mental gymnastics…the LISP family really challenges the way one thinks about programming in general. More recently, the increased popularity of languages such as Ruby has increased interest in functional languages…many of which trace there pedigree back to LISP (which has been around since the 50s). For you .Net and Java developers out there, the increased importance of functional languages could easily be justified by recent additions to the feature sets of both languages (lambda expressions, closures, anonymous functions…all LISP).
My first experience with the LISP was in 1998 while taking “Survey of Programming Languages”. As part of the class each student had to start off by writing a paper about any programming language that they wished. I though that LISP sounded neat and wrote a paper on Common LISP with a focus on the CLOS. Much to my chagrin, I soon found that our next task was to implement a set of programs in our language of choice. I began to think that maybe the guys who picked languages like Fortran and Pascal weren’t such idiots after all…in short I was hating life.
My first major hurtle in learning LISP enough to survive the course – by survive I mean earn an ‘A’ – was picking an implementation of LISP. I found that there weren’t a whole lot of options for my Windows 95 box. I ended up settling with Harlequin’s implementation, but it wasn’t near as nice as what I’d used for C++. I delivered my code on time, made the marks I wanted, and then chucked LISP near the dusty bottom of my mind…along with Pascal and numerous flavors of Basic.
Now 10 years later I’ve dug out the language am giving it another go. I’m now aware of quite a few LISP implementation to choose from and picking the right one for me has been a bit of a chore. Dr. Scheme was pretty cool, but I really wanted to learn Common LISP…so I finally settled with Allegro CL (for the time being at least). The IDE choices are equally disappointing, but there are a few reasonable choices.
I’m currently using LispBox, which packages Emacs-Slime-AllegroCL in one nifty little package (Allegro’s IDE is terrible…for my uses at least). I must agree that Emacs is probably not for everyone. There are implementations supported by vi as well as a number of commercial products. For Dev Studio guys the IDE options are pretty depressing. There are numerous references to an Eclipse plugin called CUSP that sounds pretty good, but I haven’t used it myself. As far as Eclipse, I’m using Ganymede. When I tried to install CUSP in the past I was thwarted by a bad URL for the update site…I tried an alternate URL that worked, but wouldn’t run on Ganymede (looks like it was written for Europa). Dandelion seems to work okay, I just haven’t played with it yet (comes with CLISP implementation).
As far as learning the language itself, I’ve found a couple of sites that did a wonderful job at justifying learning LISP. Erik Rasmussen did a great job in explaining both the delight of learning LISP and the horror of picking an IDE. Erik also referenced another article that did an amazing job of describing LISP in terms familiar to C++/C#/Java people…it’s a little long but well worth the read. My favorite book to date on the subject has been Practical Common Lisp by Peter Seibel. Seibel’s book is geared toward developers already fluent in another language…so it doesn’t beat around the bush too much.
Well, that’s it for now…I’ll share what I learn if I think I can present something of value.