Press "Enter" to skip to content

I Started Reading 26 Books About C# and .NET. Here Are the 2 I’ll Actually Finish ASAP.

I’ve been writing code for money for 17 years, but I’ve never used C# or any other .NET language. That’s changing—I’m learning how to be a full-stack developer. There are almost too many books about the platform, so I had to choose a few to focus on. I started by reading the front matter: the title, cover, foreword, preface or introduction, and table of contents of 26 different books. This was enough to compare and choose the 2 books that I’ll read as soon as possible. I also made a list of 7 books that I’ll read once I’m familiar with ASP.NET and Blazor. 6 more books made my “someday” list—I have no specific plans, but I’d like to read them eventually. At the end of this article I’ll reveal exactly which books made the cut. But first, here are my thoughts on each book.

Books I Haven’t Mentioned

I listed 53 books that I was considering, but I guess it should have been 57. I added these four books since publishing that post.

Click to hide or show books I haven’t mentioned.

J. Richter, CLR via C#, Fourth Edition. Microsoft Press, 2012.

Richter’s wife wrote the strangest—and maybe the most delightful—foreword I’ve read so far. This book looks as important to my C# learning journey as The Well-Grounded Rubyist was to my Ruby education. It predates the rewrite to .NET Core, for which I discounted it the first time I saw it. A commenter on Reddit clarified that this book is not too old to be useful today. My biggest concern will be finding out which parts are outdated.

R. Martin and M. Martin, Agile Principles, Patterns, and Practices in C#. Prentice Hall, 2006.

This is not a book to learn C#. It is a book to teach agility, design patterns, and OOA&D to .NET developers, written before that community had embraced these things. I want to read it because I enjoy Uncle Bob’s writing, because it has lots of C# code to learn from, and because I am always looking for more perspectives on these three topics. Unfortunately this book will fall to the bottom of my to-read list because I already have familiarity with its core topics, and the .NET examples in it are probably too old to serve as a C# learning tool.

A. Boehm and J. Murach, Murach’s C#, 8th Edition. Murach Books, 2023.

The publishers have chosen not to make a preview available on Amazon or Google books, even of the front matter. The book isn’t available on the O’Reilly Learning Platform. On the publishers website I can download a sample chapter, but I can’t read the preface or introduction. I don’t see how I can evaluate the front matter of this book without purchasing it, so I will skip it.

K. Hazzard and J. Bock, Metaprogramming in .NET. Manning, 2012.

This book is old enough that Roslyn was “upcoming” and .NET Core (now .NET) had not released. I don’t know anything about how incompatible the .NET Framework is with the new runtime, but if anything would stretch the boundaries of compatibility, it’s metaprogramming. I’ll read Chapter 1 for an overview of what programmers from a statically-typed language think of metaprogramming, since my experience with metaprogramming is in Ruby.

Books I Listed Previously

Even though I listed 53 books that I was considering, there are only 22 more books in this blog post. I’m only covering the books about C# and .NET here. Any books that teach ASP.NET, Blazor, T-SQL, and the rest of the stack will be covered in next week’s blog post. Subscribe to my email list to get notified when I publish.

Click to hide or show books I listed previously.

A. Hejlsberg, M. Torgersen, S. Wiltamuth, and P. Golde, The C# Programming Language, Fourth Edition. Addison-Wesley Professional, 2010. 

Four of the five-person C# language design team wrote this book. It’s annotated by several of the authors of other books listed in this blog post. However, it only covers C# 4.0 and it’s organized topically, in a strictly hierarchical structure that probably doesn’t provide a narrative through-line. If I read this, it will probably be to deepen my understanding and add historical context after I’ve already learned the language.

J. Sharp, Microsoft Visual C# Step by Step. Microsoft Press, 2022. 

The Table of Contents indicated it will cover too many topics for new programmers. For example, it covers “The purpose of classification” and “What is inheritance?” Also, Part IV teaches the deprecated Universal Windows Platform. For those reasons, I won’t read this book. The version-by-version coverage of the language’s evolution in the introduction was useful, though.

M. J. Price, C# 13 and .NET 9 – Modern Cross-Platform Development Fundamentals, Ninth Edition. Packt Publishing, 2024.

