【读书笔记】10x程序员工作法


理论

基本原则

1. 以终为始,确定好真实目标

最佳实践
  • DoD,确定好完成的定义,减少团队内部的理解不一致。
  • 用户故事,细化出有价值的需求。
  • 持续集成,通过尽早集成,减少改动量,降低集成的难度。
  • 精益创业,减少过度开发不确定性产品带来的浪费。
  • 迭代 0,在项目开始之前,做好一些基础准备。
  • 计划倒排,先确定时间,再看功能是不是需要砍掉一些,人力是不是需要补充一些、
思想细节
  • 任何事物都要经过两次创造:
    • 一次是在头脑中的创造,也就是智力上的或者第一次创造(Mental/First Creation),
    • 然后才是付诸实践,也就是实际的构建或第二次创造(Physical/Second Creation)。
  • 在更大的上下文内发现自己的“终”。
  • 通过推演,找到通往“终”的路径。
  • 用可度量的“数字”定义自己的“终”。
实战指南
  • 遇到事情,倒着想。
  • 在做任何事之前,先定义完成的标准。
  • 尽早提交代码去集成。
  • 默认所有需求都不做,直到弄清楚为什么要做这件事。
  • 扩大自己工作的上下文,别把自己局限在一个“程序员”的角色上。
  • 在动手做一件事之前,先推演一番。
  • 问一下自己,我的工作是不是可以用数字衡量。
  • 设计你的迭代 0 清单,给自己的项目做体检。

2. 任务分解,找到实施路径

[[任务分解指北]]

3. 沟通反馈,解决与人打交道的问题

4. 自动化,解决于机器打交道的问题

DOD

DOD: Definition of Done ,其本质就是完成的 checkList

TDD

TDD: Test-Driven Development,在明确要开发某个功能后,在开发功能代码之前,先编写测试代码,然后编写功能代码并用测试代码进行验证,如此循环直到完成全部功能的开发。

[[向上管理]]

自动化

开发必须纳入自动化的部分

  • 持续交付
  • 验收测试

SOLID 原则

  • 单一职责原则(Single responsibility principle,SRP)。
  • 开放封闭原则(Open–closed principle,OCP)。
  • Liskov 替换原则(Liskov substitution principle,LSP)。
  • 接口隔离原则(Interface segregation principle,ISP)。
  • 依赖倒置原则(Dependency inversion principle,DIP)。

具体实践

需求开发

需求澄清

请与产品/需求方对齐下列问题:

  • [ ] 这个需求最终的效果是什么 ?用户的反馈收集过了吗?有具体的指标和测试吗?
  • [ ] 什么用户会使用这个特性?什么场景会使用这个特性?用户会如何使用这个特性?
  • [ ] 这个特性上线后如何衡量其有效性?
  • [ ] 是否可以通过别的方式达到这个特性,而不是必须按现有方案实现?

需求澄清的细节参考[[需求澄清指北]]

完成这些问题之后,输出一份 DOD,用户故事

DOD 的编写可以参考[[DOD 最佳实践]]

用户故事的编写可以参考 [[用户故事 编写细则]]

路径推演

开发(build)-测量(measure)- 认知(learn)

在做事之前先分出几个阶段,并做好每个阶段的 checkList:

  1. 需求开发
  2. 验收测试
  3. 版本发布:版本发布 checkList

版本发布 checkList 的编写可以参考 [[版本发布 checkList 指北]]

任务分解

动手做一个工作之前,请先对它进行细粒度的任务分解(最好是立刻就可以停下来的那种)。

任务分解的关键在于:小。小到什么程度呢?有时甚至可以小到你可能认为这件事不值得成为一件独立的事。比如升级一个依赖的版本,做一次变量改名。

对于开发者

  1. 这个需求的影响范围?
  2. 这个需求的模型?
  3. 潜在的风险?出现问题后如何及时挽回?
  4. 流程图?
    1. 功能流程图?
    2. 数据流图?
    3. 上线流程?
  5. FAQ?

具体的开发顺序为:

  1. 编写流程图
  2. 编写 FAQ
  3. 编写部署流程
  4. 开发代码
  5. 验收
  6. 部署

编码实践

设计

工程实践


如果本文帮助到了你,帮我点个广告可以咩(o′┏▽┓`o)


评论
  目录