Book Review: Effective C#

It’s a fact that there are just too many crappy technical resources out there. It’s also a fact that there are probably too many good ones to read in any one lifetime (I’ve still only made it through book one of Euclid’s Elements— and, embarrassingly, I’ve never even started my copy of Principia Mathematica). Anyway, I thought I’d start chronicling some of the articles and books I’ve read lately, partially for my own reference and reflection, but mostly for your edification, my faithful reader.

Effective C#: 50 Specific Ways to Improve Your C#

By: Bill Wagner Link: Amazon

Score: 10/10

I had a crippling internal debate when deciding whether or not this book should be the first I review. Actually, let me first give you a quick synopsis of ninety percent of all books on programming languages:

1. Explain reason there needed to be another book on [language/platform/library].

2. Use a bad metaphor to explain what a [variable/data type/array/etc] is.

3a. If the language is classical, explain how to write a Car class, with associated Wheel, Engine, and Trim classes.

3b. If the language is not classical, explain how to write something that emulates a Car class, with associated Wheel, Engine, and Trim abstractions.

It’s sad but it’s true. And there are a bunch of chapters you skip in the middle that show you how to start a new project in some IDE you’re not using.

Back to the internal debate I was having.

You see, this book has none of these qualities. Not once does it give you a horribly misguided definition of object oriented programming (if you haven’t read this definition from Alan Kay, you haven’t lived). In fact, I can safely say that this book is not like any other technical book I have ever read. It is, quite possibly, wholly perfect.

When I finished chapter two I looked up and realized I was curled up on the floor, completely naked, in a pool of my own tears (much like after watching the last episode of Battlestar Galactica). Used tissues were scattered about like bits of wrapping paper on a lazy Christmas afternoon.

And I had 24/25ths of the book remaining.

My theory requires a bit more research, but I can tell you with well over 99% certainty, that Bill Wagner is one of the mighty men from of old–practically a god himself, spawned by whatever deep magic makes computers spend their days humming along, processing and transisting and whatever else they do.

Each chapter is enthralling. Seriously. I’m getting chills just thinking about it. I’ve read several of the chapters two or three times.

Wagner makes his points in profoundly wise ways. He uses well chosen verbiage when he discusses his topics, making sure to point out obvious strategies, preferred strategies, and when even the preferred strategies go awry.

He explains how the compiler makes its decisions, and lets you know exactly how much smarter the C# compiler engineers are than you. He dives deep into how the CLR thinks, lives and breathes. He walks step by step through CLR operation and gives you a good understanding of why things are the way they are, and why the decision was made that it should work that way.

So, when I say internal debate– I mean, I didn’t want this to be the first book I’d ever reviewed simply because it’s all going to be downhill from here.

I’m telling you, if you want to step up your C# game, go buy this book. Expense it to your company. Read it through, then read it again.