# juancrg90/clean-code-notes

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/juancrg90-clean-code-notes).**

6,119 stars · 841 forks

## Links

- GitHub: https://github.com/JuanCrg90/Clean-Code-Notes
- awesome-repositories: https://awesome-repositories.com/repository/juancrg90-clean-code-notes.md

## Topics

`book` `clean-code` `notes`

## Description

Clean-Code-Notes is a clean code study guide and a collection of detailed notes based on professional software development standards. It serves as documentation for coding standards and a reference for writing maintainable source code.

The project provides technical summaries for object oriented design and software design patterns. It includes guidelines for organizing classes and interfaces to reduce coupling, isolating implementation details, and implementing architectural patterns such as dependency injection and interface abstraction.

The resource also functions as an implementation guide for test driven development, focusing on the creation of fast, independent, and repeatable unit tests. Additionally, it covers standards for naming conventions, error handling, and code formatting to improve long-term readability.

## Tags

### Software Engineering & Architecture

- [Clean Coding Standards](https://awesome-repositories.com/f/software-engineering-architecture/clean-coding-standards.md) — Provides professional standards and guidelines for writing readable, maintainable, and consistent source code. ([source](https://github.com/juancrg90/clean-code-notes#readme))
- [Abstract Data Types](https://awesome-repositories.com/f/software-engineering-architecture/abstract-data-types.md) — Implements data abstractions by hiding internal implementation details using abstract interfaces. ([source](https://github.com/juancrg90/clean-code-notes#readme))
- [Coding Best Practices](https://awesome-repositories.com/f/software-engineering-architecture/coding-best-practices.md) — Provides implementation-level guidelines and patterns for writing maintainable and readable software code.
- [Interface-Based Decoupling](https://awesome-repositories.com/f/software-engineering-architecture/component-abstractions/interface-based-decoupling.md) — Explains how to rely on abstract interfaces rather than concrete implementations to reduce coupling between components.
- [Code Maintainability Principles](https://awesome-repositories.com/f/software-engineering-architecture/development-methodologies/engineering-best-practices/code-quality-design-principles/code-maintainability-principles.md) — Shares design principles focused on managing abstraction layers to improve overall code maintainability.
- [Software Architecture Patterns](https://awesome-repositories.com/f/software-engineering-architecture/software-architecture-patterns.md) — Summarizes structural strategies like dependency injection and data transfer objects to separate system construction from runtime.
- [Contract and Abstraction Patterns](https://awesome-repositories.com/f/software-engineering-architecture/software-architecture/architectural-patterns/abstraction-domain-modeling/contract-abstraction-patterns.md) — Provides patterns for using interfaces and abstraction layers to decouple implementation details from consumption logic.
- [Object Oriented Design](https://awesome-repositories.com/f/software-engineering-architecture/software-architecture/foundational-theory-and-guidance/software-architecture-concepts/object-oriented-design.md) — Provides principles for organizing classes and interfaces to decouple components and isolate implementation details.
- [Single Responsibility Principles](https://awesome-repositories.com/f/software-engineering-architecture/software-architecture/foundational-theory-and-guidance/software-architecture-principles/solid-principles/single-responsibility-principles.md) — Provides detailed notes on applying the single responsibility principle to create focused and maintainable components.
- [Software Design Patterns](https://awesome-repositories.com/f/software-engineering-architecture/software-design-patterns.md) — Provides a reference for implementing architectural patterns like interface abstraction and dependency injection.
- [Software Design Principles](https://awesome-repositories.com/f/software-engineering-architecture/software-design-principles.md) — Offers summaries of fundamental rules and clean coding practices for improving long-term code maintainability. ([source](https://github.com/juancrg90/clean-code-notes#readme))
- [Naming Conventions](https://awesome-repositories.com/f/software-engineering-architecture/software-design-principles/naming-conventions.md) — Provides curated guidelines for choosing intention-revealing and searchable names for variables, functions, and classes. ([source](https://github.com/juancrg90/clean-code-notes#readme))
- [Error Handling](https://awesome-repositories.com/f/software-engineering-architecture/type-safe-data-handling/error-handling.md) — Provides structured guidelines for managing exceptions and avoiding null values to keep business logic clean. ([source](https://github.com/juancrg90/clean-code-notes#readme))
- [Data Transfer Objects](https://awesome-repositories.com/f/software-engineering-architecture/data-transfer-object-mapping/data-transfer-objects.md) — Implements data transfer objects to move raw information between system boundaries without adding logic.
- [Coding Standards](https://awesome-repositories.com/f/software-engineering-architecture/development-methodologies/engineering-best-practices/code-craftsmanship-standards/coding-standards.md) — Offers standards for code formatting and consistent spacing to improve visual hierarchy and readability. ([source](https://github.com/juancrg90/clean-code-notes#readme))
- [Explicit Dependency-Injection Wiring](https://awesome-repositories.com/f/software-engineering-architecture/integration-extensibility/dependency-injection/automated-dependency-wiring/explicit-dependency-injection-wiring.md) — Details the use of explicit dependency-injection wiring to separate system construction from runtime execution logic.
- [Boundary-Based Wrappers](https://awesome-repositories.com/f/software-engineering-architecture/integration-extensibility/extensibility/third-party-plugins/plugin-integrations/third-party-library-integrations/boundary-based-wrappers.md) — Provides guidelines on wrapping external libraries in custom interfaces to isolate the core application from breaking changes.
- [Library Isolation Wrappers](https://awesome-repositories.com/f/software-engineering-architecture/integration-extensibility/extensibility/third-party-plugins/plugin-integrations/third-party-library-integrations/library-isolation-wrappers.md) — Provides strategies for wrapping external libraries in custom interfaces to isolate the application from breaking changes. ([source](https://github.com/juancrg90/clean-code-notes#readme))
- [Object and Data Structure Distinction](https://awesome-repositories.com/f/software-engineering-architecture/object-and-data-structure-distinction.md) — Explains the balance between using data-hiding objects and data-exposing structures to optimize for adding new functionality. ([source](https://github.com/juancrg90/clean-code-notes#readme))
- [Law of Demeter](https://awesome-repositories.com/f/software-engineering-architecture/software-architecture/foundational-theory-and-guidance/software-architecture-principles/coupling-dependency-management/law-of-demeter.md) — Describes the Law of Demeter to restrict module interactions and minimize coupling. ([source](https://github.com/juancrg90/clean-code-notes#readme))

### Programming Languages & Runtimes

- [Implementation Isolation](https://awesome-repositories.com/f/programming-languages-runtimes/class-based-architecture/concrete-implementations/implementation-isolation.md) — Guides the use of abstract classes and interfaces to prevent client code from depending on concrete implementation details. ([source](https://github.com/juancrg90/clean-code-notes#readme))

### Testing & Quality Assurance

- [Test-Driven Development Resources](https://awesome-repositories.com/f/testing-quality-assurance/software-testing/test-driven-development-resources.md) — Serves as an implementation guide for test-driven development, emphasizing the write-failing-test-first methodology.
- [Learning Tests](https://awesome-repositories.com/f/testing-quality-assurance/api-network-testing/api-testing/learning-tests.md) — Explains how to write learning tests against external packages to identify breaking changes in new releases. ([source](https://github.com/juancrg90/clean-code-notes#readme))
- [Learning Tests](https://awesome-repositories.com/f/testing-quality-assurance/learning-tests.md) — Guides the creation of learning tests against third-party packages to document behavior and detect breaking changes.
- [Maintainable Test Design](https://awesome-repositories.com/f/testing-quality-assurance/test-strategy-design/maintainable-test-design.md) — Guidelines for designing fast and independent unit tests to ensure reliable and repeatable results. ([source](https://github.com/juancrg90/clean-code-notes#readme))

### Development Tools & Productivity

- [Code Refactoring Tools](https://awesome-repositories.com/f/development-tools-productivity/code-refactoring-tools.md) — Guidelines for restructuring and organizing existing code through better naming and formatting to reduce technical debt.

### Part of an Awesome List

- [Clean Code and Principles](https://awesome-repositories.com/f/awesome-lists/devtools/clean-code-and-principles.md) — Comprehensive notes on applying clean code principles.
