One of the most comprehensive no-fluff guides for software developers to help them write clean code every day. The book is packed with principles and patterns that help developers, from novices and juniors to seniors and experts, to write cleaner code.
Clean Code Principles and Patterns is one of the most comprehensive no-fluff guides for software developers to help them write clean code every day. The author Petri Silén has almost 30 years of industry experience in designing and implementing software, and now he puts all his knowledge gained during the years into this book. The book is packed with principles and patterns that help developers, from novices and juniors to seniors and experts, to write cleaner code. The principles and patterns presented in the book are accompanied by realistic yet straightforward examples to help the reader to understand them better. Examples are written in Java, JavaScript/TypeScript, and C++. Most of the examples are directly applicable to other programming languages, too. Also, having basic knowledge of Docker and Kubernetes concepts is beneficial. The reader should have basic knowledge of one object-oriented programming language to get the full benefit from this book. All the major examples presented in the book are available in a public GitHub repository.
The book is divided into ten chapters
Architectural design principles
Object-oriented design principles
Coding principles
Testing principles
Security principles
API design principles
Database types and related principles
Concurrent programming principles
Agile and teamwork principles
DevSecOps
After reading this book, you will know the following and much more
How to architect modern cloud-native microservices (examples with Kubernetes)
What are autopilot microservices
What are event sourcing, CQRS, distributed transactions, saga orchestration pattern, and saga choreography pattern
What are the five SOLID principles, and how to put them into use in real-life code
What are the 25 design patterns, and how to use them
Law of Demeter, Tell, don't ask principle, YAGNI, primitive obsession
What is the MVC pattern, and how MVP and MVVM differ from each other
What is clean (or hexagonal) architecture and vertical slice architecture
Why and how to use dependency injection
Detailed instructions with concrete examples on how to uniformly name various software entities like classes, functions, and variables
Why you should prefer composition over inheritance
Strategic and tactical domain-driven design (DDD) with examples
How to organize a source code repository
How to organize code into directories
Concrete ways how to avoid writing comments and refactor comments away
What are the most common issues that static code analyzers find, and how to correct them
Most important refactoring techniques for everyday use
Why you should use a statically typed language
How to correctly handle errors and exceptions
How to not forget handle errors and exceptions
Why you should never pass or return a null value
How to avoid off-by-one errors effectively
What you should remember when using a Google search to get answers
When and how to optimize code
TDD, Detroit/Chicago vs. London schools, Unit testing, mocking, integration testing, E2E testing, and non-functional testing
What is threat modeling and how to conduct it
Authentication and authorization using OpenID Connect and OAuth2
What are the essential security features to implement in an application
How to design APIs using technologies like JSON-RPC, REST, GraphQL, SSE, WebSocket, gRPC, and event-driven services
When and how to use a relational database, document database, key-value store, or wide-column database
How to avoid SQL injection attacks using ORM or parameterized SQL queries
When to use threading or parallel algorithms and how to ensure thread safety
What principles to follow when working in a software development team
What are DevOps, SecOps, and continuous integration (CI), and what is the difference between continuous delivery (CD) and continuous deployment (CD). Examples with Docker, Kubernetes and GitHub Actions.
Regards!