跳转到内容

工程化取舍

  • 识别「完全没有工程意识」和「过度工程化」两种错误
  • 用一条标准判断工程化程度是否合适
  • 列出适合简化与值得补结构的两类场景

学生阶段常见的两个错误是「完全没有工程意识」和「过度工程化」。真正实用的工程化判断标准只有一条:这个结构是否降低了当前团队的维护成本。

以下情况适合继续简化:

  • 一个人完成的小项目
  • 一周内就会停止维护的课程实验
  • 没有后续协作或展示需求的临时工具

以下情况值得补工程结构:

  • 多人协作或课程评审
  • 后续还要继续扩展功能
  • 希望把它放进作品集或开源展示

换句话说,工程化用来帮你减少重复投入,把时间留给真正重要的事情。每加一个工具、一层抽象之前,先问一句:它现在就在降低维护成本吗?如果答案是「以后可能有用」,那大概率属于过度设计。

「维护成本」听起来抽象,实际上可以从三个方向具体感受:理解成本、修改成本、交接成本。理解成本是别人读懂这份代码要花多久;修改成本是加一个功能或改一处逻辑要动多少地方;交接成本是另一位同学接手时,需要多少说明才能继续。任何工程结构只要在其中一个方向上带来明显节省,就值得保留;三个方向都没有变化时,它通常只是在增加工作量。

过度设计有一个典型特征:为「以后可能用到」的场景提前预留结构。这类预留建立在假设之上,而假设中的场景多数不会出现。更稳妥的次序是先按当前需求做出最简版本,等真实需求出现再补结构,届时你对需求的理解更完整,补上的结构也更贴合实际。Wikipedia 的 You aren’t gonna need it 条目把这一原则概括为:需求出现之前,不要为它编写代码。

把取舍过程记录下来也有价值。做完取舍表后,在每个保留或砍掉的条目旁补一句当时的理由,包括被放弃的方案。这样过一段时间再看,你能快速回忆起当时的判断,课程评审时也能解释为什么某些结构没有出现。记录本身几乎不增加维护成本,却能避免同一问题被反复讨论。

先自己回答,再看答案:

  1. 判断工程化程度是否合适的唯一标准是什么?
  2. 「一周内停止维护的课程实验」更适合简化还是补结构?
  3. 为什么「以后可能有用」不是加功能的充分理由?
参考答案
  1. 是否降低了当前团队的维护成本。
  2. 更适合简化,因为投入的结构无法在短期内回收。
  3. 为「可能有用」投入的结构,多数最终用不上,反而增加维护负担。
  • 两个极端:完全没有工程意识 vs 过度工程化
  • 判断标准:是否降低当前团队的维护成本
  • 简化与补结构都服务于「减少重复投入」
工程化取舍小测
x
1 / 3

工程化最核心的价值通常是?