Please note: I've just finished chapter 3, and I am writing it now, because not only finishing entire book will take me a year, but also I am not even sure I want to read it any more. It is really *that* bad.
Why bad? First of all every psychologist will tell you, that in order to feel satisfaction from work (including learning) you should set short loop -- work, evaluation, work, evaluation. If you set your goal (time of evaluation) so far, that you have to do a lot of work, it is very likely that you get frustrated before finishing it. This is basic stuff, and every teacher (book writer is a teacher) should know it.
Either author of "Lift in Action" is so incompetent or simply ignored that principle -- as the effect, reader does not go easy route, like small example, a bit more complex example, a bit more... but instead he/she has to tackle with full blown auction system, and when you start adding pieces together you might just wonder "what the hell is that for" -- because it is virtually impossible to see the big picture just from the start. If you were hoping for incremental, iterative learning -- forget it!
Second -- in order to save space in book (why? after all reader is paying for this, so I don't get and I don't accept taking such shortcuts) author moved large chunks of code to the webpage. There are few problems with this approach -- the downloadable code is finished. There is nothing to add to it. So you have in your hands incomplete code from the beginning of the chapter and all of the sudden complete code -- the struggle the author describes in the book is not applicable, because if you run the code you will simply jump to the end of the chapter.
Third thing -- this is nothing short of magic. Somehow (magically) you have two different versions of code, in book you have package "manning", at webpage you have "example.travel". In book you have "DBVendor", at webpage you have "Database". HOW IN HELL DID IT HAPPEN?! Does the author have some weird virus which on copying changes the code?
Fourth -- when author refers to some code, he uses either class name or even some property of it. So for example when you read that you should fix "SiteMap" you, supposedly beginner, should already know by heart that SiteMap is located in Boot.scala file and Boot.scala file is on the other hand located at... And so on. There is space to add that piece of information and save reader this bit of struggle. None of the author's concerns.
Fifth -- from time to time author asks you to add some code to the existing class (it does not make sense in general, see (1)), but he does not tell where you should add it. At the end of the file? At the beginning of the class? And just for more fun, there are pieces, when you have to split the presented code into smaller chunks, and put it in various places in the class. "Of course" with no info where to split the presented code.
Sixth (oh, yes, the list is getting bigger) -- the lousy language does not help. For example author uses word "consider this class" as the meaning "type this code". Here the downloaded code helps, because you can spot, that the code is already there, so that "consider" didn't mean "think over".
Seventh -- the result of all the above mistakes. You cannot work with the book and computer. You have to have book opened, computer running, with your code, with author code, and constantly synchronizing in your mind, what is the actual state of the work ON THE AUTHOR'S COMPUTER. This is essential to understand all the steps (I admit, I've got lost).
Eighth -- big chunks of code (from the webpage) are not explained. You are on your own.
Ninth -- it really tells me a lot, when I see an outline of database with such consistent naming of the fields -- "opening_hours", "inbound_on", but "superUser" or "shippingAddressOne". Is this a joke? When you see it in the same context, you can easily account it for author sloppiness, but when you see it in mixed environment you can start doubting, if there is some unspoken convention that you name "openingHours" a field in Scala to get it converted to "opening_hours" in underlying database, or does sloppiness strike again.
And tenth -- a lot of pieces are based on promise. Add this or that, but don't think to hard, just add it -- the meaning will be explained in the chapter 7, 9, and so on. So this is magical programming, you don't have the clue what you are doing (except for typing) but it is the right thing to do, because author says so. Now, please stop for a while, and explain how this "programming" is different from just typewriting?
I hope the author is knowledgeable person, because as a teacher he is a disaster. I've bought this book to learn Lift, and avoid googling. Now I have to google just to understand this book. Just great! In my opinion, such lack of responsibility, dismissive attitude is offensive to any reader -- I feel like being slapped in the face by some crook. I paid for this book ~$30, but reading it costs me way more in time, and this makes me angry because I am doing all the work, the author should do in the first place. And I have time for learning, but not for playing such stupid "games".
I will try to read it a bit more, but I am close to decision to abandon Lift until a decent book will be published, and for now, get back to JSP, at least I have solid books for it.
And if you wonder this review is written by some kid who wanted to be a hacker, and simply is overwhelmed by wisdom -- 26 years of programming experience with Delphi, C++, C#, Scala, PHP, Perl, Bash, and I've read a lot of good books. It happens that I also taught programming so I know how to prepare for such task.
Remark about publishing quality: this does not mean the author is excused, but something wrong is going on with entire industry nowadays. Ten years ago I could buy a book, just blindly, and I would have guarantee it is so good, that I should worship it. Now, when I buy a book, I risk it is material only for trash. This book is clear example of the latter case.
UPDATE 2012-04-09: Eventually, I've bought and read Wicket in Action, it is much, much better than this one (the major drawback is not entire content is printed in the book), and despite entire book has Java in mind, not Scala, I recommend WiA over LiA anyway. After all Java and Scala are both JVM languages.