Architecture – How much does software architecture depend on the language

Architecturedesign-patterns

While educating myself about software architecture and design patterns I’ve noticed that in most cases some language features and design specifics are implied in the explanation.

E.g. practically any article or book on that will illustrate the ideas using classes and interfaces. Everything one can easily find on this topic would mention objects and OOP concepts.

What if the language, in which the system is written doesn’t have such concepts at all?
E.g. what if I use Python or Node, which are dynamically typed and don’t have a notion of interface? What if I use TypeScript where an interface is an ephemeral construct, which doesn’t exist in runtime? What if I’m trying to embrace functional programming? Should I ignore e.g. SOLID and look for other concepts, suitable for my language?

If yes, what are those? Unfortunately all the well-adopted paradigms (as far as I’m aware) refer to OOP concepts and types in some way. If no, which rules should I follow when adapting general architecture and design principles to my particular language and use case?

How in general would you describe the dependency between architecture and the language?

Best Answer

A software architecture is very much like the architecture of a house or a bridge. A bridge must hold the weight of itself and the vehicles that drive over it or the people that walk over it. It must withstand weather. The materials that you use to build it must be both strong and relatively lightweight.

There are many materials you can use to build a house. You can use brick or stucco. You can use wood beams or metal ones. Each material has its own characteristics, in terms of weight, strength, and so on. All of these characteristics affect the architecture.

In the same way, the programming language you use affects the way you build your architecture. Your architecture is going to look different in a programming language that has classes like C++ than it is in a programming language that does not, like C.

The SOLID principles are mostly about object-oriented languages (i.e. languages having classes).