前言
我的目标是成为一名专业的架构师,故此,按照《代码整洁之道》,《职业素养》,《架构整洁之道》 路径来学习补充自己。很感激bob 大叔为这条职业路线记录下了经典的书籍,我必将得知此道必躬行
书的结构
书的前言&序
- 程序员可以分三个层次 -- 陈皓 @左耳朵耗子
- 普通程序员: 编写代码的人,可以让程序跑起来
- 工程师:使用各种手段和技术不断提高代码的可读性、可扩展性、可维护性和重用性,有工匠精神,有修养的程序员
- 架构师: 平衡各种成本采用适合场景的最优解决方案之人
- 无论是微观世界,还是宏观层面的架构,无论是三种编程范式还是微服务架构,它们都在解决一个问题-- 分离控制和逻辑。所谓的控制就是对程序流转的与业务无关的代码或系统控制(如:多线程,异步,服务发现,部署,弹性伸缩等),所谓逻辑则是实实在在的业务逻辑,是解决用户问题的逻辑。控制和逻辑构成了整体的软件复杂度,有效地分离控制和逻辑会让你的系统得到最大的简化
- 程序= 算法+数据结构, 算法= 控制 + 逻辑
- 架构: 用最小的人力成本来满足构建和维护系统需求
- 软件架构学关注的一个重点是组织结构,要特别注意软件项目是具有递归和分形的特点
- 软件架构是系统设计过程中的重要设计决定的集合,可以通过变更成本来衡量每个设计决定的重要程度
- 走快的唯一方法是先走好
设计与架构究竟是什么
- 设计与架构没有区别,底层设计信息喝顶层架构设计共同组成了整个房屋的架构文档
- 软件架构的终极目的是,用最小的人力成本来满足构建和维护该系统的需求
- 胡乱编写代码的工作速度其实必循规蹈矩更慢
- 要想跑得快,先要跑得稳,TDD
- 要想提高自己软件架构得质量,就需先知道什么是优秀的软件架构。而为了在系统构建过程中采用好的设计和架构以便减少构建成本,提高生产力,又需要先了解系统架构中的各种属性与成本和生产力的关系
两个价值维度
- 行为价值: 软件系统行为满足需求文档
- 架构价值: software vs hardware ,软件的灵活性
- 软件应该容易被修改。变更实施的难度应该和变更的范畴成等比关系,而与变更的具体形状无关
- 行为价值(满足需求) 属于紧急但不重要,架构价值(灵活性) 属于重要但不紧急
- 平衡系统架构的重要性与功能的紧急程度这件事,事软件研发人员自己的职责
- 研发团队必须从公司利益出发与其他部门抗争,这和管理团队的工作一样,甚至市场团队、销售团队、运营团队都是这样。公司内部的抗争本来就是无止境的
- 软件架构师必须创建出一个可以让功能实现起来更容易、修改起来更简单、扩展起来更轻松的软件架构
编程范式
- 结构化编程 对控制权的直接转移进行了限制和规范 (1968 Dijkstra)
- 面向对象编程 对程序控制权的间接转移进行了限制和规范 (1966 Nygaard&johan dahl)
- 函数式编程对程序中的赋值进行了限制和规范 (1936 )
- 多态是我们跨越边界的手段,函数式编程是我们规范和限制数据存放位置与访问权限的手段,结构化编程则是各模块的算法实现基础
- 软件架构三大关注的点:功能性,组件独立性以及数据管理
- 数学是要将可证明的结论证明,科学研究则是要将可证明的结论证伪
- 结构化编程范式促使我们先将一段程序递归降解为一系列可证明的小函数,然后再编写相关的测试来试图证明这些函数是错误的,如果这些测试无法证伪这些函数,那么我们就可以认为这些函数足够正确的,进而推到整个程序是正确的