"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).
One interesting feature of the book is that the first half includes both CoffeeScript and consequent JavaScript for each example. Mark Bates really drives home how he learned CoffeeScript. Feature by feature, you get plenty of code snippets to read, compare, and study. The book never seemed to go too fast, nor too slow, even though the pace is not blazing.
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.
Overall, this book is a good addition to CoffeeScript coverage. I am very glad I read the first half, and will refer back to it to expand my understanding and usage of CoffeeScript. The second half had some useful tips, including the tip to use the coffeescript compiler as a node runner (to avoid having jump from JavaScript into CoffeeScript) since CoffeeScript compiler is implemented in Node.js. That's an intriguing (if problematic) tip to eliminate JavaScript startup. I also believe the Jasmine testing chapter will be valuable. And the ToDo example seems valuable for those interested in MongoDB and/or Backbone.js.
Bottom line: Mark Bates covers CoffeeScript well in the first 160 pages. The length is not as long as it sounds due to the copious CoffeeScript + JavaScript examples, and the pacing is steady, so it's a surprisingly easy read. While not the final word on CoffeeScript, Mark Bates' book covers CoffeeScript well with plenty of examples and a superb kickstart on "Testing with Jasmine".