Grammatical errors in the preface worry me. Price’s other books don’t have these errors in their front matter, so it may be an isolated problem. The author is targeting new programmers with this book. However, the book is such a broad overview that it should be valuable as an overview of the community and the stack, even if it is introductory. It can’t be anything else with this few pages per topic. Some content “included” in the book is an online link, which I find odd.

M. J. Price, Tools and Skills for .NET 8. Packt Publishing, 2024.

This teaches things other authors assume you’ll learn by simply working in the stack. It teaches debugging and refactoring using Visual Studio, observability in C# apps, how .NET developers expect documentation to be written, and how to do benchmarking and performance with the Microsoft stack. Because of its focus on these basics, there are parts that I would skip if I read this. I’m already familiar with git, unit testing, and career skills like teamwork and interviewing.

M. Jamro, C# Data Structures and Algorithms, Second Edition. Packt Publishing, 2024.

This book is more focused on teaching the basic concepts of data structures & algorithms than I would have guessed. Rather than reading the book cover-to-cover, I’ll browse its code to get exposure to idiomatic C#, and read any sections that cover content I haven’t learned from J. Wengrow, A Common-Sense Guide to Data Structures and Algorithms, Second Edition. Pragmatic Bookshelf, 2020.

M. Eland, Refactoring with C#. Packt Publishing, 2023.

I expected this to be a C# edition of Martin Fowler’s Refactoring, like Refactoring: Ruby Edition by Fields et al. was. Instead, this also includes information about automated testing, object-oriented design, static analysis, and communication—all with a C# bent. It offers a tour of editors, standards, and popular packages. This is exactly the kind of wide coverage I was hoping to find, and it has earned an easily defensible spot in my to-read list.

D. Nesteruk, Design Patterns in .NET 6: Reusable Approaches in C# and F# for Object-Oriented Software Design. Apress, 2022.

Naively implementing a design pattern from scratch in a new language is fraught. Many languages have built-in support either at a language level (like JavaScript iterators and the Iterator pattern) or a standard library level (like Ruby’s Observable and the Observer pattern). The preface makes it clear that the Gang-of-Four patterns are covered using modern built-in language and framework features, which is exactly what I was hoping for. I’m also excited to see my first bits of F# along the way.

M. Seemann, S. van Deursen, Dependency Injection Principles, Practices, and Patterns. Manning, 2019.

I’m familiar with the principles of dependency injection Sandi Metz talks about. I manually wire up dependencies all the time in my own code. I’m also familiar with using the auto-wired DI container in Angular, though I couldn’t begin to explain how it works. This book explains the core concepts I’ve been missing, and it does it with a C# slant. I’ll at least read Part I ASAP to learn more of the theory and principle behind DI, but I can’t imagine stopping there forever.

R. Osherove, The Art of Unit Testing: With Examples in C#, Second Edition. Manning, 2013. 

I’m familiar with unit testing in JavaScript (QUnit, Jasmine, Storybook) and Ruby (Minitest, RSpec). I know nothing about .NET testing, which is why I chose this older C# edition of the book. I don’t need to learn the culture of unit tests, mocks, stubs, spies, and assertions. I need to learn the libraries and style common in this ecosystem. As a bonus, the language-agnostic parts have great depth that I should learn from.

Editor’s Note: A commenter on Reddit mentioned that the ecosystem has shifted fundamentally in the 12 years since this book’s publication. I have removed it from the list at the end of this article.

V. Khorikov, Unit Testing Principles, Practices, and Patterns. Manning, 2020.

This book definitely belongs on my to-read list, even if it isn’t soon. I’ve often had questions about how tests interact with databases outside of the easy defaults Rails gives you. It also covers topics I’m unfamiliar with such as the two schools, three styles, and four pillars of unit testing.

M. Michaelis, Essential C# 12.0. Addison-Wesley, 2023.

I’m the exact target audience for this book. It focused on the language and the Base Class Library rather than letting distractions like ASP.NET detract. I really like that it’s organized to follow the history of programming (imperative, structured, object-oriented), which is how I like to teach apprentices.

J. Albahari, C# 12 in a Nutshell. O’Reilly Media, 2023.

