There are many courses and books on the market that will teach you C#. When you finish one, the world of .NET is now open to you. However, merely knowing the syntax of the programming language isn’t the entire story. In order to be a good developer we need to learn conventions, best practices, and when to apply the techniques we’ve learned – and when not to! Fortunately, if you’re willing to invest the time, getting over that wall and taking your skills to the next level is within reach. While everyone is different, here’s a list of resources (books) that have helped me improve my skills as a developer.
Applying UML and Patterns (Craig Larman) – While not a .NET book, this book picks up where most C# courses and books leave off. You know the syntax but not the techniques of proper object design. The code samples are in Java, but if you know C# it’s a pretty straight forward translation. Besides, it’s the skills we’re interested in rather than the syntax itself. What I love about this book is how down to earth it is, and that Craig walks you through every step of his small case study, explaining every decision that he makes.
Refactoring: Improving the Design of Existing Code (Martin Fowler, Kent Beck et al.) – The first couple of chapters are a must read for every developer. In those chapters, the book introduces one of my favorite terms in determining the quality of code – smells. There are certain, well, smells that bad code gives off – little things that indicate there’s probably a better way to do things. The rest of the book is a great reference on how to convert that bad smelling code into code that’s more readable and elegant.
Code Complete (Steve McConnell) – While this book may seem very basic at times, it covers basically every item that needs to be covered in every team’s coding standards documents. In fact, it wouldn’t be a bad idea at all to make this book the team’s coding standards.
CLR via C# (Jeffrey Richter) – Want to know what goes on behind the scenes in the CLR? Trying to figure out what’s emitted when you create an anonymous type? Looking for the best way to take advantage of certain .NET features? This is the book for you. This book belongs on the shelf of every .NET developer.
Framework Design Guidelines (Krzysztof Cwalina, Brad Abrams) – The tile of this book is a bit deceptive in my opinion. While this book certainly does spend talking about how best to build libraries, it gives great coverage to best practices in .NET. It’s a very approachable book, categorizing best practices as Do, Consider, Avoid and Don’t.
The Art of Unit Testing (Roy Osherove) – I’m a huge proponent of test driven development (TDD). When done correctly, TDD saves time in the long run, makes for more elegant code, and allows for quick assessment of the state of an application and bugs. However, putting together good tests is a skill just like any other that needs to be learned. This will help get you moving in the right direction.
Keep in mind that all of the above have simply worked for me, and that your mileage may vary. With that in mind, these books come with an absolutely no money back guarantee. However, I do think you’ll find that these will help get you started on your journey and take you to the next level. And even if you’re at that next level, it never hurts to go back to the fundamentals.
Like the list? Don’t like the list? Books you think shouldn’t be on there? Books you think should be added? Let me know!