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