Pros: Good Reference for C#
Cons: Content on the CLR and .NET “kinda meh” (technical reviewer term)
Rating: 4 out of 5
As always, reviewing an O’Reilly book is a bit of a challenge. The English language offers me a wide assorted of weaponry, both blunt and bladed, for lodging my complaints. There are, however, only so many ways to say: “It was yet another solid technical book from O’Reilly.” And none of those ways are likely to make you laugh until the tears blur your vision. This is, of course, why I buy O’Reilly books.
“Programming C#,” is good. Not outstanding in a way that will reshape your DNA as you read, but good. Fortunately, the best part of the book is the reference material on the C# language syntax and semantics. The book included numerous tips comparing and contrasting other languages with which a reader might be familiar, such as C++, Java, and Visual Basic. This is a great feature in a reference book on a language.
C# itself is an incremental step in the C, C++, Java family of languages. On the whole, it’s less restrictive than Java though more so than C++. For example, C# includes reference parameters, operator overloading, and a choice of whether or not methods are virtual. Java lacks these capabilities. However, unlike C++, C# is a garbage collected language (unless you go out of your way to deliberately manage your own memory). Some of C#’s features, such as properties, delegates, and event handlers, strike me as much ado about nothing, but I suppose I should wait to pass judgment until I’ve really had a chance to use them.
I’m not sure what to think about the tool coverage in the book. I prefer to see programming languages treated independently of their tool chain. I don’t want a vi and gcc tutorial when I’m learning C, not an emacs tutorial when I’m learning Scheme — just give me what I came for so I can leave. However, Microsoft’s languages tend to be wedded to their development tools, so I can see why some introduction to Visual Studio was included.
Parts II and III of the book, on “Programming with C#” and “The CLR and the .NET Framework,” went downhill. Chapter 13, supposedly on building Windows Applications, couldn’t seem to keep a coherent topic. Was it a tutorial on Visual Studio? A narrow slice of the GUI library? About XML? Several of the later chapters began with analogies that were just too strained, or even confusing, to be helpful. For example, I found I had to use my pre-existing knowledge of remote procedure call systems to make sense of the Star Trek analogy in the Marshaling and Remoting chapter — I’m pretty sure it was supposed to be the other way around.
Beyond picking nits with the writing, though, the right content was there. The book addresses web services, library versioning, reflection, remote procedures, threads and concurrency, stream I/O, serialization, and COM in about 150 pages. I wouldn’t use this book as a primary source for learning the ins and outs of these topics, but they serve well enough to introduce an experienced developer to how these things are done in C#.
All in all, “Programming C#” is a solid book and served my purpose for learning C#.