The first thing I noticed were the cake’s printed on the cover, they don’t look really tasty to me because of the odd colors. Thankfully the inside of the book looked much better.
The overall structure of the book is good and makes sense. The writing style is easy and pleasant to read, therefor all the grammar and punctuation mistakes didn’t bother me at all. The indentation of the code blocks isn’t always consistent, but it’s not really annoying.
I really like how the chapters are divided in ‘Time for action’ and ‘What just happened’. You start building working applications right away, after you’re done there’s a clear explanation of what you just build. Perfect for a practical person like me.
Unfortunately there are quite a few times where the writer is making assumptions or is giving advise, but is not explaining why it’s good to do this or that. For example page 27:
We then defined a variable named $name in the Task’model, and assigned the name of the model to it. This is not mandatory, as Cake can figure out the name of the model automatically. But it is a good practice to name it manually.
People like me want to know why it is a good practice to name it manually…
The book is clearly written for developers which are new to CakePHP, but being new to Cake and being retarded are 2 very different things. Why bother writing almost 4 pages for downloading CakePHP alone?
Because this book was written for the beta version of Cake, there are quite a few things that work differently now with the final release. I’m not going deeper into this because other bloggers already did this for me ;)
Some code examples contain bad practice PHP code, write good example code for the readers so they don’t learn bad practices. One example is the remember me functionality of the Quickwall application where both username and password are saved in a cookie.
All in all, I would recommend this book to everyone who’s new to CakePHP because it’s a really good startup. I do hope there will be released a new revision soon to fix all the grammar and deprecated example code.