# The SOLID Principles of Software Engineering _"Don't surprise software users. Don't surprise people reading your code."_ SOLID is an acronym used for the five principles of object-oriented programming and design. These principles were first introduced by Robert C. Martin and are widely used as a guide for creating maintainable and scalable software. The SOLID principles of software engineering are as follows. * [Single Responsibility Principle (SRP)](Single_Responsibility_Principle.md) * [Open-Closed Principle (OCP)](Open_Closed_Principle.md) * [Liskov Substitution Principle (LSP)](Liskov_Substitution_Principle.md) * [Interface Segregation Principle (ISP)](Interface_Segregation_Principle.md) * [Dependency Inversion Principle (DIP)](Dependency_Inversion_Principle.md) There's an underlying common theme to all of these principles: * Principle of least astonishment (POLA): _"People are part of the system. The design should match the user's experience, expectations, and mental models."_ ![Alt text](Dilbert_Quality.png) ![Alt text](Copying_and_pasting_from_stackoverflow.png)