Fundamentals of Data Engineering: Plan and Build Robust Data Systems
Joe Reis, Matt Housley
Fundamentals of Data Engineering moves the focus away from the hype of specific tools to the timeless principles of the Data Engineering Lifecycle. Joe Reis and Matt Housley provide a definitive framework that spans generation, ingestion, storage, transformation, and serving. Crucially, they introduce the concept of 'Undercurrents' cross-cutting concerns like security, DataOps, observability, and orchestration that must be applied at every stage to ensure the system is not just functional, but robust, secure, and maintainable.
Designing Machine Learning Systems: An Iterative Process for Production-Ready Applications
Chip Huyen
Designing Machine Learning Systems offers a comprehensive framework for building production-ready ML applications, arguing that the model algorithm is just a small part of a complex, iterative ecosystem. Chip Huyen covers the end-to-end lifecycle from data engineering and feature management to deployment strategies and monitoring emphasizing that systems must be designed to adapt to constant change. The book serves as a bridge between research and engineering, focusing on reliability, scalability, and the crucial feedback loops necessary to handle data distribution shifts in the real world.
AI Systems Performance Engineering: Optimizing Model Training and Inference Workloads with GPUs, CUDA, and PyTorch
Chris Fregly
AI Systems Performance Engineering targets the critical layer below high-level model design, focusing on maximizing hardware efficiency. The book details how to bridge the gap between abstract Python frameworks (like PyTorch) and the underlying hardware realities (GPUs/CUDA). It provides a systematic approach to profiling and resolving bottlenecks specifically distinguishing between Compute-Bound and Memory-Bound operations to optimize both training throughput and inference latency, ensuring that expensive compute resources are effectively utilized.
Applied Machine Learning and AI for Engineers: Solve Business Problems That Can't Be Solved Algorithmically
Jeff Prosise
Applied Machine Learning and AI for Engineers is designed to guide traditional software developers into the probabilistic world of AI without getting bogged down in deep mathematical theory. Jeff Prosise focuses on the practical application of libraries like Scikit-learn and TensorFlow, teaching engineers how to solve problems such as computer vision and fraud detection that are impossible to define with static if-then logic. It emphasizes a mindset shift from explicitly programming rules to curating data that allows the machine to learn the rules itself.
AI Engineering: Building Applications with Foundation Models
Chip Huyen
AI Engineering: Building Applications with Foundation Models defines the emerging discipline that sits between traditional software engineering and data science. The book argues that the challenge has shifted from training models to orchestrating them, focusing on the practicalities of building reliable systems on top of stochastic foundation models. It covers the critical architectural patterns such as RAG (Retrieval-Augmented Generation) versus Fine-Tuning and tackles the hardest part of this new stack: developing rigorous evaluation pipelines (evals) to manage and measure the non-deterministic nature of LLM outputs.
Pressman, R: ISE Software Engineering: A Practitioner's Appr
Bruce Maxim, Roger Pressman
Software Engineering: A Practitioner's Approach serves as an encyclopedic reference for the discipline, defining software engineering as a Layered Technology. Pressman argues that any engineering approach must rest on a bedrock of organizational Quality, which supports the Process (the framework), the Methods (the technical 'how-to' for analysis and design), and the Tools. The book is comprehensive, covering the entire spectrum from project management and process models (like Waterfall and Agile) to advanced topics like cleanroom engineering and component-based development.
Observability Engineering: Achieving Production Excellence
Charity Majors, Liz Fong-Jones, George Miranda
Observability Engineering establishes that traditional monitoring (watching for "known unknowns" via static dashboards) is no longer sufficient for modern, complex distributed systems where failure modes are often unpredictable ("unknown unknowns"). The authors define true observability as the measure of how well you can understand the internal states of a system purely from its external outputs, without shipping new code. The book emphasizes the necessity of high-cardinality data and structured events, guiding teams to move away from aggregate metrics toward an investigative approach that allows for debugging novel issues directly in production.
Fundamentals of Software Engineering: From Coder to Engineer
Nathaniel Schutta, Dan Vega
Fundamentals of Software Engineering aims to transition the reader from a 'coder' (who focuses on syntax and implementation) to an 'engineer' (who focuses on systems and processes). It covers the entire Software Development Life Cycle (SDLC), emphasizing that successful software is built through rigorous requirement analysis, formal design modeling, structured testing, and maintenance strategies. The book argues that mastering these foundational processes rather than just the latest framework is what allows developers to build robust, scalable systems that survive the test of time.
Software Engineering at Google: Lessons Learned from Programming Over Time
Titus Winters, Tom Manshreck, Hyrum Wright
Software Engineering at Google redefines the field by distinguishing 'programming' (writing code) from 'software engineering' (programming integrated over time). The book argues that true engineering requires managing three critical factors: Time, Scale, and Trade-offs. It details the Culture, Processes, and Tools such as the 'Shift Left' testing philosophy and Hyrum's Law that enable Google to maintain a massive, monolithic codebase that remains upgradeable and resilient over decades, rather than just working at the moment of launch.
Beyond Software Architecture. Creating and Sustaining Winning Solutions
Luke Hohmann
Beyond Software Architecture expands the scope of the architect's role from purely technical design to the broader business and product context necessary for market success. Luke Hohmann argues that technical excellence alone is insufficient, urging architects to consider 'market tectonics' and the complete product lifecycle including licensing models, portability, deployment, and upgrade mechanisms. It serves as a guide for aligning technical architecture with business realities to create solutions that are not just well-engineered, but sustainable and profitable.
Clean Architecture: A Craftsman's Guide to Software Structure and Design
Robert C. Martin
Clean Architecture advocates for the rigorous separation of concerns, structuring systems so that core business logic is completely independent of frameworks, databases, and user interfaces. Robert C. Martin introduces the concentric circle model and the critical Dependency Rule, which dictates that source code dependencies must always point inwards, toward high-level policies and entities. This approach ensures systems remain testable and maintainable, effectively treating implementation details (like the web or the database) as plugins that can be swapped without affecting the core application.
Learning Domain-Driven Design: Aligning Software Architecture and Business Strategy
Vlad Khononov
Learning Domain-Driven Design acts as a pragmatic bridge between business strategy and technical implementation, making the often-dense concepts of DDD accessible. Vlad Khononov clearly separates Strategic Design (analyzing business domains, defining Bounded Contexts, and mapping relationships) from Tactical Design (coding patterns like Aggregates and Value Objects). The book argues that understanding the business problem space is critical before writing code, helping architects avoid over-engineering by applying complex patterns only where the business complexity truly warrants them.
Software Architecture Metrics
Christian Ciceri, Dave Farley, Neal Ford, Andrew Harmel-Law, Michael Keeling, Carola Lilienthal, João Rosa, Alexander von Zitzewitz, Rene Weiss, Eoin Woods
Software Architecture Metrics addresses the critical challenge of objectively measuring architectural quality, moving beyond subjective opinions to data-driven analysis. The authors explore how to define and track specific metrics such as coupling, cohesion, and cyclomatic complexity to monitor the structural health of a system over time. A key focus is on implementing fitness functions to automate architectural governance, ensuring that the system remains maintainable and meets its quality goals as it evolves
Designing Software Architectures: A Practical Approach
Humberto Cervantes (Autor), Rick Kazman
Designing Software Architectures: A Practical Approach distinguishes itself by offering a prescriptive, step-by-step methodology for the design process itself, rather than just a catalog of patterns. The authors detail the Attribute-Driven Design (ADD) method, which teaches architects how to systematically decompose a system and select specific patterns and tactics to satisfy Quality Attributes. It effectively bridges the gap between theoretical requirements and concrete implementation, providing a repeatable workflow to reduce the uncertainty often found in the early design phases.
Software Architecture in Practice
Len Bass, Paul Clements, Rick Kazman
Software Architecture in Practice establishes the definitive framework for linking technical decisions to business goals. Written by researchers from the SEI (Software Engineering Institute), it argues that architecture is primarily driven by Quality Attributes (like performance, security, and modifiability) rather than just functional requirements. The book provides rigorous, proven methodologies such as the ATAM (Architecture Tradeoff Analysis Method) for evaluating whether an architecture can actually support the necessary business drivers before a single line of code is written.
Facilitating Software Architecture
Andrew Harmel-Law
Facilitating Software Architecture redefines the modern architect not as a top-down decision maker, but as a collaborative facilitator who empowers teams to own their architectural choices. Recognizing that complex systems move too fast for a single "ivory tower" architect, Andrew Harmel-Law introduces the Architectural Advice Process (AAP) a framework for decentralizing decision-making while maintaining alignment. It is essentially a guide on how to stop doing all the architecture yourself and start coaching your teams to build it effectively.
Fundamentals of Software Architecture
Mark Richards, Neal Ford
Fundamentals of Software Architecture serves as a comprehensive guide for aspiring and practicing architects, defining the role not just by technical depth, but by breadth and trade-off analysis. The authors introduce the 'First Law of Software Architecture' everything is a trade-off and provide a structured approach to identifying architectural characteristics (the '-ilities'), architectural patterns, and component modularity. It bridges the gap between coding and high-level structure, offering a framework to make objective decisions in an industry often driven by subjectivity.
Software Architecture: The Hard Parts
Neal Ford, Mark Richards, Pramod Sadalage, Zhamak Dehghani
Software Architecture: The Hard Parts focuses on the complex decision-making required for distributed systems, emphasizing that there are no universal 'best practices,' only trade-offs. The authors provide a practical framework for analyzing difficult architectural decisions such as service granularity, data ownership, and workflow orchestration helping architects navigate the critical balance between static coupling and dynamic forces in modern microservices architectures.