写点什么

小岑的架构学习笔记 - 架构设计的历史背景

发布于: 2020 年 05 月 21 日

最近在学习极客时间《从 0 到 1 学架构》,记一些笔记。


在上一篇《架构是什么?》记录了架构和一些常用名字的一些基础概念。


这一章主要是学习架构设计的历史背景。


软件开发进化的历史


软件开发语言的进化历史


机器语言


最早的软化使用的是“机器语言”,使用单纯的 0 和 1 来写代码,使用 0 和 1 的组合表示不同的指令,让计算机去执行程序,类似于这种。


101100000000000000000011000001010000000000110000001011010000000000000101
复制代码

而且写这种程序的时候,不小心哪个地方写错了,估计眼睛都得看花了。



最早的时候都是将 0,1 的表示打在纸带上,让计算机去执行,一个不小心打错了,整个估计得重来,程序员的心理阴影面积要多大得多大。


汇编语言


为了解决机器语言编写、阅读、修改复杂的问题,汇编语言就出现了,有一些助记符代替机器指令的操作码,用地址符号或者标号代替指令或操作数的地址。


例如,为了完成“将寄存器 BX 的内容送到 AX 中”的简单操作,汇编语言和机器语言分别如下。


机器语言:1000100111011000汇编语言:mov ax,bx
复制代码


相对而言,汇编语言比机器语言会更好懂一些,虽然仍需要了解计算机底层的知识,比如 CPU 指令、寄存器等,但相比机器语言,已经抽象了一个层次。


但由于汇编语言因为不同 CPU 下的指令集不同,代码不能够复用,而且仍然需要关注计算机底层知识,因此,还需要进一步抽象。


高级语言


高级语言想必大家都很熟悉了,比如 LISP,Python,Java,C,C++等,让程序员可以不需要关注底层的细节,专注于自身的问题和实现即可,又相比汇编语言抽象了一个层次。


并且通过编译程序,可以实现同样的一份代码,可以在不同的机器上编译运行,不需要根据不同的机器指令,重写程序。


小结


总体来看,软件开发语言进化的历史,是让开发者更加少的关注和自身要做的事情不相关的细节。


软件开发方式的进化历史


作者在原文中提到的 GOTO 等,离我太过于遥远,我最早接触的就是结构化程序设计。


在结构化程序设计中,引入了模块化的指导思想,将变化点进行隔离,将软件的复杂度控制在一定的范围内。


但随着业务需求越来越复杂,软件的扩展变得更加困难,因此面向对象的编程思想又开始流行起来,现在面向领域驱动变成,慢慢从纸上谈兵,开始在国内的软件开发中大行其道。


软件架构的历史背景


软件架构的概念,根据《软件架构介绍》(An Introduction to Software Architecture)的描述,指的是:


随着软件系统规模的增加,计算相关的算法和数据结构不再构成主要的设计问题;当系统由许多部分组成时,整个系统的组织,也就是所说的“软件架构”,导致了一系列新的设计问题。


这段话解释了为什么软件架构往往现在大公司逐步流行起来,因为只有大公司才有较大的软件规模,规模较大的软件系统才有可能遇到各种问题:


  1. 因为规模大了,内部耦合随着时间长,可能会比较严重,开发效率受到制衡。

  2. 因为耦合重,改某个功能可能影响很多的模块,扩展性不足

  3. 逻辑复杂,排查和修复难度增加。


结构化编程 -> 面向对象编程 -> 软件架构,我理解都是对一定规模软件的拆分,结构化重视在模块层面,面向对象编程更注重在对象划分,领域划分层面,软件架构更多在系统层面如何去规划,拆分的粒度越来越粗,层次也越来越高。


总结


结构化编程,面向对象编程,架构设计 都是软件领域开发的一种方法,不同规模的需求采用不同的方法。


用户头像

机会是留给有所准备的人 2017.10.17 加入

可以叫我伦老师。 美团点评 Java后端工程师,90后程序员,公众号 程序员小岑成长记

评论

发布
暂无评论
小岑的架构学习笔记-架构设计的历史背景