In my humble opinion, and based only on my observation, reading technical books is not among the highest priorities for most software developers.

This is a shame because books are an invaluable source of wisdom.

I love reading, especially technical books that help me get strong Software Engineering foundations. I believe that learning the fundamentals of Software Engineering is a great investment. First, it allows you to build quality software; that is, software that is well-crafted internally and also meets the needs of the user. Second, having a strong foundation allows you to learn new languages and frameworks faster; therefore, it is a great way to deal with the fast pace of technological evolution.

This is the list of books that I have read from cover to cover:

  • The Algorithm Design Manual. Steven Skiena (2008)

  • Head First Design Patterns. Eric Freeman, Elisabeth Robson, Kathy Sierra, Bert Bates (2014)

  • Clean Code: A Handbook of Agile Software Craftsmanship. Robert C. Martin (2008)

  • Test-Driven Development by Example. Kent Beck (2002)

  • Agile Software Development: Principles, Patterns, and Practices. Robert C. Martin (2002)

  • Design Patterns: Elements of Reusable Object-Oriented Software. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (1994)

  • Clean Architecture: A Craftsman's Guide to Software Structure and Design. Robert C. Martin (2017)

  • The Clean Coder: A Code of Conduct for Professional Programmers. Robert C. Martin (2011)

  • Patterns of Enterprise Application Architecture. Martin Fowler (2002)

  • XUnit Test Patterns: Refactoring Test Code. Gerard Meszaros (2007)

  • Code Complete. Steve McConnell (2004)

  • Accelerate: The Science of Lean Software and DevOps. Nicole Forsgren, Jez Humble, Gene Kim (2018)

  • The Software Craftsman: Professionalism, Pragmatism, Pride. Sandro Mancuso (2014)

  • The Annotated Turing. Charles Petzold (2008)

  • Introduction to Algorithms. Thomas Cormen, Charles Leiserson, Ronald Rivest, Clifford Stein (2009)

  • Domain-Driven Design: Tackling Complexity in the Heart of Software. Eric Evans (2003)

  • Agile Estimating and Planning. Mike Cohn (2005)

  • Working Effectively with Legacy Code. Michael C. Feathers (2004)