02 | 架构设计的历史背景 - 图1

    • 架构设计的历史背景
      • 机器语言
        • 1940年之前
        • 难写,难读,难改
      • 汇编语言
        • 20世纪40年代
        • 面向机器
        • 不同CPU汇编指令和结构不同,同一程序对于不同CPU要做不同的实现
      • 高级语言
        • 20世纪50年代
        • Fortran、LISP、Cobol
        • 程序员不需要关注机器底层的低级结构和逻辑,而只要关注具体的问题和业务即可。
        • 通过编译程序的处理,高级语言可以被编译为适合不同CPU指令的机器语言。程序员只要写一次程序,就可以在多个不同的机器上编译运行,无须根据不同的机器指令重写整个程序。
      • 结构化程序设计
        • 20世纪60年代
        • 引出结构化编程,创造模块概念
        • 软件危机:软件规模和复杂度增加,软件质量低下,项目无法如期完成,事故频发
          • 美国水手一号火箭发射失败事故
          • IBM的 System/360 操作系统开发,《人月神话》
          • 1968 召开会议,提出软件工程
        • 无法根除软件危机,一定程度上缓解软件危机
        • Pascal
        • 主要特点是抛弃goto语句,采取“自顶向下、逐步细化、模块化”的指导思想。
      • 面向对象
        • 20世纪80年代
        • 引出面向对象编程,创造对象概念
        • 第二次软件危机
          • 软件的扩展变得非常复杂
        • 面向对象思想流行
        • C++、Java、C#
      • 软件架构的历史背景
        • 20世纪90年代
        • 软件架构流行,创造组件概念
        • 《软件架构介绍》
          • 随着软件系统规模的增加,计算相关的算法和数据结构不再构成主要的设计问题;当系统由许多部分组成时,整个系统的组织,也就是所说的“软件架构”,导致了一系列新的设计问题。
        • 出现在大厂的原因
          • 大厂开发的软件系统具有较大规模
          • 较大规模的软件系统才会面临软件系统架构问题
            • 系统规模庞大,内部耦合严重,开发效率低;
            • 系统耦合严重,牵一发动全身,后续修改和扩展困难;
            • 系统逻辑复杂,容易出问题,出问题后很难排查和修复;
      • 小结
        • 模块、对象、组件本质上是对达到一定规模的软件进行拆分,差别在于随着软件的复杂度不断增加,拆分的粒度越来越粗,拆分的层次越来越高。