The preface promises the book is “free of clutter and long introductions.” It’s so short that I believe it. The table of contents makes it look fragmented but well-organized, a reference whose order was well thought-out. Rather than start with this book, I may use its next edition as an end cap, reviewing and closing any knowledge gaps in C# 12 and learning what’s new in C# 13 and 14.

I. Griffiths, Programming C# 12. O’Reilly Media, 2024.

This is yet another book that targets itself squarely at developers like me: folks with experience in other languages coming to C#. It seems to cover more ground than Michaelis in fewer pages. This is probably because it doesn’t spend time explaining objected-oriented programming, just how to write object-oriented code in C#. It also has an entire chapter on Rx .NET—after working with Angular for 3 years I have… opinions about RxJS. I feel an obligation to learn Rx .NET as an option for building live dashboards with SignalR.

J. Rodenburg, Code like a Pro in C#. Manning, 2021. 

This book promises the reader they’ll “learn by refactoring an out-of-date legacy codebase.” It is a unique approach, and I applaud the author for taking a risk. It’s probably very instructive, and some folks might prefer it. But this approach is not for me. If I wanted to learn that way, I could open up the average line-of-business .NET application and get going.

I also peeked at sections 1.4 and 1.5, just to be sure. It teaches the parts of C# I’d be missing while skipping the basics that transfer from OO languages. If the pedagogical approach matched my style, this would be great. I might read Chapter 1, but I’ll skip the rest.

S. Love, The C# Type System. No Starch Press, 2023.

When it comes to reference types vs. value types, my frame of reference (ha!) is limited by my experience with JavaScript and Ruby. In both of those languages, built-in types like Number/Integer are immutable. Binding another variable to a variable pointing to a JavaScript Number or Ruby Integer, and then changing the first, doesn’t change the second. However, I get the sense that the difference between that and value types is much more than just extra memory allocation. Plus, it seems powerful to be able to define your own value types. A dedicated book on this topic is extremely attractive to me, so I’ll definitely read this as part of my C# learning journey.

J. Skeet, C# in Depth, Fourth Edition. Manning, 2019.

Written by the man, the myth, the legend. This book reliably shows up in recommendations lists, and I can see why from its front matter. Its structure follows the version history of C#. Its depth is targeted at folks who already know the language. So, when I’m already productive with C# and I’m looking for more context this might be a great follow up to The C# Programming Language. Maybe by then a fifth edition will come out?

E. Ingebrigtsen, Metaprogramming in C#. Packt Publishing, 2023.

This is a much newer book on metaprogramming than Hazzard’s. It also touches on aspect-oriented programming, which I’m not familiar with. However, the preface had grammatical errors. An attention to detail seems extremely important when covering a topic like metaprogramming.

B. Wagner, Effective C#: 50 Specific Ways to Improve Your C#, Third Edition. Addison-Wesley Professional, 2016.

Half of the table of contents is unintelligible to me, which means I really need to read this book (and its sequel). Its cousin, Effective Ruby, is already on my to-read list (though it’s out of print). This could be good to read slowly, one tip a day. It could also be something to devour all at once to git gud fast.

B. Wagner, More Effective C#: 50 Specific Ways to Improve Your C#, Second Edition. Addison-Wesley Professional, 2017.

This is a sequel to the book above, and I have the same opinions about it.

K. Cwalina, J. Barton, and B. Abrams, Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, Third Edition. Addison-Wesley Professional, 2020.

This is a programming style guide for all the things linters cannot catch (and an appendix with what they can). I enjoyed reading On Writing Well, Several Short Sentences About Writing, and Dreyer’s English. The Sense of Style and Because Internet sit on my to-read shelf. While this book doesn’t seem necessary to become productive in C# and .NET, there’s no way I’ll pass up reading it.

T. Williams, Effective .NET Memory Management. Packt Publishing, 2024.

The preface had multiple grammatical errors. Its writing style was such that, even though I cannot point at any specific problems, I lost focus every few sentences. I want to learn this information, but not from this book.

K. Kokosa, K. Gosse, and C. Nasarre, Pro .NET Memory Management: For Better Code, Performance, and Scalability, Second Edition. Apress, 2024.

