1. 文档的价值:为什么嵌入式项目需要文档?文档的读者是谁?文档的ROI分析

说实话,我见过太多嵌入式工程师对文档的态度了——「代码就是最好的文档」。这话听着挺酷,但真到了项目出问题的时候,说这话的人往往是最先抓瞎的那个。

我自己也曾经是「文档无用论」的忠实拥护者。直到有一次,一个量产了半年的产品突然出现随机死机,我盯着自己三个月前写的代码,愣是看不懂当时为什么要用那个奇怪的DMA配置。嗯,那是我职业生涯最痛苦的一周。

1.1 为什么嵌入式项目需要文档?

嵌入式开发有个特点:硬件和软件绑得太紧了。你改一行代码,可能影响的是时序、功耗、甚至PCB布局。没有文档,你根本不知道当初的设计意图是什么。

我总结了几点核心原因:

  • 知识会遗忘——人的记忆是靠不住的。三个月前的设计决策,你现在可能还记得。三年后呢?
  • 人员会流动——项目做大了,总有人要离开。新人接手时,没有文档就是灾难。
  • 调试需要上下文——一个bug往往不是代码写错了,而是设计决策本身有问题。文档记录了决策过程。
  • 合规和认证——很多行业(汽车、医疗、航空)强制要求文档。没有文档,产品根本不能上市。

我的经验:有一次客户要求我们提供IEC 62304的文档,我们团队花了整整两周补文档。如果一开始就写好,最多两天的事。说白了,欠的债迟早要还。

1.2 文档的读者是谁?

很多人写文档时有个误区——觉得文档是写给「别人」看的。其实不对。文档的第一读者,就是你自己。

我习惯把读者分成三类:

读者类型 关注点 文档侧重点
你自己(三个月后) 当初为什么这么设计? 设计决策、约束条件、踩过的坑
团队同事 接口怎么用?模块怎么集成? API说明、数据结构、调用流程
测试/维护人员 怎么验证?怎么排查问题? 测试用例、边界条件、已知问题

你想想看,这三种读者的需求其实差别很大。给测试人员看设计决策,他嫌啰嗦;给自己看API说明,你又觉得太浅。所以文档一定要分层。

一个小技巧:我写文档时,会先假设读者是「三个月后的自己」。如果三个月后的我能看懂,那其他人基本也没问题。

1.3 文档的ROI分析

很多人觉得写文档浪费时间。我们来算一笔账。

假设一个嵌入式项目周期是6个月,团队5个人:

  • 不写文档:前期省了20%的时间,但后期调试、交接、维护要多花50%的时间。
  • 写文档:前期多花15%的时间,但后期效率提升30%以上。

我做过一个统计:

阶段 无文档 有文档 时间差
开发阶段 100% 115% +15%
调试阶段 100% 70% -30%
交接阶段 100% 40% -60%
维护阶段 100% 50% -50%

看到了吗?前期多花15%的时间,后期能省下30%-60%的时间。这还不算因为文档缺失导致的bug修复成本。

我曾经踩过的坑:有个项目,因为缺少中断优先级配置的文档,新来的同事改了一个看似无关的代码,结果导致系统响应延迟。排查了整整三天。如果当时有文档写明「这个中断优先级不能动,因为和看门狗共享了同一个优先级组」,三分钟就能解决问题。

所以,文档不是成本,是投资。而且回报率相当可观。

1.4 文档的「最小可行」原则

我不主张写那种几百页的「天书」。嵌入式项目节奏快,文档也要讲究效率。

我个人习惯遵循「最小可行文档」原则:

  • 必须写的:设计决策、接口定义、约束条件、已知问题
  • 建议写的:模块架构、数据流、测试用例
  • 可以省略的:显而易见的代码逻辑、重复的注释

说白了,文档的价值不在于「写了多少字」,而在于「解决了多少问题」。一份100字的文档,如果能避免一次重大bug,那它的价值就远超1000字的流水账。

我的建议:从今天开始,每个模块至少写三样东西:

  1. 这个模块是干什么的(一句话)
  2. 为什么这么设计(设计决策)
  3. 有什么坑要注意(避坑指南)

就这三样,能解决80%的文档问题。

嗯,文档这件事,说到底是对自己负责,也是对团队负责。别等到出了问题才后悔——我当年就是这么过来的。