Clean code
Writing code that is easy to read, understand, and maintain. One principle says that the code should be organized into small, single-purpose functions and classes, which is opposite from the idea Deep modules from A Philosophy of Software Design.
Programming paradigms
See Clean Architecture An effective software uses a hybrid of different programming paradigms at different times.
Object-oriented programming
Being one of the programming paradigms, OOP is the clear tool for the architecture. Use Model-driven design and domain-driven design to understand: How object-modelers are able to encapsulate an entire business in a zero-dependency domain model.
Design principles
With OOP under the belt, design principles help to decide when to use inheritance, when to use abstract class etc. Design principles are well-established best practices, such as SOLID.
Design patterns
Almost all software problems have been solved and categorized, those are called patterns. 3 categories of design patterns: creational, structural, and behaviour. Design patterns (Gang of four) Head first design pattern (always heard)
Architectural principle
From here, higher level thinking beyond the class level.
Architectural styles
Complex business models → Layered architecture Real-time events → Publish-subscribe architecture 3 categories of architectural styles are similar to the 3 categories of design patterns, because architectural styles are design patterns at the high-level. Structural Messaging
Distributed
A distributed architecture simply means that the components of the system are deployed separately and operate by communicating over a network protocol. The most known might be the client-server architecture.
Architectural patterns
Architectural patterns explain in details how to implement those architectural styles.