Understanding Software Architecture: History, Concepts, and Definitions
This article explores the evolution of software development from machine code to high‑level languages, explains the two software crises, and defines key architectural concepts such as systems, subsystems, modules, components, frameworks, and the role of software architecture in managing complexity.
In software development, programmers often aspire to become qualified architects, but the path is fraught with challenges. This article introduces the fundamentals of software architecture and why every developer implicitly practices it.
Two must‑read articles are recommended: Who Says Architecture Has No Future? and How He Became a Chief Architect .
Architecture Background
To understand any concept deeply, we first examine its historical background and driving forces. We therefore review the evolution of software development and the emergence of software architecture.
1. Machine Language
The earliest software was written in machine language, using binary codes (0 and 1) that the CPU can directly execute.
Example: to move the content of register BX to AX, the machine code is:
1000100111011000Machine code is notoriously hard to write, read, and modify.
Too hard to write, too hard to read, too hard to change!
2. Assembly Language
Assembly language was created to alleviate the difficulties of machine code. It replaces binary opcodes with mnemonic symbols and uses labels for addresses.
Example: the same operation in assembly is:
mov ax,bxAlthough clearer than raw binary, assembly is still machine‑oriented and must be tailored to each CPU architecture.
Assembly requires separate code for different CPU instruction sets.
3. High‑Level Language
High‑level languages abstract away hardware details, allowing developers to focus on business logic.
Example: the addition 4 + 6 in Lisp is expressed as:
(+ 4 6)Compiled high‑level code can be translated to machine code for various CPUs, enabling “write once, run anywhere.”
4. Two Software Crises
First Software Crisis & Structured Programming
As software grew in size and complexity, quality deteriorated, projects overrunned budgets, and failures occurred (e.g., the 1963 Sailor‑One rocket crash caused by a single FORTRAN error). The response was the emergence of software engineering and structured programming, which emphasized top‑down design, stepwise refinement, and modularization.
Structured programming still follows a procedural mindset but controls complexity through hierarchical decomposition.
Second Software Crisis & Object‑Oriented Programming
Hardware advances and increasingly complex business requirements triggered a second crisis: software productivity lagged behind hardware capabilities, making extensibility a major pain point.
The first crisis stemmed from tangled logic; the second crisis stems from tangled extensibility.
Object‑oriented programming mitigated some extensibility issues but, like its predecessors, proved not to be a silver bullet.
5. Emergence of Software Architecture
Unlike previous methods that addressed specific problems, software architecture arose to handle the organizational challenges of large systems. Typical concerns include:
Massive system scale leading to severe internal coupling and low development efficiency. High coupling causing ripple effects when making changes, hindering modification and extension. Complex system logic that is error‑prone and difficult to debug.
Architecture introduced the concepts of modules, objects, and components, each representing a higher level of abstraction as software complexity increased.
What Is Architecture?
Architecture is the top‑level structure of a software system. It defines the individual “entities” (subsystems, modules, components) and the rules governing their interaction.
1. System and Subsystem
A system is a collection of related entities that work together according to defined rules to achieve capabilities beyond the sum of their parts. A subsystem is simply a system that exists as part of a larger system.
Example: WeChat is a system containing subsystems such as chat, login, payment, and Moments; Moments itself contains subsystems like posts, comments, and likes.
2. Module and Component
Modules are logical partitions created to separate responsibilities; components are physical units designed for reuse. A component (or “零件”) is an independent, replaceable piece of the system.
3. Framework and Architecture
A framework defines conventions and standards, while architecture defines the structural layout. For instance, “the project uses an MVC architecture” describes structure, whereas “the project adopts the SSH framework” describes the governing conventions.
4. Redefining Architecture
Software architecture is the top‑level structure of a software system.
It identifies the constituent entities, the rules of their operation, and the collaboration mechanisms among them.
Summary
Architecture is a solution to the complexity of software systems. It involves making trade‑offs based on constraints such as team experience, cost, resources, time, and business stage, ultimately delivering a suitable structural design for the target system.
Author: 猿码架构
Source: https://www.jianshu.com/p/312af3e8b94a
Architects' Tech Alliance
Sharing project experiences, insights into cutting-edge architectures, focusing on cloud computing, microservices, big data, hyper-convergence, storage, data protection, artificial intelligence, industry practices and solutions.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.