Software architecture#

Good architecture is not just about structure - it’s about intention. In code as in buildings, clarity and purpose leave the longest legacy
— Louis Kahn
Slides/PDF#
Monolithic, machine-oriented software before 1950#
Problem: The problem arose that programs for new hardware typically had to be completely rewritten or heavily modified.
Division into Operating Systems and Monolithic Software from around 1960#
Problem: The programs are very hard to write because they require a very good understanding of the hardware, the drivers, and the operating system functions. They are very low-level and offer little abstraction.
Development of higher-level programming languages from around 1970#
Problem: When operating systems change, programs do not run and must either be recompiled or rewritten.
Virtualization of Monolithic Software Starting Around 1995#
This also made it easier to develop new operating systems, which is why Android and iOS for mobile devices emerged, devices that rely heavily on virtualization.
Problem: With the Internet, the need arose not only to share text and images, but also to dynamically adapt content on web pages and run smaller (to larger) programs. To access the data from different devices, a central point is needed to store the data and perform more complex computations.
Distributed, Virtualized Software on the Internet from around 2000#
This architecture separates the frontend applications from the backend servers. The frontend applications are responsible for presenting content and interacting with users, while the backend servers provide the web pages and manage long-term data in databases. This separation makes it possible for frontend applications (websites or apps) to visualize the content and interact with users without needing direct access to the databases.
Problem: On the Internet, many users often access the same servers (pages) simultaneously. To avoid overloading them, ways to duplicate these on demand quickly were needed. With the development of mobile devices (smartphones, tablets, etc.), there were increasingly many relatively small specialized applications (apps). Here the demand for computing capacity can grow dynamically and quickly, and dynamically scalable servers were also needed.
Distributed, Virtualized Apps and Cloud Software from around 2010#
Problem: The resulting modern distributed applications exhibit very high complexity. There are many specialized programming languages and sub-architectures to solve individual problems within them.
Classification of Programming Languages by Historical Usage#
Programming languages have evolved over time in line with architectures. Consequently, the popular programming languages have changed over the years.