The second edition is so new that the book’s website still says it “is coming” and the O’Reilly Learning Platform doesn’t have it yet. I was able to read the front matter on Google Books, though. The introduction had grammatical errors and unidiomatic word choice, but it held my attention far better than Effective .NET Memory Management. If I ever need to know more about memory management than I learn alongside C# and .NET, I’ll probably choose this book.

The Winners Are…

To Gain Familiarity with C# and .NET

  1. I. Griffiths, Programming C# 12. O’Reilly Media, 2024.
  2. S. Love, The C# Type System. No Starch Press, 2023.

This is a short list because my goal this quarter is to learn enough to make useful pull requests at work. These books should give me everything I need to know about C# and .NET to do this. After reading these two, I’ll switch over to reading the first round of ASP.NET and Blazor books. After those, I’ll read the next list to build proficiency with C# and .NET.

To Build Proficiency with C# and .NET

  1. B. Wagner, Effective C#: 50 Specific Ways to Improve Your C#, Third Edition. Addison-Wesley Professional, 2016.
  2. B. Wagner, More Effective C#: 50 Specific Ways to Improve Your C#, Second Edition. Addison-Wesley Professional, 2017.
  3. V. Khorikov, Unit Testing Principles, Practices, and Patterns. Manning, 2020.
  4. M. Eland, Refactoring with C#. Packt Publishing, 2023.
  5. D. Nesteruk, Design Patterns in .NET 6: Reusable Approaches in C# and F# for Object-Oriented Software Design. Apress, 2022.
  6. M. Seemann, S. van Deursen, Dependency Injection Principles, Practices, and Patterns. Manning, 2019.
  7. J. Richter, CLR via C#, Fourth Edition. Microsoft Press, 2012.

Once I’m productive helping with the front end of Blazor apps at work, I’ll swing back around to C# and .NET. These seven books should deepen my knowledge and make me fully proficient with the language and its ecosystem. These books, combined with the corollary list from next week’s blog post, should teach me what I need to be productive across the full stack.

To Build Expertise with C# and .NET

  1. R. Martin and M. Martin, Agile Principles, Patterns, and Practices in C#. Prentice Hall, 2006.
  2. E. Ingebrigtsen, Metaprogramming in C#. Packt Publishing, 2023.
  3. K. Cwalina, J. Barton, and B. Abrams, Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, Third Edition. Addison-Wesley Professional, 2020.
  4. A. Hejlsberg, M. Torgersen, S. Wiltamuth, and P. Golde, The C# Programming Language, Fourth Edition. Addison-Wesley Professional, 2010.
  5. J. Skeet, C# in Depth, Fourth Edition. Manning, 2019.
  6. K. Kokosa, K. Gosse, and C. Nasarre, Pro .NET Memory Management: For Better Code, Performance, and Scalability, Second Edition. Apress, 2024.

None of these books are necessary, but each of them are worth reading for reasons I detailed above. I’ll work through these six at a leisurely pace once I’m productive across the full stack at work.

Did I Miss Anything?

I’m completely new to the .NET ecosystem. If I missed any books you’d recommend, or if you disagree with my assessment, please leave a comment. I would love to learn that I’m wrong before I dedicate the time to reading the wrong book.. I’m going to start reading the first book this week. Only a few days remain to convince me to read something other than Programming C# 12, but ample time remains to suggest other books further down the list.

What About ASP.NET, Blazor, and the Other Topics?

If you’ve done the math, you’ll realize I listed 28 other books that I didn’t discuss here. My next blog post will cover the rest of those books. I’ll choose the ones to read immediately after my two-book C# “familiarity” list. I’ll choose the ones to read later, after my seven-book C# “proficiency” list. And more than likely, some amount of books will end up on another “expertise” list, to be read at my leisure in the indefinite future. Subscribe to my email list to find out which ones make the cut.

One Comment

  1. AI Music Generator AI Music Generator

    Great breakdown of how you’re approaching learning C# and .NET. I think it’s important to be strategic about which books to dive into, and you’re definitely taking a thoughtful approach. Curious, though—how are you balancing reading with hands-on coding?

Leave a Reply

Your email address will not be published. Required fields are marked *