I learned to program as a teenager back in the 1980s, starting as most of a generation of future computer professionals did. I had an Atari 400 at home, and learned to program using the most popular language of the day: BASIC. There were lots of magazines like COMPUTE! and Creative Computing that included program listings for simple games that you could type in and experiment. The interaction was very hands on and immediate.
Sometimes I feel like we've lost this kind of "hobbyist programming". Because programming can be lucrative, we often concentrate on the saleability of our skills, rather than the fun of them. And while the computers are more powerful, they also are more complicated. Sometimes it feels like we've lost ground: that to actually be a hobbyist requires that you understand too much, and work too hard.
That's a weird way to introduce a book review, but it's that back story that compelled me to buy Conrad Barski's Land of Lisp. The book is subtitled Learn to Program in LISP, One Game at a Time!, and it's delightful. The book is chock-full of comics and cartoons, humorously illustrated and fun. But beneath the fun exterior, Barski is an avid LISP enthusiast with a mission: to convince you that using LISP will change the way you program and even the way you think about programming.
I've heard this kind of fanatical enthusiasm before. It's not hard to find evangelists for nearly every programming language, but in my experience, most of the more rare or esoteric languages simply don't seem to be able to convince you to go through the hassle of learning them. For instance, I found that none of the "real world" examples of Haskell programs in Real World Haskell were the kind of programs that I would write, or were programs that I already knew how to write in other languages, where Haskell's power was simply not evident. We probably know how to write FORTRAN programs in nearly any language you like.
But I think that Land of Lisp succeeds where other books of this sort fail. It serves as an introductory tutorial to the Common LISP language by creating a series of retro-sounding games like the text adventure game "Wizard's Adventure" and a web based game called "Dice of Doom". But these games are actually not just warmed over rehashes of the kind of games that we experimented with 30 years ago (and grew bored of 29 years ago): they demonstrate interesting and powerful techniques that pull them significantly above those primitive games. You'll learn about macros and higher-order programming. You'll make a simple webserver. You'll learn about domain-specific languages, and how they can be used to generate and parse XML and SVG.
In short, you'll do some of the things that programmers of this decade want to do.
I find the book to be humorous and fun, but it doesn't pander or treat you like an idiot. While it isn't as strong academically as The Structure and Interpretation of Computer Programs (which is also excellent, read it!) it is a lot more fun, and at least touches on many of the same topics. I am not a huge fan of Common LISP (I prefer Scheme, which I find to be easier to understand), but Common LISP is a reasonable language, and does have good implementations for a wide variety of platforms. Much of what you learn about Common LISP can be transferred to other LISP variants like Scheme or Clojure.
But really what I like about this book is just the sense of fun that it brings back to programming. Programming after all should be fun. The examples are whimsical but not trivial, and can teach you interesting things about programming.
At the risk of scaring you off, I'll provide the following link to their music video, which gives you a hint of what you are getting yourself into if you buy this book:
I'd rate this book 4/5. Worth having on your shelf!
Addendum: Reader "Angry Bob" has suggested that the language itself should be spelled not as an acronym, but as a word, "Lisp". It certainly seems rather common to do so, but is it wrong to spell it all in caps? LISP actually is derived from LISt Processor (or alternatively Lots of Insufferable Superfluous Parentheses), just as FORTRAN is derived from FORmula TRANslator, so capitalizing it does seem reasonable to me. Wikipedia lists both. I suppose I should bow to convention and use the more conventional spelling "Lisp", if for no other reason that Guy Steele's Common Lisp the Language (available at the link in HTML and PDF format, a useful reference) spells it that way. Or maybe I'll just continue my backward ways...