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: creationalstructural, 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.