Skip to content

程序员工作法


软件行业里有一本名著《人月神话》,其中提到两个非常重要的概念:

  • 本质复杂度(Essential Complexity):解决一个问题时,无论怎么做都必须要做的事情
  • 偶然复杂度(Accident Complexity):因为选用的做事方法不当,从而导致要做更多的事情

作为一个程序员,我们常常会面临各种忙碌和加班的情况,这主要是由于偶然复杂度导致的情况。

为了减少偶然复杂度引发的问题,10X 程序员提出四个原则,来尽量减少偶然复杂度,帮助我们提高工作效率和解决问题:


1. 以始为终

在开始一个项目或者任务时,首先明确最终目标和需求,然后根据目标来规划和执行工作。这样可以避免在后期发现需求变化或方向错误而导致的重复工作。

思考框架:

帮助我们更清晰地认识自己要做的事情,并找到正确的方向:

  • Where are we? (我们现在在哪?)
  • Where are we going? (我们要到哪去?)
  • How can we get there? (我们如何到达那里?)

完成的定义(DoD):

以始为终,大家对"终"的定义不一样,开发中"完成"这个概念的理解可能因人而异:

  • PM 可能认为"完成"是指项目上线运行
  • 程序员可能认为"完成"是指功能代码编写完毕

采用 完成的定义(DoD,Definition of Done)

DoD 是一种明确的标准,用于定义什么是"完成"的状态。在指定 DoD 时,团队成员可以讨论和协商,以确保每个人对"完成" 的理解一致。这样可以减少误解和冲突,提高团队的协作效率。

扩展工作上下文

不要把自己限定在程序员的上下文里,当一个程序员安安静静地写代码。

我们总喜欢用技术去解决问题,但很多令人寝食难安的问题其实根本不是问题。我们可以是产品、用户、测试,尝试在不同的上下文里去思考问题会容易的多。


2. 任务分解

动手做一个工作之前,请先对它进行任务分解。

马斯克的任务分解案例

SpaceX 有个目标是送 100 万人上火星,这要增加一万万亿,马斯克想把人均费用降到 50 万美元,这相当于将原本需要的费用降低了 2 万倍。

分解策略:

  • 增加运载能力:将火星飞船的运载能力从目前的 5 人增加到 100 人
  • 提高效率:私营公司的效率更高,成本可以降到同行业的十分之一
  • 可重复使用的火箭:实现可重复使用的火箭,大大降低发射成本

开发实践

测试驱动开发(TDD):一边写测试,一边调整代码,测试通过后,要回到代码上,消除代码的坏味道。

开发前:想清楚再动手

  1. 在理解需求后,把它拆分为几个模块,记录在一个清单上
  2. 针对每个模块拆分为小任务
  3. 每个任务完成之后,代码都是可以提交的,把任务分解到很小,才有可能做到小步提交

示例:

  • 升级一次版本依赖
  • 做一次变量更名

好处:

  • 保证可以随时停下来,不会被任何外部因素所干扰
  • 更专注地关注每个任务的细节,避免漏洞和错误的处理
  • 在遇到新问题时,将问题记录在清单上,保证问题不会丢失

任务优先级管理

任务过多的情况:

  • 区分任务优先级,因为时间是有限的,有限的时间内你能完成工作的上限是一定的
  • 遵循 艾森豪威尔矩阵,将事情分为 重要和紧急 两个维度进行划分:
重要不重要
重要且紧急不重要且紧急
重要不紧急不重要不紧急

3. 沟通反馈

我们努力的学习各种知识,为的就是更好的理解这个世界的运作方式,而沟通反馈,就是我们与真实世界互动的最好方式。

真实世界不是以美好愿望驱动的,它有自己的运行规律。虽然我们生活在同一个世界中,但 每个人理解世界的方式确实是千差万别

  • 编写可维护的代码:减少团队成员对代码理解的差异

    写代码的目的是与人沟通,因为我们要在一个团队里协同工作

  • 多面对面沟通,少开会:凡是效果特别好的会议,基本都是用来做信息同步的

  • 接近用户:了解用户需求,多听取来自真实用户的声音

  • 尽早暴露问题遇到问题,最好的解决方案是尽早把问题暴露出来


4. 自动化

在开发过程中,尽可能的利用自动化工具和技术来减少重复性工作和人为错误。自动化可以提高工作效率,减少手动操作带来的问题。

最后更新时间: