“There are no shortcuts in evolution.“- Louis Brandeis
Most of the software systems that have been built so far are not intelligent. They have a static behavior as a result of a static implementation. No matter how complex the logic is, such a software system cannot really be considered intelligent since it’s behavior, even if complex, is still static and limited. The system doesn’t learn.
Paul is a programmer. He has over 10 years of professional experience. During this whole time Paul has been building an impressive technical culture that covers a large number of principles, patterns, practices and technologies and it’s anything but superficial. Actually Paul has been enjoying programming as a true hobby since he was fourteen. Still, there’s something else that makes Paul a consummate professional: his attitude.
“The universe is built on a plan the profound symmetry of which is somehow present in the inner structure of our intellect.” – Paul Valery
When it comes to thinking about the structural characteristics of a software system, a common tendency is to separate architecture from design. Architecture is considered concerned with the significant part of a software system while design concerned with the rest of the structural elements. E.g., some consider the perception of the layers as being architecture while the objects structure that would go inside every layer as being just design.
What is architecture?
Well, first of all, in software context, the word is a metaphor.
A figure of speech in which a term or phrase is applied to something to which it is not literally applicable in order to suggest a resemblance.
Obviously the suggested resemblance is to the buildings architecture.
So a better question would be:
To what concepts is the metaphor applied?
There are probably many but seems that the outstanding ones are the following three:
1. Culture – The domain of interest and the set of knowledge for a particular person or group.
2. Process – The process/activity of defining the structure of a software system
3. Characteristic – A structural characteristic of a software system.