14

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?

  • I wrote an article on software architecture: Managing software complexity linkedin.com/pulse/… – overexchange May 13 '18 at 2:08
  • Firstly, yes, software architecture is driven based on the technology you have in mind. For example: python does not leverage multithreading until those threads are IO bound. This is a real limitation in utilising multi-core cpu bound operations. Secondly, you should listen this... youtu.be/FF-tKLISfPE Thirdly, you should analyse/work on existing stable distributed enterprise products of specific domain that is scalably deployed, for atleast 5-6 years. This is an organic understanding of how technology influences design. Btw..Such products were written in pre-java world, from scratch. – overexchange May 13 '18 at 2:39
  • Wrt technology...In Java world, until java 5/6/7 language design was in control of actual founders. From java 8, I would consider java as a propaganda machine but not as a programming language. In my opinion, java has become a project manager's technology. So, as a beginner, I would analyse/work on a product written using C/C++/Python – overexchange May 13 '18 at 2:58
  • Please do not use the word architecture in your question, it is confusing. Your question is about design. The choice of language would typically qualify as architecture, your question makes no sense the way it is worded.. – Martin Maat May 13 '18 at 7:35
  • Also python and javascript do have interfaces, they just don't use a separate keyword to demarcate them – Caleth May 16 '18 at 9:16
11

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).

4

Architecture depends on capabilities to meet its goals. Language choices can limit capabilities. Any Turing complete language has the capability to complete any programming task. After that point it's about how human readable the language allows the solution to be.

Many software architecture schemes ask you to remove all knowledge of technology choices from the core domain business rules. The one technical choice you can never remove knowledge of from the core is the language you choose to express it in.

When books on Architecture stick to telling you about their goals the language doesn't matter so long as it is capable of achieving the goal. When the books tell you how to achieve these goals the language starts to mater.

  • Nice points in your answer, but am sure, historically software architecture were implement ed with the TECHNOLOGIES in trend. – overexchange May 13 '18 at 3:26
  • @overexchange the point of a good architecture is to produce software that can outlast the current trend by being ready for the next one. – candied_orange May 13 '18 at 3:29
  • Atleast in the middleware world, product architectures were not able to think beyond RPC/RMI/CORBA until 1990's. I saw classic designs relying on procedure oriented remore calls. Then ServiceOArch changed the trend of middleware, in terms of architecture. – overexchange May 13 '18 at 3:35
  • 2
    @CandiedOrange that's the theory. In practice, I've seen a lot of people do what is sometimes called "hype driven development" - just do what their current circle of peers is talking most about at the time of Design so you can participate in that talk. – marstato May 13 '18 at 5:56
  • @marstato Agreed. Best example is, using Spring/Springboot in current trend, for any new project, without knowing, why? – overexchange May 13 '18 at 10:59
1

Architecture as a term has a really specific meaning that’s very related to architecture in the physical world and at its core is about the art and practice of building things, about how things are made and put together. Taken that way, when architecture is done well I think the language is very much tied together with the architecture, just as a well-architected building should be intimately informed by the material out of which it is constructed.

In software, the architectural choices should be made in a way that is congruous to the properties of the language. If you’re building a system with a language that is object-oriented, then I would expect the architecture of the system to be object-oriented as well. If you’re building a system with a functional language then I would expect the architecture of that system also to be functional.

Make sense?

  • thanks for your response! by any chance are you aware of any resources, elaborating on software architecture with regard to dynamically typed or functional languages? tbh all I’ve seen works for e.g. Java straight out of the box but would require some adaptation for e.g. js. which are possible guidelines to adapt common architecture patterns to a weakly typed language? should one even try that or should it be smth completely different? – Tristan Tzara May 12 '18 at 19:57
  • my concern was that if one is using e.g. Java, then there’s a lot of best practices and patterns for architecture, but I haven’t seen any for languages of different kind. so I was wondering, how to treat those – Tristan Tzara May 12 '18 at 20:02
  • basically, does e.g. SOLID still stand in such case? how does one adapt it if yes? what is one supposed to do if no? – Tristan Tzara May 12 '18 at 20:05
  • The SOLID principles are very object-oriented in origin. However I think they encode higher-order principles that might be applicable to any software system regardless of language. But rudimentary principles are exactly that: you should know and understand them before building much beyond a bird-feeder. – RibaldEddie May 12 '18 at 21:07
  • @TristanTzara Object oriented programming was invented before, and without, any object oriented language. You can do it in any general purpose language. Even those that don't have classes. – candied_orange May 13 '18 at 18:41
1

I'd say, to start, that even the language you think in has a deep influence in what you can conceive. There is a reason PASCAL was created by Niklaus Wirth and C by Brian Kernighan and Dennis Ritchie.

On a higher level, the ability to express certain concepts (and the lack of others) will direct your thought and make you arrive at certain solutions that would not necessarily be the same other person, with a different background, would come up with.

Finally, the concepts you mention can be all be implemented in any general-purpose language. It's just that they may not have syntactic support in it and the implementation may be cumbersome. You can write object-oriented x86 assembly code if you are sufficiently committed (or insane enough) just as you could with C. In fact, the first implementations of C++ were preprocessors that compiled your C++ code into C (and the mangled symbol names made debugging a lot more fun).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.