Principles to keep in mind Encapsulate what varies. Code to the interface, not to the implementation. Favor composition over inheritance. Strive for loosely coupled designs between objects that interact. Classes should be open for extension but closed for modifications. Depend on abstractions. Do not depend on concrete classes. A class should have only one reason to change.
Guide for Software Developer who wants to know everything i.e. Certification Roadmap for Software Developer, Best apps that software developer must have, Programming Languages that software developer must know, Tutorials for Programming, Tips and Tricks for Software Development, Laptops/Computers that are recommended for Software Development or In Short, EVERYTHING ABOUT SOFTWARE DEVELOPMENT.