"Programming in CoffeeScript" is solid and sets a new standard for CoffeeScript coverage, and that's why I give it 4 stars. It also has pleasant pacing, and practical insights.
( NEW 2012-11-13
However, I give Chapter 8, "Testing with Jasmine", a full 5 stars for solving the TDD problem in CoffeeScript. The one hiccup was that the matchers in the book were already outdated (!) since they'd been renamed. Once you know the discrepancy, the "fix" is trivial --- like a bunch of predictable typos, and coincidentally Bates provides the URL to Jasmine Matchers in note #11 at the end of chapter 8. For me, this chapter was worth the price of the book. Without hemming and hawing, Bates just points you in the right direction with a complete, convenient, and powerful TDD solution for CoffeeScript (& JS) --- including a headless test rig that works on the command line, optional colors for visibility, a TextMate bundle for convenient testing within editor (look Ma: No shell!), and enough pointers to suss out other details as needed (e.g., note #11 for Matchers reference). The calculator code example is quick, simple, and solid training --- and I now feel like I have the TDD toolchain licked for CoffeeScript thanks to Bates. In a 2nd edition, perhaps Bates could even add something on async testing with Jasmine. Nevertheless, the "Testing with Jasmine" chapter makes "Programming in CoffeeScript' my favorite CoffeeScript book by far.
The first half of the book (about 160 pages) describes CoffeeScript in detail and provided the lion's share of the value I get from this book (along with Chapter 8). Compared to The Little Book on CoffeeScript (a good CoffeeScript quickstart) at "62 pages", this book spends about 2-3x as many pages on CoffeeScript, and the treatment feels much more thorough. So if you're looking for the best coverage of CoffeeScript, you have found the book (as of September, 2012).
Mark Bates covers CoffeeScript well --- for the first half of the book. Then he detours onto using CoffeeScript and finally a big three chapter ToDo example. The second half of the book had a few chapters which interested me (testing with Jasmine, and node.js), but the ToDo example did not seem so keen unless one is fascinated by MongoDB (several chapters) and Backbone.js (last chapter).
One mixed signal from the second half is how the author added some third-party code (backbone_sync.js from backbone-rails) to an example, and then punted the explanation, e.g., "I don't really expect you to understand what it is doing, especially because we haven't gotten to talking about [Backbone.js] models yet, but believe me, it'll make our lives a little easier and nicer. So just accept that it is helping us and thank it for being there." As you can read, the tone is a little casual, and while the advice may be practical, the lack of explanation leaves something to be desired. Personally, I found Mark Bates' tone pleasantly conversational, but in any new edition, I'd hope Mark Bates could connect the dots fully for complete satisfaction and enlightenment of his readers.