Skip to main content
2025-04-0215 min read
Personal

A Curated List of Recommended Books & Resources

The Books I Actually Finished (And Some I Pretend I Did)

The journey of a software engineer is one of perpetual learning and discovery. The technological landscape shifts like desert sands, constantly presenting new tools, evolving paradigms, and unforeseen challenges. Yet, amidst this exciting flux, certain foundational concepts, timeless wisdom, and pivotal insights remain as guiding stars. This curated list is a humble offering – a collection of books, articles, blogs, and other resources that have not only been instrumental in shaping my own understanding but have also resonated deeply within our vibrant engineering community. Whether you're taking your first steps into this dynamic field or are a seasoned architect navigating complex systems, my hope is that you'll find something within these pages to spark curiosity, deepen your knowledge, or perhaps challenge your perspectives in a new and enriching way.
Within each category, resources are ordered by type and prefixed with an icon to denote their type:

Icon Legend:

  • Book
  • GitHub Repository
  • Article/Blog/Paper/Talk
  • Video/Lecture

Note: Icons are placeholders. You can customize their appearance and colors via CSS.

Core Software Development & Craftsmanship

  • "The Pragmatic Programmer" by Andy Hunt and Dave Thomas: This series is packed with practical advice and insights, urging developers to keep learning and adapting.
  • "Clean Code: A Handbook of Agile Software Craftsmanship" by Robert C. Martin: An essential guide for writing readable, maintainable, and robust code. It emphasizes principles and practices that lead to higher quality software.
  • "Refactoring: Improving the Design of Existing Code" by Martin Fowler: This book provides a comprehensive catalog of refactoring techniques to improve the internal structure of existing software without changing its external behavior, leading to more understandable and less complex code.
  • "Design Patterns: Elements of Reusable Object-Oriented Software" by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides (Gang of Four): This seminal work introduces 23 fundamental design patterns that provide solutions to common software design problems, fostering more flexible and reusable designs.
  • "The Joel Test: 12 Steps to Better Code" by Joel Spolsky: This straightforward checklist is a go-to for evaluating software development practices, touching on essentials like source control and bug tracking. It's a must for teams looking to refine their processes, although a little basic for 2024.
  • "Things You Should Never Do, Part I" by Joel Spolsky: A cautionary tale against rewriting code from scratch, it advocates for making iterative improvements and recognizing the value in existing codebases.
  • "The Law of Leaky Abstractions" by Joel Spolsky: This concept highlights the importance of understanding multiple system layers, as abstractions can often fail us.
  • "Coding Horror" Blog by Jeff Atwood: Known for blending technical insights with humor, this blog has sparked many important discussions on best practices and common pitfalls.

System Design, Architecture & Distributed Systems

  • "System Design Primer" by Donne Martin (github.com): An extensive open-source guide on GitHub that covers the fundamentals of designing large-scale systems. It's a go-to resource for engineers preparing for system design interviews and looking to build a solid understanding of system architecture, scalability, and common design patterns. It also includes helpful Anki flashcards for study.
  • "The Log: What every software engineer should know about real-time data's unifying abstraction" by Jay Kreps (engineering.linkedin.com): A seminal article that explains the fundamental role of the log (an append-only, totally-ordered sequence of records) in modern data systems. Kreps details how logs are crucial for data integration, real-time stream processing, and building robust distributed systems, serving as a central nervous system for data flow and state replication.
  • "Turning the Database Inside-Out with Apache Samza" by Martin Kleppmann (confluent.io): This influential article and talk proposes a paradigm shift in data architecture. It advocates for unbundling databases by treating an append-only log of immutable events (like Apache Kafka) as the source of truth, and deriving various read-optimized materialized views using stream processing (like Apache Samza). This approach offers insights into building more scalable, robust, and flexible systems by moving away from traditional mutable databases towards an event-driven architecture, highlighting the power of up-to-date materialized views over complex denormalization strategies.
  • "The Zen of Erlang" by Fred Hebert (ferd.ca): This article (a transcript of a presentation) explores Erlang's "Let it crash" philosophy. It explains how this approach to fault tolerance, by allowing individual processes to fail and be restarted by supervisors, leads to more resilient systems. Hebert uses analogies like rocket science (controlled explosions) and controlled forest burns to illustrate how transforming failures into manageable events is key to Erlang's robustness.
  • "Why You Should Never Use MongoDB" by Sarah Mei (sarahmei.com): A compelling critique of using MongoDB for applications with inherently relational data. Through the lens of the Diaspora project, Mei explains why document databases can be a poor fit when the links and relationships between data are critical. The article serves as an excellent primer on the value of relational databases, the importance of schemas, and the pitfalls of choosing a trendy technology without deeply understanding its trade-offs versus established, well-understood solutions.
  • "Spanner: Google's Globally-Distributed Database" by Corbett et al. (research.google.com): This paper introduces Spanner, a scalable, multi-version, globally-distributed, and synchronously-replicated database. It was the first system to distribute data at global scale and support externally-consistent distributed transactions. The paper details Spanner's architecture, its novel TrueTime API for managing clock uncertainty, and its impact on supporting features like non-blocking reads and atomic schema changes.
  • "Paxos Lecture (Raft User Study)" by Diego Ongaro (youtube.com): This lecture provides a clear explanation of the Paxos consensus algorithm, often considered complex. Ongaro, a co-creator of Raft (an alternative designed for better understandability), breaks down Paxos, making it more accessible. Understanding consensus algorithms like Paxos and Raft is fundamental for anyone working on distributed systems.

