I read Learning C# in the spring of 2012 and it effectively introduced me to the language of C#. Programming C# 5.0 is a more technical introduction to the language, showcasing not only deeper technical explanations of language features but also some explanation of preferred approaches to using these features.
The acceleration through the topics felt good, with the first ten chapters reviewing what I would consider essential features of C# (my favourites being the chapters on LINQ and delegates) and the next nine chapters reviewing more advanced features such as asynchronous features and reflection. The remaining two chapters, ASP.NET and interoperability, felt awkward but essential.
What I appreciate most about this book is the perspective it gives you for C# and as part of the .NET Framework. Whereas the tools I use when writing an application in C# make recommendations or show connections to relevant options, this book describe the technical underpinnings of the code. It helped in understanding where to use the features instead of how. Some of the topics weren’t applicable to the kinds of applications I’m writing now, such as the chapters on Reactive Extensions or multithreading, but I can easily go back to read about these features or to reintroduce myself to more complex areas. The book also does a really decent job of cross-referencing material, directing the reader to different sections of chapters that are also relevant.
I would recommend this book to programmers who have become familiar with C# but want to grow, for experienced programmers who want more than an introduction to the language or for those who are familiar with C# but want to understand more about how the language is implemented in the .NET Framework.
Programming C# 5.0 is available on the O’Reilly site at http://shop.oreilly.com/product/0636920024064.do.