02 | 架构设计的历史背景

💡 原文中文,约1000字,阅读约需3分钟。
📝

内容提要

文章梳理了软件架构设计的历史背景:机器语言难写难改;汇编语言面向机器,不同CPU需分别实现;高级语言让程序员专注业务,一次编写多处编译运行;结构化程序设计提出模块概念以缓解软件危机;面向对象编程创造对象概念以应对软件扩展难题;20世纪90年代软件架构流行,提出组件概念。文章小结指出,模块、对象、组件本质上都是对达到一定规模的软件进行拆分,且随复杂度增加,拆分粒度越来越粗、层次越来越高。

🔎

延伸解读

从语言到架构:抽象层次的持续上移

文章按时间线展示了编程抽象从机器语言、汇编、高级语言,到模块、对象、组件的演进。每一步都在把底层细节隐藏起来,让开发者更关注业务或系统组织。这提示读者:架构设计并非凭空出现,而是软件规模扩大后,抽象层次继续上移的自然结果。理解这条线索,有助于把具体架构概念放回历史中看待。

两次软件危机指向不同问题

文中提到20世纪60年代的软件危机主要体现为规模与复杂度增加、质量低下和项目延期,结构化程序设计以模块化来缓解;80年代的第二次软件危机则聚焦于软件扩展变得非常复杂,面向对象以对象概念应对。两者并非简单重复,而是问题重心从“能否控制复杂度”转向“能否灵活扩展”,这解释了为何后续架构会强调组件与系统组织。

架构问题为何先在大厂显现

文章指出,大厂软件系统规模较大,才会面临系统架构问题,并列出耦合严重、修改扩展困难、逻辑复杂难排查等现象。这并非说小系统不需要设计,而是说明架构关注点通常在系统由许多部分组成后才突出。读者可据此判断:当项目规模、参与人数和耦合关系上升时,才更需要把系统组织作为独立问题来对待。

拆分粒度变粗,但问题并未消失

小结强调模块、对象、组件本质上都是对达到一定规模的软件进行拆分,差别在于复杂度增加后拆分粒度越来越粗、层次越来越高。这提醒读者不要把这些概念当成互斥的新旧替代品,而应看作不同层次的拆分手段。实际理解架构时,关键不是记住名词,而是看清当前系统规模下,哪种拆分层次更能应对耦合与扩展难题。

❓

Q&A

软件架构设计是在什么背景下流行起来的?

软件架构在20世纪90年代开始流行,主要原因是随着软件系统规模增加,算法和数据结构不再构成主要设计问题,而系统由许多部分组成时,整个系统的组织(即软件架构)导致了一系列新的设计问题。大厂开发的软件系统规模较大,才会面临架构问题。

高级语言相比汇编语言解决了什么问题?

高级语言让程序员不需要关注机器底层的低级结构和逻辑,只需关注具体的问题和业务。通过编译程序,高级语言可以被编译为适合不同CPU指令的机器语言,程序员写一次程序就可以在多个不同的机器上编译运行,无须根据不同的机器指令重写整个程序。

结构化程序设计是在什么背景下提出的?

结构化程序设计于20世纪60年代提出,背景是软件危机:软件规模和复杂度增加,软件质量低下,项目无法如期完成,事故频发(如美国水手一号火箭发射失败、IBM System/360操作系统开发困境)。1968年召开会议提出软件工程,结构化编程创造模块概念,一定程度上缓解但无法根除软件危机。

面向对象编程为什么会出现?

面向对象编程于20世纪80年代出现,背景是第二次软件危机:软件的扩展变得非常复杂。面向对象思想流行,创造了对象概念,代表性语言有C++、Java、C#。

模块、对象、组件之间有什么本质联系?

模块、对象、组件本质上都是对达到一定规模的软件进行拆分,差别在于随着软件复杂度不断增加,拆分的粒度越来越粗,拆分的层次越来越高。

大厂为什么更早面临软件架构问题?

大厂开发的软件系统具有较大规模,而较大规模的软件系统才会面临软件系统架构问题。规模庞大导致内部耦合严重、开发效率低;耦合严重导致牵一发动全身,后续修改和扩展困难;系统逻辑复杂,容易出问题且难以排查修复。

🏷️

标签

➡️

继续阅读