Algorithms & Data Structures

  • "Introduction to Algorithms" by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein (CLRS): Often referred to as the "bible of algorithms," this comprehensive textbook covers a broad range of algorithms and data structures in depth. It's a foundational text for computer science students and a vital reference for software engineers looking to understand algorithmic design, analysis, and efficiency.
  • "The Algorithm Design Manual" by Steven S. Skiena: This book is highly regarded for its practical approach to algorithm design. It's divided into two parts: the first provides techniques for designing and analyzing algorithms, while the second is a catalog of algorithmic resources, problems, and implementations. It's praised for its focus on real-world examples and its extensive online resources.

DevOps, Reliability & Operations

  • "Site Reliability Engineering: How Google Runs Production Systems" edited by Betsy Beyer, Chris Jones, Jennifer Petoff, and Niall Richard Murphy: This book (and its sequel, "The Site Reliability Workbook") offers a deep dive into Google's principles and practices for creating scalable, reliable, and efficient systems. It has been hugely influential in popularizing the SRE role and mindset, and its principles have become a benchmark as other organizations, new and old, strive to achieve infrastructure excellence comparable to Google's.
  • "The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win" by Gene Kim, Kevin Behr, and George Spafford: This engaging novel tells the story of a fictional company's journey to implement DevOps principles. It's a highly accessible way to understand the core concepts of DevOps, flow, feedback, and continuous learning.
  • "The DevOps Handbook: How to Create World-Class Agility, Reliability, & Security in Technology Organizations" by Gene Kim, Jez Humble, Patrick Debois, and John Willis: A comprehensive guide to the principles and practices of DevOps. It builds upon the ideas in "The Phoenix Project" and provides actionable advice for implementing DevOps in any organization.

Project Management & Team Dynamics

  • "The Mythical Man-Month" by Fred Brooks: A classic in project management literature, it delves into the challenges of adding manpower to software projects.
  • "Crucial Conversations: Tools for Talking When Stakes Are High" by Kerry Patterson, Joseph Grenny, Ron McMillan, and Al Switzler: This book provides a powerful framework for handling difficult conversations effectively. It's essential for improving communication, fostering collaboration, and building stronger relationships, both professionally and personally. Its principles are key for teamwork, leadership, and navigating interpersonal dynamics in any high-stakes environment.
  • "How to Win Friends and Influence People" by Dale Carnegie: A timeless classic on interpersonal skills and human relations. While not specific to software engineering, its principles on understanding people, making them feel important, and winning them to your way of thinking are universally applicable and crucial for effective teamwork, leadership, and client interactions.

Career, Negotiation & Business Acumen

  • "Never Split the Difference: Negotiating As If Your Life Depended On It" by Chris Voss with Tahl Raz: A masterclass in negotiation from a former FBI hostage negotiator. The techniques and psychological insights are invaluable for any professional, including software engineers navigating complex discussions, from project requirements to salary talks.
  • "Zero to One: Notes on Startups, or How to Build the Future" by Peter Thiel with Blake Masters: This book challenges conventional thinking about startups and innovation. Thiel argues that the next global success won't come from copying existing models (1 to n) but from creating something entirely new (0 to 1). It explores the importance of monopolies (in the sense of unique value creation), contrarian thinking, and building a future that is different and better.
  • "Good Profit: How Creating Value for Others Built One of the World's Most Successful Companies" by Charles G. Koch: This book outlines the principles of Market-Based Management (MBM) and emphasizes creating long-term value for customers, employees, and society. While not strictly a software book, its lessons on principled entrepreneurship and value creation are highly relevant.
  • "Salary Negotiation: Make More Money, Be More Valued" by Patrick McKenzie (kalzumeus.com): An incredibly insightful guide on salary negotiation specifically for software engineers. It provides actionable advice and strategies to help developers understand their market value and negotiate better compensation.

Broader Thinking & Philosophy

  • "Antifragile: Things That Gain from Disorder" by Nassim Nicholas Taleb: Taleb introduces the concept of antifragility, describing systems that not only resist shocks but actually benefit and improve from them. This idea challenges traditional notions of robustness and resilience, advocating for embracing volatility and uncertainty to build stronger, more adaptive systems and approaches in various domains, including software and complex systems design.
  • "Skin in the Game: Hidden Asymmetries in Daily Life" by Nassim Nicholas Taleb: This book argues for the critical importance of bearing the consequences of one's decisions and actions. Taleb explores how having "skin in the game" aligns incentives, promotes fairness, and leads to more robust and ethical outcomes in fields ranging from finance and policy to everyday life, a crucial consideration for engineers whose work has real-world impact.
  • "How To Become A Hacker" by Eric S. Raymond: This piece redefines the hacker ethos in a positive light, encouraging developers to embrace curiosity, contribute to open-source projects, and commit to lifelong learning.
  • "My Favorite Paradox" by Forrest Smith (forrestthewoods.com): This insightful blog post delves into Simpson's Paradox, illustrating how aggregated data can lead to conclusions that are the opposite of what is revealed when data is properly segmented. It's a crucial read for anyone working with data, emphasizing the need to question assumptions and dig deeper to understand true underlying trends, with real-world examples from university admissions to medical treatments and even video game balancing.

Security

  • "Krebs on Security" Blog by Brian Krebs (krebsonsecurity.com): An essential blog for in-depth news and investigations on cybersecurity. Brian Krebs is a renowned investigative journalist in the security field, and his blog is a critical resource for understanding current security threats, data breaches, cybercrime, and the broader cybersecurity landscape.

Open Source Philosophy

  • "The Cathedral and the Bazaar" by Eric S. Raymond: This comparison of software development models has been instrumental in bringing open-source ideas to the mainstream.

Usability & User Experience

  • "Don't Make Me Think" by Steve Krug: While primarily focused on web usability, its core message about simplicity and clarity in design is profoundly relevant to software development. Creating intuitive and user-friendly software is paramount.
These resources offer valuable lessons and principles. What are some of your most recommended reads or influential resources?