Author: Peter Seibel
Audience: intermediate programmers who want a leisurely guide to Lisp
Reviewer: Mike James
A practical book on Common Lisp - surely some mistake?
This isn't a new book in the sense that it first appeared in hardback in 2005. Now, however a paperback edition has been published.
Lisp isn't a language that is thought of in the same way as say Java or C#, and it is usually regarded as a language for academics or perhaps for research into AI. But Lisp is becoming better known as functional programming creeps into the mainstream and languages such as Clojure make the Lisp way of doing things seem more practical.
So why not take a look at the language itself rather than a dialect?
Well the first thing to say is that Common Lisp is a dialect and the more academic version of Lisp is probably Scheme, which is what you probably learned if you encountered Lisp as part of a computer science course. In principle Common Lisp is supposed to be the practical one.
This is a book that aims to introduce you to Common Lisp and to a certain extent convince you that it is indeed a practical language. This is the reason why it starts off with a database-style example which I didn't find particularly helpful or convincing.
Overall the book is aimed at experienced programmers who want to know about Common Lisp. If you are a complete beginner then don't bother trying to learn Lisp by reading this book. You even need to be a fairly well read and competent programmer to get much out of the book. It tends to work by showing you examples and discussing things that go well off topic. It is also fairly weak on showing you how to get started and in this respect you mostly have to cope on your own.
After the lightening tour - which takes the first three chapters - the book settles down to tell you things in a more rigorous way - but it never falls back to being a reference book. From Chapter 4 we have a fairly standard course in Lisp - basic syntax, functions, variables and macros. By Chapter 8 you know as much basic Lisp as you need to write some real programs.
The introductions to these topics are all very long-winded and discursive. If your preference is for syntax diagrams and exact specifications you will find this book very irritating. You also need to be warned that there are lots of forward references and you will need to be active in following the flow.
Chapter 8 starts a run of practicals and examinations of "bigger" topics interwoven together, but getting more and more practical as the book draws to a close. The big topics are things like working with data, object programming in Lisp, exception handling, operators and advanced loops. The practical examples are a major part of the book and include: unit testing; a spam filter; binary files; ID3 parser; web programming; shoutcast server; MP3 browser; and HTML generator.
At the end of the book what is the conclusion?
I'm still not convinced that Common Lisp has any huge advantages over any other language and the main problem is that there doesn't seem to be much to gain when the application doesn't need recursion or a custom data structure. But read the book, you might have a different opinion.
This is only a good book with which to learn Common Lisp if you like rambling accounts of programming languages. It isn't a concise introduction to anything and you do need to be a fairly sophisticated programmer to follow its account. The author is enthusiastic about the topic and it shows in the idiosyncratic style. It would benefit from a heavy editing and perhaps losing 100 pages. On the other hand many introductions to Lisp are criticized for being far too terse so perhaps you can't win.
If you really want to find out the flavor of Common Lisp this isn't a terrible place to start, but be warned - it's not for the complete beginner to programming.