ObsidianNotes/软件工程.md

64 lines
2.3 KiB
Markdown

## 图灵
- 图灵机= 卡片条 + 读写头
- 卡片内的东西: 数据or指令
- 数据与指令可以分开储存, 也可以合在一起储存, 但是他们是不同类型的东西
- 分开能让人更容易理解
## Lambda 演算法
- Lambda 演算法是把 函数 作为了元数据, 通过函数直接的关系代表数据和指令
## 元细胞自动机
- 元细胞自动机是把 元细胞 作为了元数据, 设定了默认的四种基于周围网格的变化规则, 实现的一种计算机范式, 可以主要是实现了非图灵非Lambda演算的新做法, 主要可以应用在深度学习和流体模拟这种上面, 卷积的算法原理, 但是无法编程主打的是一种炼丹的方式实现
## 软件工程解耦合
- 模块化 (功能之间解耦合)(菜鸟负责简单模块, 高手负责复杂模块)
- 高内聚
- 低耦合
- 单一职责
- 分层化(需求与实现解耦合) (无论高手和菜鸟, 都是负责一整层, 或者把一整层拆小再划分, 对能力要求不高. 比如前后端开发)
- 底层功能接口需要保证完备, 方便上层调用实现
- 举例
- 底层: 操作系统
- 中高层: 计算机软件
- 用户输入=>操作系统回调=>软件=>操作系统API=>硬件
- 模式化(历史与未来解耦合)(按照这些范式去做, 能为未来可能的需求变更做准备)
- 设计模式
- 指令式编程+面向对象式编程+函数式编程
- 编程原则
- 面向对象S.O.L.I.D 原则
- S 单一功能原则
- O 开放封闭原则
- L 里式替换原则
- I 接口隔离原则
- D 依赖反转原则
- 数据库设计 CRUD 原则
- 增删改查
## 软件开发瀑布流程(开发过程过长)
![[Dev.png]]
### 软件开发三层模型
- V 表现层 (前端, 用户直观看到的)
- A 控制层/应用层 (后端, 业务操作,逻辑判断)
- D 数据层 (数据库, 增删改查)
### 领域驱动设计
以不变的业务领域作为核心(中台), 进行上下的领域设计
### 敏捷开发
![[dev2.png]]
小步快跑, 及时反馈, 快速进步
敏捷开发, 早点投入市场, 测试
市场反响不错时, 重构
><敏捷革命> <精益创业> <凤凰项目>
>scrum , 精益, DevOps
### 开源
开源举例: Linux
追求性能高效, 放弃解耦合
开放多人合作, 多人调试优化
## Reference
https://www.bilibili.com/video/BV1h3411G741/?spm_id_from=333.788