Best Computer Systems Analysis & Design Books
System design questions have become standard at many FAANG interviews.
1. A Common-Sense Guide to Data Structures and Algorithms, Second Edition: Level Up Your Core Programming Skills
Author: by Jay Wengrow
This new and revised second edition features new chapters on recursion, dynamic programming, and using Big O in your daily work. Use Big O notation to measure and articulate the efficiency of your code, and modify your algorithm to make it faster.
Find out how your choice of arrays, linked lists, and hash tables can dramatically affect the code you write. Use recursion to solve tricky problems and create algorithms that run exponentially faster than the alternatives. Dig into advanced data structures such as binary trees and graphs to help scale specialized applications such as social networks and mapping software.
2. Software Engineering at Google: Lessons Learned from Programming Over Time
Author: by Titus Winters
Today, software engineers need to know not only how to program effectively but also how to develop proper engineering practices to make their codebase sustainable and healthy. This book emphasizes this difference between programming and software engineering. How can software engineers manage a living codebase that evolves and responds to changing requirements and demands over the length of its life?
Based on their experience at Google, software engineers Titus Winters and Hyrum Wright, along with technical writer Tom Manshreck, present a candid and insightful look at how some of the world’s leading practitioners construct and maintain software. This book covers Google’s unique engineering culture, processes, and tools and how these aspects contribute to the effectiveness of an engineering organization.
You’ll explore three fundamental principles that software organizations should keep in mind when designing, architecting, writing, and maintaining code:How time affects the sustainability of software and how to make your code resilient over timeHow scale affects the viability of software practices within an engineering organizationWhat trade-offs a typical engineer needs to make when evaluating design and development decisions.
3. What Great Principals Do Differently: Twenty Things That Matter Most
Author: by Todd Whitaker
Eye on Education
What are the attitudes and actions that make great principals stand out? In this internationally renowned bestseller, Todd Whitaker reveals the 20 keys to effective school leadership. This essential third edition features helpful new strategies for recruiting talent through better interview and reference questions, as well as tips for retaining talent.
It also offers a new section on how leadership is not an event, but rather requires a consistent approach to affect the climate and eventually shape the culture of your school. Perfect for new and experienced principals, for independent professional reading or for leadership courses, this practical book will leave you feeling inspired and ready to do the things that matter most for the people who ultimately matter mostthe students.
4. Site Reliability Engineering: How Google Runs Production Systems
Author: by Niall Richard Murphy
The overwhelming majority of a software system’s lifespan is spent in use, not in design or implementation. So, why does conventional wisdom insist that software engineers focus primarily on the design and development of large scale computing systems? In this collection of essays and articles, key members of Google’s Site Reliability Team explain how and why their commitment to the entire lifecycle has enabled the company to successfully build, deploy, monitor, and maintain some of the largest software systems in the world.
You’ll learn the principles and practices that enable Google engineers to make systems more scalable, reliable, and efficientlessons directly applicable to your organization. This book is divided into four sections:IntroductionLearn what site reliability engineering is and why it differs from conventional IT industry practicesPrinciplesExamine the patterns, behaviors, and areas of concern that influence the work of a site reliability engineer (SRE)PracticesUnderstand the theory and practice of an SRE’s day to day work: building and operating large distributed computing systemsManagementExplore Google’s best practices for training, communication, and meetings that your organization can use
5. Fundamentals of Software Architecture: An Engineering Approach
Author: by Mark Richards
Salary surveys worldwide regularly place software architect in the top 10 best jobs, yet no real guide exists to help developers become architects.Until now. This book provides the first comprehensive overview of software architecture’s many aspects. Aspiring and existing architects alike will examine architectural characteristics, architectural patterns, component determination, diagramming and presenting architecture, evolutionary architecture, and many other topics.
Mark Richards and Neal Fordhands-on practitioners who have taught software architecture classes professionally for yearsfocus on architecture principles that apply across all technology stacks. You’ll explore software architecture in a modern light, taking into account all the innovations of the past decade.
This book examines:Architecture patterns: The technical basis for many architectural decisionsComponents: Identification, coupling, cohesion, partitioning, and granularitySoft skills: Effective team management, meetings, negotiation, presentations, and moreModernity: Engineering practices and operational approaches that have changed radically in the past few yearsArchitecture as an engineering discipline: Repeatable results, metrics, and concrete valuations that add rigor to software architecture.
6. Algorithms (4th Edition)
Author: by Robert Sedgewick
This fourth edition of Robert Sedgewick and Kevin Wayne’s Algorithms is the leading textbook on algorithms today and is widely used in colleges and universities worldwide. This book surveys the most important computer algorithms currently in use and provides a full treatment of data structures and algorithms for sorting, searching, graph processing, and string processing-including fifty algorithms every programmer should know.
In this edition, new Java implementations are written in an accessible modular programming style, where all of the code is exposed to the reader and ready to use. The algorithms in this book represent a body of knowledge developed over the last 50 years that has become indispensable, not just for professional programmers and computer science students but for any student with interests in science, mathematics, and engineering, not to mention students who use computation in the liberal arts.
The companion web site, algs4.Cs.Princeton. Edu, contains An online synopsis Full Java implementations Test data Exercises and answers Dynamic visualizations Lecture slides Programming assignments with checklists Links to related material The MOOC related to this book is accessible via the “Online Course” link at algs4.Cs.Princeton.Edu.
7. Domain-Driven Design: Tackling Complexity in the Heart of Software
Author: by Eric Evans
Title: Domain-Driven Design( Tackling Complexity in the Heart of Software) Binding: Hardcover Author: EricEvans Publisher: Addison-WesleyProfessional
8. The System Design Interview, 2nd Edition
Author: by Lewis C. Lin
The System Design Interview, by Lewis C.Lin and Shivam P. Patel, is a comprehensive book that provides the necessary knowledge, concepts, and skills to pass your system design interview. It’s written by industry professionals from Facebook & Google. Get their insider perspective on the proven, practical techniques for answering system design questions like Design YouTube or Design a TinyURL solution.
Unlike others, this book teaches you exactly what you need to know. FEATURING THE PEDALS METHOD, THE BEST FRAMEWORK FOR SYSTEM DESIGN QUESTIONSThe book revolves around an effective six-step process called PEDALS:Process RequirementsEstimateDesign the ServiceArticulate the Data ModelList the Architectural ComponentsScalePEDALS demystifies the confusing system design interview by breaking it down into manageable steps.
It’s almost like a recipe: each step adds to the next. PEDALS helps you make a clear progression that starts from zero and ends with a functional, scalable system. The book explains how you can use PEDALS as a blueprint for acing the system design interview.
9. Microservices Patterns: With examples in Java
Author: by Chris Richardson
44 reusable patterns to develop and deploy reliable production-quality microservices-based applications, with worked examples in Java Key Features 44 design patterns for building and deploying microservices applications Drawing on decades of unique experience from author and microservice architecture pioneer Chris Richardson A pragmatic approach to the benefits and the drawbacks of microservices architecture Solve service decomposition, transaction management, and inter-service communication Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications.
About The Book Microservices Patterns teaches you 44 reusable patterns to reliably develop and deploy production-quality microservices-based applications. This invaluable set of design patterns builds on decades of distributed system experience, adding new patterns for composing services into systems that scale and perform under real-world conditions.
More than just a patterns catalog, this practical guide with worked examples offers industry-tested advice to help you design, implement, test, and deploy your microservices-based application. What You Will Learn How (and why! To use microservices architecture Service decomposition strategies Transaction management and querying patterns Effective testing strategies Deployment patterns This Book Is Written For Written for enterprise developers familiar with standard enterprise application architecture.
10. Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith
Author: by Sam Newman
How do you detangle a monolithic system and migrate it to a microservice architecture? How do you do it while maintaining business-as-usual? As a companion to Sam Newman’s extremely popular Building Microservices, this new book details a proven method for transitioning an existing monolithic system to a microservice architecture.
With many illustrative examples, insightful migration patterns, and a bevy of practical advice to transition your monolith enterprise into a microservice operation, this practical guide covers multiple scenarios and strategies for a successful migration, from initial planning all the way through application and database decomposition.
You’ll learn several tried and tested patterns and techniques that you can use as you migrate your existing architecture. Ideal for organizations looking to transition to microservices, rather than rebuildHelps companies determine whether to migrate, when to migrate, and where to beginAddresses communication, integration, and the migration of legacy systemsDiscusses multiple migration patterns and where they applyProvides database migration examples, along with synchronization strategiesExplores application decomposition, including several architectural refactoring patternsDelves into details of database decomposition, including the impact of breaking referential and transactional integrity, new failure modes, and more
11. Elements of Programming Interviews in Java: The Insiders' Guide
Author: by Adnan Aziz
Strategies for building large systems that can be easily adapted for new situations with only minor programming modifications. Time pressures encourage programmers to write code that works well for a narrow purpose, with no room to grow. But the best systems are evolvable; they can be adapted for new situations by adding code, rather than changing the existing code.
The authors describe techniques they have found effective-over their combined 100-plus years of programming experience-that will help programmers avoid programming themselves into corners. The authors explore ways to enhance flexibility by: Organizing systems using combinators to compose mix-and-match parts, ranging from small functions to whole arithmetics, with standardized interfaces Augmenting data with independent annotation layers, such as units of measurement or provenance Combining independent pieces of partial information using unification or propagation Separating control structure from problem domain with domain models, rule systems and pattern matching, propagation, and dependency-directed backtracking Extending the programming language, using dynamically extensible evaluators
13. C++ Crash Course: A Fast-Paced Introduction
Author: by Josh Lospinoso
A fast-paced, thorough introduction to modern C++ written for experienced programmers. After reading C++ Crash Course, you’ll be proficient in the core language concepts, the C++ Standard Library, and the Boost Libraries. C++ is one of the most widely used languages for real-world software.
In the hands of a knowledgeable programmer, C++ can produce small, efficient, and readable code that any programmer would be proud of. Designed for intermediate to advanced programmers, C++ Crash Course cuts through the weeds to get you straight to the core of C++17, the most modern revision of the ISO standard.
Part 1 covers the core of the C++ language, where you’ll learn about everything from types and functions, to the object life cycle and expressions. Part 2 introduces you to the C++ Standard Library and Boost Libraries, where you’ll learn about all of the high-quality, fully-featured facilities available to you.
You’ll cover special utility classes, data structures, and algorithms, and learn how to manipulate file systems and build high-performance programs that communicate over networks. You’ll learn all the major features of modern C++, including: Fundamental types, reference types, and user-defined types The object lifecycle including storage duration, memory management, exceptions, call stacks, and the RAII paradigm Compile-time polymorphism with templates and run-time polymorphism with virtual classes Advanced expressions, statements, and functions Smart pointers, data structures, dates and times, numerics, and probability/statistics facilities Containers, iterators, strings, and algorithms Streams and files, concurrency, networking, and application developmentWith well over 500 code samples and nearly 100 exercises, C++ Crash Course is sure to help you build a strong C++ foundation.
14. Terraform: Up & Running: Writing Infrastructure as Code
Author: by Yevgeniy Brikman
Terraform has become a key player in the DevOps world for defining, launching, and managing infrastructure as code (IaC) across a variety of cloud and virtualization platforms, including AWS, Google Cloud, Azure, and more. This hands-on second edition, expanded and thoroughly updated for Terraform version 0.
12 and beyond, shows you the fastest way to get up and running. Gruntwork cofounder Yevgeniy (Jim) Brikman walks you through code examples that demonstrate Terraform’s simple, declarative programming language for deploying and managing infrastructure with a few commands. Veteran sysadmins, DevOps engineers, and novice developers will quickly go from Terraform basics to running a full stack that can support a massive amount of traffic and a large team of developers.
Explore changes from Terraform 0.9 through 0. 12, including backends, workspaces, and first-class expressionsLearn how to write production-grade Terraform modulesDive into manual and automated testing for Terraform codeCompare Terraform to Chef, Puppet, Ansible, CloudFormation, and Salt StackDeploy server clusters, load balancers, and databasesUse Terraform to manage the state of your infrastructureCreate reusable infrastructure with Terraform modulesUse advanced Terraform syntax to achieve zero-downtime deployment
15. Head First Design Patterns: A Brain-Friendly Guide
Author: by Eric Freeman
What’s so special about design patterns? At any given moment, someone struggles with the same software design problems you have. And, chances are, someone else has already solved your problem. This edition of Head First Design Patternsnow updated for Java 8shows you the tried-and-true, road-tested patterns used by developers to create functional, elegant, reusable, and flexible software.
By the time you finish this book, you’ll be able to take advantage of the best design practices and experiences of those who have fought the beast of software design and triumphed. What’s so special about this book? We think your time is too valuable to spend struggling with New concepts.
Using the latest research in cognitive science and learning theory to craft a multi-sensory learning experience, Head First Design Patterns uses a visually rich format designed for the way your brain works, not a text-heavy approach that puts you to sleep.
16. Understanding Distributed Systems: What every developer should know about large distributed applications
Author: by Roberto Vitillo
Learning to build distributed systems is hard, especially if they are large scale. It’s not that there is a lack of information out there. You can find academic papers, engineering blogs, and even books on the subject. The problem is that the available information is spread out all over the place, and if you were to put it on a spectrum from theory to practice, you would find a lot of material at the two ends, but not much in the middle.
That is why I decided to write a book to teach the fundamentals of distributed systems so that you don’t have to spend countless hours scratching your head to understand how everything fits together. This is the guide I wished existed when I first started out, and it’s based on my experience building large distributed systems that scale to millions of requests per second and billions of devices.
If you develop the back-end of web or mobile applications (or would like to!, this book is for you. When building distributed systems, you need to be familiar with the network stack, data consistency models, scalability and reliability patterns, and much more.