Skip to main content

Command Palette

Search for a command to run...

Books

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)

  • The Mythical Man-Month. Frederick P. Phillips Brooks, Jr. (1975)

  • Understanding Distributed Systems. Roberto Vitillo (2021)

  • Peopleware: Productive Projects and Teams (3rd edition). Tom DeMarco, Timothy Lister (2013)

  • Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems. Martin Kleppmann (2017)

  • Refactoring: Improving the Design of Existing Code (2nd edition). Martin Fowler (2019)

  • Growing Object-Oriented Software Guided by Tests. Steve Freeman, Nat Pryce (2010)

  • Extreme Programming Explained: Embrace Change (2nd edition). Kent Beck (2004)

  • Continuous Delivery: Reliable Software Releases Through Build, Test, and Deployment Automation. Jez Humble, David Farley (2010)