Helpful Software Books

I’ve been a professional Software Engineer for many years now and I still love it! Here are some books I’ve read along the way that were insightful and are reread periodically since they stand the test of time and are occasionally updated with newer editions.

Refactoring

By Martin Fowler

Refactoring is the process of changing the internal structure of your code so it’s more maintainable without changing its behavior. Martin shows how to systematically do this with various examples. It was also helpful to label the different refactorings so one can succinctly describe what to do to others. The second edition recently came out and its on my reading list.

Patterns of Enterprise Architecture

By Martin Fowler

This book really enhanced my general solutioning knowledge across technology platforms. I remember reading it and then thinking oh yea Active Object pattern is being used here. Martin Fowler is such a gifted writer and orator. I love watching him on YouTube. For example, The Many Meanings of Event-Driven Architecture

Clean Code

By Robert C. Martin.

Robert C. Martin aka “Uncle Bob” is another legend in the industry. He’s very opinionated but entertaining. I’ve read all his “Clean *” books and Clean Code and Clean Architecture are my favorites. Clean Code describes how one should aspire to write code so it’s flexible and maintainable. This is where the term “S.O.L.I.D” originated. He recently started doing more YouTube videos and those are very fun to watch. For example, he has a Clean Code series.

Clean Architecture

By Robert C. Martin.

This came out in the last few years and was a nice read. Uncle Bob describes a common architecture that can be used and it’s interesting.

The Pragmatic Programmer

This book provides lots of practical programming advice learned in the trenches. It talks about the “Rubber Duck Debugging” and “Broken Windows”. The broken window story talks about how one broken window in the neighborhood led to the gradual deterioration of it since if one person doesn’t care, then why should I. Don’t let little things that are easily fixed continue to be broken!

Code Complete

Code Complete, Second Edition by Steve McConnell goes in-depth about how to code and the different considerations that go into it. I love the evidence-based data that backs up the claims too using various surveys and other large studies. This book was great when I first got started. I’d love if a newer edition came out!

Design Patterns

This is also known as the “Gang of Four” book. This book was written in the 90s but is still relevant today! Design Patterns are recurring common solutions to recurring common software problems. The solutions are given different names and categorized for easy reference. Personally, I thought it was a good read but the content was a bit boring.

Head First Design Patterns

This book has much the same content as Design Patterns but is a lot more engaging and memorable. If you want to learn more about Design Patterns, read this one first.

Peopleware: Productive Projects & Teams

Peopleware talks about how software is engineered and how different factors, especially people, affect that.

Coders at Work: Reflections on the Craft of Programming

Peter Seibel interviews many of the most influential software figures and gets their opinions on differing topics. I love getting differing opinions on topics and this does just that!

Extreme Programming Explained: Embrace Change

Admittedly, I’ve never done Extreme Programming and don’t know anyone that has but it is an interesting concept. If you’ve done it, what were your experiences like? Let me know in a comment.

Test Driven Development

Kent Beck was the one who popularized Test-Driven Development (TDD). His book goes into detail why and how it’s done. Personally, I write some code, write some tests, and iterate like that until the desired behavior is complete.

Advanced Apex

Dan Appleman provides absolute gold on how to write Apex in Salesforce using lots of Advanced concepts. It’s on the fifth edition and is regularly updated. This is a must read for every Salesforce Developer!

Force.com Enterprise Architecture

Andrew Fawcett is another Salesforce pioneer and thought leader. He took many of the ideas in Patterns of Enterprise Architecture and applied it to the Salesforce platform. Many of these ideas can be seen in the Financial Force Common Library.

Dependency Injection in .Net

This books really shows how one can do Dependency Injection in all the different forms, constructor, methods, and properties, with lots of great examples and anti-patterns! It’s great for learning the basics and when to apply it. Skip the specific frameworks mentioned since they are probably outdated.

Working Effectively with Legacy Code

When one enters a new code base, one often thinks this is crap and should be entirely rewritten. Michael Feathers describes how to work with “Legacy” code and make it good. One strategy is to write test code so one knows if the code is behaving as expected and then refactor it as needed while ensuring everything still works.

The Art of Computer Programming

The Art of Programming is a series of books written by Donald Knuth, who many regard as the father of Computer Science! These books are great reference books describing the different algorithms used all the time. For example, he talks about the various searching and sorting algorithms, their history, and how to implement them. I’ve read some excerpts here and there but not entire books. These books are not for the faint of heart since some of the content is very technical.

I’ve read many other Software Books but these are the ones that come to mind now. If you have any books on Artificial Intelligence, Machine Learning, Augmented Reality or Virtual Reality or another Software book, please share in a comment!