There are so many great software books to read, but so little time to read them. Even though it’s a big-time commitment, there’s major power in reading books. Books go to depths that can’t be matched in other sources like video tutorials and blog posts. Books can pierce all the way down to the root of a subject. Because of the depth of knowledge that can be gained through reading, I have a long list of books I want to read or re-read at all times. In this post, I’m going to present a sampling of ten books about software development books I’d like to complete in 2018. Note that the list could change throughout the year, but I know that I’ll finish at least a few of the books.

As I mentioned in a recent weekly update post, I’m focusing on only reading software development books for a while. I had noticed that I had been reading mostly non-technical books and recognized it was time to change that. So, I prepared a list of books that I wanted to read as part of an IdeaList. With my movement to reading only technical books for a while, it was time to take a formal look at what I want to read and get a plan together. This reading list is the result of that look.

Reading List

  1. Working Effectively with Legacy Code - I’m currently reading this book right now. It’s great so far. I’m 3/4 of the way through and I’ve discovered many new tools for working with legacy systems. Let’s face it, legacy code is a necessary evil. Regardless of the projects you’re working on, you must support code and that’s really what this book is about. The practices written about in Working Effectively with Legacy Code can help developers working on any codebase, not just those written long ago.
  2. Refactoring - I’ve read parts of Refactoring before. I would like to dig deep into this tome and take what I can from it. I feel like Refactoring would pair quite nicely with Working Effectively with Legacy Code.
  3. Domain Driven Design - I tried to read Domain Driven Design last summer and couldn’t get into it. I didn’t read more than the first chapter, so I didn’t give it a fair shake. This time I’ll get further into it. I’m familiar with a lot of the concepts from Domain Driven Design but would benefit from going directly to the original source to gain a deeper understanding.
  4. Dependency Injection in .NET - This is another book I’m familiar with. I think that I read the whole book back in 2013. I probably wasn’t ready to get the book’s full effect at the time, but I am now so it’s time to revisit it. I’m debating whether to read this or Refactoring after finishing Working Effectively with Legacy Code.
  5. Patterns of Enterprise Application Architecture - This is a book that was recommended by dhh, so I have to read it. It’s a book that’s mostly about patterns. I know very little about this book but I’m sure that it will take my system architecture design skills up a notch, this will pay dividends for years to come.
  6. CLR via C# - This is a deep cut into how the Common Language Runtime works. If I want to be great with .NET, I might as well go through the classics. I’ve read pieces of this already and it’s time for a refresher. Roslyn, the latest C# compiler, has been released since the book was released so it’s possible that some of the gritty details no longer apply.
  7. C# in Depth - There’s a new edition of C# in Depth coming out later this year. I can’t wait to get my hands on it and work through it. I used the second edition of the book a ton to learn C# back in 2012, it’s time to revisit a new version of the book.
  8. Python Machine Learning - I bought this book during Packt’s $5.00 sale over the holidays. I want to get into it and pick up some deep Machine Learning skills. This book is the one I’m most likely to prune from the list.
  9. Introduction to Algorithms - It’s always a good time to review algorithms. I never actually spent too much time with this specific text but it’s definitely one of the heaviest treatments of algorithms available. This book would likely take at least a year to read thoroughly.
  10. Structure and Interpretation of Computer Programs - Someday I will finish SICP. Hopefully this year. The book’s reputation is legendary. I’ve worked through the first two chapters once before and really enjoyed it, but somehow, I veered off course.

So that’s my reading list for now. I’ll be finishing Working Effectively with Legacy Code this week. After that, I’ll be starting either Refactoring or Dependency Injection in .NET. Each of these books, apart from Python Machine Learning, is held up as THE book in its specific subject. I’m hoping that these books form new ideas and lead to me writing better, more maintainable code. Reading technical books may not seem like the most appealing activity, but the knowledge gained now can alleviate a ton of pain in the future.