课程来自于陶文,课程PPT知乎专栏:zhuanlan.zhihu.com/p/34982747
因公司资源提供有幸能够视频学习陶大的课程,做笔记便于复习。
总述
读代码实际是大脑解释和模拟执行代码的过程,因此根据大脑擅长和不擅长的原理来提高代码的可读性。
大脑擅长的事情:动物指令集
- 对象识别
- 空间分解
- 时序预测
- 时序记忆
大脑不擅长的事情
- 无法映射到现实生活经验的抽象概念
- 冗长的侦探推理
- 跟踪多个同时变化的过程
方法一:Align Models 对应心智模型
数据和算法模型应和心智模型对应; 语言是心智模型的外在表现。
1. 使用有意义的函数名
“有意义”:和心智模型对应
业务概念命名一致(理解产品语言)
2. 按心智模型分解代码
- 按空间分解(对象与对象间的分离)
- 按时间分解(一步做完做下一步)
- 按层次分解(业务、通用分离)
3. 注释不应重复代码本身的工作
注释帮助代码映射到心智模型
注释应该关注 why 而不是 what/how,或是解释某种映射关系
如:提供代码的时空复杂度/选择模型的原因等
方法二:Shorten Process 缩短探索长度
不要一口气让大脑跟踪过长的流程。
1. 引入变量
2. 拆分函数
3. Early Return
满足某些条件时提早结束,避免大if..else统治整个函数
4. 缩小变量的作用域
使用参数进行状态传递(函数式编程)
不使用全局变量修改状态,而使用参数
方法三:Isolate Process 流程间独立
相关联的逻辑才放在一起;
流程之间做分割,不同时描述多个流程的进度;
“高内聚低耦合”,知易行难。
“同时跟踪不同流程”的产生
- 本来就是同时发生 -> 逻辑必须合并到一个流程中
- 功能性需求和非功能性需求
- 正常流程和异常处理
- 由于效率
- 异步I/O -> 给各自一个线程
- 多线程
- 向量指令集 SIMD
- 由于功能 -> 逻辑必须合并到一个流程中
- 多个信息同时展示
- 并行业务流程
- 由于流程复用 -> 逻辑必须合并到一个流程中
- 版本差异
- 产品策略
有时候逻辑必须合并到一个流程中。 有时候适当的复制粘贴,来将混杂的流程拆分以增加可读性也是合理的。
提高信噪比:使用设计模式抽取流程中的职责
信噪比是相对概念,会随场景而变化。 设计模式:装饰器 / 策略 / 模板 / 适配器 / 状态
提高一个目标的信噪比,往往会以降低另一个目标的信噪比为代价。
总结
- 优先尝试给每个流程一个自己的函数,不合并
- 界面 -> 组件
- 订单 -> 单据,平行处理
- 用协程而不是回调处理I/O
- 不得不同时处理多个流程时
- 显式插入:策略 / 模板 / 适配器 / 状态 / 访问者 / 观察者
- 隐式插入:装饰器模式 / AOP(面向切面编程)