For the first couple of years – and the first year of my career as a professional developer – I coded almost exclusively in Delphi with a little Python on the side. And while I still love Delphi, it has not evolved as quickly as other languages in recent years and one has to wonder where Delphi is headed. The most pressing issue is probably the lack of a 64-Bit compiler which has been on the roadmap for years, but has yet to be released in a final form.
So it was decided to gradually move to C# for new projects. I already got Visual Studio 2010 Premium installed an am now in the process of getting my first project off the ground. I had been following the development of C# back when I was in college, but the language and the .NET platform in general have made a giant leap forward since my first encounter with C#. There is just so much stuff to learn, it’s a daunting task, but also really exciting.
While I am proud to have an paperless office (save for some scratch-paper), I find books to be indispensable for my C# education. Pictured above are a couple I personally own. Note that some titles in the picture are still about C# 3.0, while 4.0 is the current version:
- Concurrent Programming in Windows: A lot of my projects are multithreaded to put the dozens of processor cores modern servers have to better use. This book is extremely dense, but it contains everything one needs to know about multithreaded programming on Windows.
- Essential C# 4.0: This book gives a really good overview of the C# programming language, especially if you already know another language, this book should be the only one you need read to get up to speed in general C# programming.
- The C# Programming Language: I bought this book figuring that what better C# book could there be than one written by Anders Hejlsberg, the language’s chief designer. However, this book should really be called “The C# Language Specification” because it is just that; a very technical specification of the various features of the language. It’s great as a reference book, though, if you just need to quickly look up a certain language feature.
- Framework Design Guidelines: This book contains some great insights into properly designing APIs that are intuitive to use and fit in with the rest of the .NET framework. This book should come in handy for designing internally used libraries. Many guidelines and recommendations presented in the book are not necessarily .NET specific, but could be applied to other object-oriented programming languages as well.
- Advanced Windows Debugging: The Debugging Tools for Windows are an extremely powerful set of tools for investigating bugs in one’s Windows applications. Until I got the book, I have been hesitant to use them though, because for all their power, these tools have a very steep learning curve. This book is like the missing manual, introducing the most important commands one has to familiar with to get the most out of the debugging tools. this book isn’t .NET specific, though, but may be even more important for native Win32 developers.
- Windows Internals: This book contains all there is to know about the internal workings of Microsoft Windows. It’s the perfect companion book to Advanced Windows Debugging, because a lot of the details disclosed by the debugger only make sense when one knows how Windows works internally. This book should also be required reading for any Windows system administrator.
While this is already a lot of reading material, I still have a couple of more books on my wish list that I think I should have read before getting serious with C#:
- Windows Presentation Foundation 4 Unleashed: This book will hopefully show me how to give my applications gorgeous and functional user interfaces using Windows Presentation Foundation, the graphical subsystem of Windows.
- Essential LINQ: LINQ or Language Integrated Query looks like a very convenient way to perform SQL-like query operations against object-lists, datasets or XML documents in .NET. This is something that is usually a lot of work to do manually, so I’m eager to learn how I could use LINQ to streamline my code.
- Essential Windows Communication Foundation: WCF is another one of the major building blocks introduced in .NET 3.0 that should make developing service-oriented architectures (SOA) easier. While this is not something I am currently doing, may be there are scenarios where SOA would be useful.
- Windows Workflow Foundation: WWF along WCF and WPF is the third “foundation” technology in .NET. I think a lot data-driven user applications have an implicit workflow where data is worked on through different activities. I’m curious to see how WWF could be used to keep developers from having to reinvent the wheel every time.