Reviewed: November 2012
Let me state right up front that I’m not in the intended audience for this book. Fluent C# is a book for beginners to programming. Although I do feel like one from time to time, I’ve spent the better parts of my adult life hacking together software systems of all scales. Reviewing a book for novices is hard. My view will be quite different. A reader with little programming experience is likely to focus on other aspects and will probably face different problems. So why did I opt to review it? Well, this book claims to be different. It’s based on principles of cognitive science and instructional design. Both topics I have an interest in. From that perspective parts of the book provide an interesting read. To a beginner interested in learning C#, the technical inaccuracies are likely to become an obstacle.
Superficially, Fluent C# is similar to the well-known Head-First books. Perhaps this is of little surprise since they both draw their educational principles from the same basic research. The learning concept is based on activating multiple senses. The book is littered with graphics, dialogues and attempts to provide the big picture early on. The details are filled-in as we read along. Whereas I’m a big fan of the Head-First concept, Fluent C# doesn’t work as well. The most striking problem is the layout. All pages are set in a soft, brown tone that becomes strenuous to read. The layout definitely has to be fixed in future editions.
As far as the technical content goes, Jon Skeet has published a +60 pages document on Fluent C# . The document contains notes and an unofficial errata for the book. The errors range from ambiguous language, syntax errors, and all the way down to the curious case of code in a different language than the C# promised in the title (in this case some VB code got included in one example). Some amount of errors is inevitable; I mean, even Knuth makes them. But in a book aimed at beginners, the number of errors and omissions has to be considered a serious flaw. If we look beyond the errors to the actual content, we see that the bulk of the book is about writing applications with the Windows Presentation Foundation (WPF). The actual C# introduction is quite rudimentary. A lot of later additions like implicit typing and LINQ are skipped. Instead the author attempts to mix in some high-level design discussions. I find it hard to see how a novice programmer could benefit from these brief discussions on architectural design patterns. A pattern like Model View Presenter (MVP) is non-trivial in its details and requires experience beyond what Fluent C# provides.
I took on this book with high expectations. Far too many introductory books take a narrow, technical perspective. Programming is hard enough as it is. We need books like this, designed to actually learn from. I do hope future editions address the present problems. In its current state I cannot recommend the book.