小岑的架构学习笔记 - 架构设计的历史背景
最近在学习极客时间《从 0 到 1 学架构》,记一些笔记。
在上一篇《架构是什么?》记录了架构和一些常用名字的一些基础概念。
这一章主要是学习架构设计的历史背景。
软件开发进化的历史
软件开发语言的进化历史
机器语言
最早的软化使用的是“机器语言”,使用单纯的 0 和 1 来写代码,使用 0 和 1 的组合表示不同的指令,让计算机去执行程序,类似于这种。
而且写这种程序的时候,不小心哪个地方写错了,估计眼睛都得看花了。
最早的时候都是将 0,1 的表示打在纸带上,让计算机去执行,一个不小心打错了,整个估计得重来,程序员的心理阴影面积要多大得多大。
汇编语言
为了解决机器语言编写、阅读、修改复杂的问题,汇编语言就出现了,有一些助记符代替机器指令的操作码,用地址符号或者标号代替指令或操作数的地址。
例如,为了完成“将寄存器 BX 的内容送到 AX 中”的简单操作,汇编语言和机器语言分别如下。
相对而言,汇编语言比机器语言会更好懂一些,虽然仍需要了解计算机底层的知识,比如 CPU 指令、寄存器等,但相比机器语言,已经抽象了一个层次。
但由于汇编语言因为不同 CPU 下的指令集不同,代码不能够复用,而且仍然需要关注计算机底层知识,因此,还需要进一步抽象。
高级语言
高级语言想必大家都很熟悉了,比如 LISP,Python,Java,C,C++等,让程序员可以不需要关注底层的细节,专注于自身的问题和实现即可,又相比汇编语言抽象了一个层次。
并且通过编译程序,可以实现同样的一份代码,可以在不同的机器上编译运行,不需要根据不同的机器指令,重写程序。
小结
总体来看,软件开发语言进化的历史,是让开发者更加少的关注和自身要做的事情不相关的细节。
软件开发方式的进化历史
作者在原文中提到的 GOTO 等,离我太过于遥远,我最早接触的就是结构化程序设计。
在结构化程序设计中,引入了模块化的指导思想,将变化点进行隔离,将软件的复杂度控制在一定的范围内。
但随着业务需求越来越复杂,软件的扩展变得更加困难,因此面向对象的编程思想又开始流行起来,现在面向领域驱动变成,慢慢从纸上谈兵,开始在国内的软件开发中大行其道。
软件架构的历史背景
软件架构的概念,根据《软件架构介绍》(An Introduction to Software Architecture)的描述,指的是:
随着软件系统规模的增加,计算相关的算法和数据结构不再构成主要的设计问题;当系统由许多部分组成时,整个系统的组织,也就是所说的“软件架构”,导致了一系列新的设计问题。
这段话解释了为什么软件架构往往现在大公司逐步流行起来,因为只有大公司才有较大的软件规模,规模较大的软件系统才有可能遇到各种问题:
因为规模大了,内部耦合随着时间长,可能会比较严重,开发效率受到制衡。
因为耦合重,改某个功能可能影响很多的模块,扩展性不足
逻辑复杂,排查和修复难度增加。
结构化编程 -> 面向对象编程 -> 软件架构,我理解都是对一定规模软件的拆分,结构化重视在模块层面,面向对象编程更注重在对象划分,领域划分层面,软件架构更多在系统层面如何去规划,拆分的粒度越来越粗,层次也越来越高。
总结
结构化编程,面向对象编程,架构设计 都是软件领域开发的一种方法,不同规模的需求采用不同的方法。
评论