Author: Bart De Smet
Publisher: Sams, 2013
Aimed at: Intermediate to advanced programmers
Reviewer: Mike James
This is the latest update to the C# Unleashed volume and the good news is that this encyclopedic tome has only grown by a few pages. Does it cover everything?
It is aimed at intermediate to advanced programmers and most of this group could happily skip the first few chapters missing anything other than orientation and background - but it is quite interesting orientation and background. It has been reworked to remove a lot of the less relevant material and include interesting topics like initialization expressions. Overall the changes may be slight but they make the introduction much more worth reading.
The previous edition was divided up into parts but this edition just has chapters - but covering the same material. By the end of chapter 3, which was the end of part one you have been exposed to a lot of ideas and seen your first C# program. This may be an introduction but it isn't for the complete beginner. You need to have a reasonable level of sophistication to get the goodness out of these chapters - with the possible exception of the discussion of your first C# program.
Chapter 4 is where the book really gets started on its task of documenting C# with a detailed and fairly technical walk through everything that is part of the C# language and arguably some that are not. In the earlier edition chapters 4 though 25 were titled "C# - The Language" and they still do form a coherent encyclopedic of mostly the core language features. This is also the largest part of the book.
There isn't any point in listing what it covers as it covers everything. Starting off from the basics of type, flow of control, expressions and so on it works it way up to generics, collections, delegates and events. It also covers the more newer topics such as Linq and dynamic typing. Chapter 14 also provides an introduction to Object Oriented Programming in more general terms - encapsulation, inheritance and polymorphism - using C# as the example language. Chapter 17 deals with a little bit of functional programming as part of using delegates and chapter 18 introduces the idea of reactive programming as part of using events. Chapters 19 and 20 explain LINQ in reasonable depth and chapters 21 and 22 deal with reflection and dynamic programming in the sense of dynamic typing.
The style is friendly but ideas are introduced in a fairly technical style without making things more complicated than they need be. There are lots of box outs that provide background information and comments on exceptions and explanations that fit into a wider context. Don't expect to see any long examples - it isn't that sort of book. What examples there are demonstrate the ideas in the shortest possible code. You also won't find very many accounts of how to use use things in clever ways - this isn't a book of hints, tips and tricks, it's about principles.
Chapters 26 to 30 used to be billed as Part III of the book on the Base Class Library - the BCL. In the new edition there are two new chapters dealing with asynchronous programming and WinRT. These are the two big additions to C# 5.0 and logically, at least the asynchronous chapter should really be earlier in the book. However other chapters on tasks and threading are at the end too so there is a certain logic at work here and now that the "Part III" label has been removed it makes more sense to have "core" language issues mixed in with BCL features.
Chapters 26 to 28 deal with the BCL, diagnostics and working with I/O/ Chapter 29 to 31 form an introduction to all things threading and asynchronous. The final chapter forms a short and hence inadequate look at WinRT but at least it serves to alert you to the existence of another way of doing things.
I can't claim to have read this book cover to cover - at over 1600 pages of actual text it is difficult to carry let alone read in its entirety.
The chapters that I have read worked well as standalone introductions to the particular topic I wanted to know about. This doesn't really work as a reference text - but you have the web for that - but it does work very well treated as short introductions to specific topics. It would be difficult to use it as a complete introduction to C# even if you already program but if you know enough C# you could use it to fill in holes in your knowledge.
As already mentioned if you prefer lots of big examples you will be disappointed as its not that sort of book. If you are looking for tricks and recipes you will again be disappointed as it is certainly not that sort of book.
My big complaint about the book is its size and the very thin paper used for each page. It just doesn't feel nice to read - but a thicker paper would have made me complain even more about its size. It isn't just the weight and bulk, you can solve this problem by buying the Kindle edition, but 1700 pages on any subject becomes difficult to navigate. Perhaps it would be better divided into two or even more volumes.
Apart from the physical problem of reading such a huge book I have nothing to say against it.
As long as you are not a complete beginner - this isn't the place to start - it's highly recommended as something to put on your bookshelf but make sure it is strong enough to support the weight first or buy the Kindle edition.