Book Review: Land of Lisp

The elegant Lisp is known as a beautiful, but not always approachable, programming language. Conrad Barski's Land of Lisp is a smart and accessible guide to the enigmatic functional programming language.

As I approach the task of reviewing Conrad Barski's excellent guide to the Land of Lisp, I have a confession to make to fellow travelers: I do not actually like Lisp as programming languages go. My thinking about the coding universe goes along the lines of a famous Xkcd strip; ostensibly, the World itself was coded in Lisp, but in reality... things are different.

Why do people have such strong positive or negative feelings about Lisp? There are a number of reasons. Lisp is an extremely expressive language, and it has what can be best described as a mathematical elegance that rapt admirers will call a thing of beauty. On the other hand, Lisp can also thwart seasoned professionals with a half-dozen languages under their belt -- and indeed, it does so in most cases, because it requires a radically different mode of thinking that is quite unlike the usual Procedural and Object Oriented mental models: Functional Programming. If you have never learned a functional language before, it is Functional Programming, not Lisp itself, that will present the real learning challenge.

Lisp has not been exactly the most popular publishing subject as of late: in the recent past, the most obvious comparisons to Barski's Land of Lisp are Tomas Petricek's Functional Programming (Manning) and the MIT Press' reissue of the Little Schemer series. These books represent really different approaches to the subject matter. Petricek's book does not even cover Lisp, choosing instead to focus entirely on F# and C# in the .NET environment, but delivering what is possibly the best written introduction to Functional Programming I have come across so far. The Little Schemer is one of the most extreme takes on teaching by example I have ever encountered, covering both the Functional Programming style and the Scheme dialect of Lisp in a unique approach built, almost entirely, on code samples; with the exclusion of the preface, this is a book with far more code than text. Stemming from the 1970s' Little LISPer, a book that had a cult following in its time, the Little Schemer is a great introduction to Functional thinking, but it must be read strictly sequentially to make sense: jumping back and forward in the text is entirely impossible on the first read. For this reason, and the complementary need to have a reference book handy while coding, I have been treasuring my 1990 edition of Guy L Steele's Common Lisp (Digital Press).

These previous books form the background against which No Starch Press is releasing Land of Lisp, which covers the original Common Lisp but spans concepts and methods relevant to all the modern dialects, such as Scheme, Clojure, or even Emacs Lisp. The method Barski uses to approach the subject is less extreme than the Little Schemer's; this is a traditional book with extensive explanations, and a supremely readable one at that. The author's style is fluent and pleasant to read, and it makes your quest into the language downright enjoyable, providing a gradual introduction into the details of syntax as the reader is guided into the deeper mysteries of Functional thinking. Those who found other introductions to Functional programming perplexing will love this book as a patient and steady guide into the new territory.

Barski uses the time-tried technique employed by many college teachers of AI: using games as course or homework material. This book methodically exposes the reader to increasingly more sophisticated aspects of the language in this manner, and it is perhaps the best rendition of this approach I have read to this day. The book starts with the essential syntax needed to find one's bearings in the land of parenthesis, and then quickly approaches important practical, but often sadly downplayed, aspects of the language that more academic texts do not put in the deserved spotlight, like advanced data types and stream I/O. The author does not hurry to force on us the strict definition of Functional programming, which does not appear until chapter 14, and when he approaches it, he is able to cleverly explain the crux of the matter in just 10 pages, performing the rare magic of insight and concision all at once. He similarly introduces the Lambda function (in the humorously numbered chapter 6.5) in a mere 4 pages -- readers recovering from a botched previous introduction to Lisp will enjoy reading these two pearls. While the book is best read sequentially, skipping around the book to learn specific subjects (like loops or macros) is entirely possible, which appeals to the perpetually time-crunched professional reader.

I can almost hear the readers mumbling "professional audience, of Lisp?" In fact, Lisp has more industry applications than one would naively expect, particularly as a result of its long history and of MIT's more recent insistence on exposing students to the Scheme dialect early in their Computer Science track coursework. Just in my local neighborhood, I can point to a major airfare engine and an even larger distributed network infrastructure provider that makes use of Lisp code in their core or in their business operations. Reddit.com was first implemented in Lisp, and the list goes on and on. A programmer needing to take on Lisp from scratch would be well served by the combination of Barski's teaching approach with a comprehensive, up-to-date online reference to the relevant Lisp dialect.

Although Barski's introduction is particularly smooth, one should not receive the idea that this is barely an introductory book. As the text unfolds, increasingly more complicated language elements and examples are tackled, such as the development of a web server, manipulation of SVG images, and the creation of domain-specific languages. Lisp is uniquely suited to code manipulation, for reasons best left out of this review. The book is also extensively illustrated with quirky cartoons that complement the learning experience for a fun reading experience.

In closing, I will say that I really enjoyed reading this work, despite not being one of those who worship the Lisp programming language. The author does a great job of smoothing the path around the bumpy spots, providing interesting, reasoned, and motivating examples. Perhaps after reading this book, you might join the ranks of those who swear by Lisp's unique beauty, but even if you don't, at the very least, you will eat parenthesis for breakfast.

Besides, how many programming books do you know that have their own music video?

Powered by eZ Publish™ CMS Open Source Web Content Management. Copyright © 1999-2014 eZ Systems AS (except where otherwise noted). All rights reserved.