ObsidianNotes/软件工程.md

2.4 KiB

图灵

  • 图灵机 = 卡片条 + 读写头
  • 卡片内的东西: 数据or指令
  • 数据与指令可以分开储存, 也可以合在一起储存, 但是他们是不同类型的东西
  • 分开能让人更容易理解

Lambda 演算法

  • Lambda 演算法是把 函数 作为了元数据, 通过函数直接的关系代表数据和指令

元细胞自动机

  • 元细胞自动机是把 元细胞 作为了元数据, 设定了默认的四种基于周围网格的变化规则, 实现的一种计算机范式, 可以主要是实现了非图灵非Lambda演算的新做法, 主要可以应用在深度学习和流体模拟这种上面, 卷积的算法原理, 但是无法编程主打的是一种炼丹的方式实现

软件工程解耦合

  • 模块化 (功能之间解耦合)(菜鸟负责简单模块, 高手负责复杂模块)
    • 高内聚
    • 低耦合
    • 单一职责
  • 分层化(需求与实现解耦合) (无论高手和菜鸟, 都是负责一整层, 或者把一整层拆小再划分, 对能力要求不高. 比如前后端开发)
    • 底层功能接口需要保证完备, 方便上层调用实现
    • 举例
      • 底层: 操作系统
      • 中高层: 计算机软件
      • 用户输入=>操作系统回调=>软件=>操作系统API=>硬件
  • 模式化(历史与未来解耦合)(按照这些范式去做, 能为未来可能的需求变更做准备)
    • 设计模式
    • 指令式编程+面向对象式编程+函数式编程
    • 编程原则
      • 面向对象S.O.L.I.D 原则
        • S 单一功能原则
        • O 开放封闭原则
        • L 里式替换原则
        • I 接口隔离原则
        • D 依赖反转原则
      • 数据库设计 CRUD 原则
        • 增删改查

软件开发瀑布流程(开发过程过长)

Dev

软件开发三层模型

  • V 表现层 (前端, 用户直观看到的)
  • A 控制层/应用层 (后端, 业务操作,逻辑判断)
  • D 数据层 (数据库, 增删改查)

领域驱动设计

以不变的业务领域作为核心(中台), 进行上下的领域设计

敏捷开发

dev2 小步快跑, 及时反馈, 快速进步

敏捷开发, 早点投入市场, 测试

市场反响不错时, 重构

<敏捷革命> <精益创业> <凤凰项目> scrum , 精益, DevOps

开源

开源举例: Linux

追求性能高效, 放弃解耦合

开放多人合作, 多人调试优化

Reference

https://www.bilibili.com/video/BV1h3411G741/?spm_id_from=333.788