Anthony Smith
Anthony Smith
Venture capitalist and startup mentor for over a decade.
哥们,这问题太经典了,简直是每个工程师的“灵魂拷问”。在办公室里,因为文档吵起来的架,比因为代码风格吵起来的只多不少。
说实话,这事儿没有一个“写XX页”或者“XX字”的标准答案。如果有人跟你说“每个函数都要写注释”,你直接拉黑他就行了,尤其是在创业公司,这么干项目早就黄了。
关键不在于“多少”,而在于“给谁看”和“在什么情况下看”。你把文档想象成你在跟未来的某个人说话,这个人可能是:
- 三个月后的你自己: (“我当时写这坨代码是脑子抽了什么风?”)
- 刚入职的新同事: (“大佬,这项目怎么跑起来啊?我想在本地调一下。”)
- 半夜被叫起来改bug的另一个倒霉蛋: (“这接口是干啥的?咋返回的数据这么奇怪?”)
- 需要用你写的模块的隔壁组同事: (“你这个工具怎么用?有没有例子给我抄一下?”)
想清楚了跟谁说话,你就知道该写什么、写多少了。
我给你几个场景化的建议,你可以照着做,保证团队没人会因为文档的事儿来找你麻烦:
1. “救命”文档:必须有,不然大家一起完蛋
这种文档是优先级最高的,量不多,但缺了会出大事。
- 项目如何跑起来: 一个
README.md
文件,清楚地写上:- 这项目是干啥的(一句话说清)。
- 怎么安装依赖(
npm install
,pip install -r requirements.txt
之类的命令)。 - 怎么把服务启动起来(
npm run dev
,python manage.py runserver
)。 - 怎么跑测试。
- 目的: 让新来的同事能在半小时内把项目在自己电脑上跑起来,而不是抓着你问一天。这是给新人的“活路”,也是给自己的清净。
- 环境配置说明: 比如
.env.example
文件,把需要配置的变量名都列出来,旁边加上注释说明这个变量是干啥的。别把密码、密钥直接写进去!- 目的: 避免别人因为环境问题搞一上午,最后发现是某个配置没写。
- 部署和上线的流程: 如果项目需要你手动部署,务必把步骤记下来。哪怕是记在一个只有你们组看得到的便签软件里。
- 目的: 防止只有你一个人会部署,万一你休假了,项目就没法上线了。
2. “路标”文档:写在代码里,给看代码的人引路
这种文档不是长篇大论,而是代码里的“高亮注释”。
- “为什么”这么做,而不是“是什么”:
- 坏例子:
// 循环用户列表
(这不明摆着吗?) - 好例子:
// 这里不用常规的 forEach,因为需要兼容 IE8 的一个奇葩 bug
- 好例子:
// 警告:下面这个函数的性能极差,只是临时方案,后续需要重构成 xxx 模式
- 坏例子:
- 复杂的业务逻辑: 如果一段代码的业务逻辑很绕,比如一个算积分、算优惠券的函数,最好在函数开头用几句话把规则说清楚。
- 例子:
// 计算最终价格规则:1. 优先使用折扣最高的优惠券;2. 积分和优惠券不能同时使用;3. VIP 用户在此基础上再打95折。
- 例子:
- API 接口注释: 如果你写的是后端接口,在接口定义上方简单说明这个接口是干嘛的、需要什么参数、返回什么。
- 目的: 让前端或客户端的同事不用扒你的代码,就能知道接口怎么调。现在很多框架都能根据这种注释自动生成接口文档(比如 Swagger),一劳永逸。
3. “说明书”文档:给用你东西的人看的
如果你做了一个公共组件、一个工具库、一个给别人用的服务。
- 提供一个开箱即用的例子: 别长篇大论介绍你的设计哲学,直接给一个最简单的、能跑起来的 Code Snippet(代码片段),让别人复制粘贴就能用。
- 关键参数说明: 列出几个最重要的参数,说明它们是干嘛的,有什么可选值。
总结一下
别把写文档当成一个额外的、烦人的任务。把它当成代码的一部分,一种和未来沟通的方式。
你的目标不是写出一部《百科全书》,而是:
- 让新同事能自理。
- 让合作方能自查。
- 让未来的自己别骂娘。
做到这三点,你在团队里就是最靓的仔,没人会因为文档的事儿diss你。记住,最好的文档是“刚刚好”的文档——既不缺失关键信息,也没有一句废话。