04-文档组织
文档组织——结构、逻辑、内容槽位与逐项审查
一句话
结构管「放什么、放哪里」,逻辑管「为什么、怎么连」,具体管「里面到底写什么」,审查管「分别有没有问题」。
无论是写文档、文章,还是分析复杂问题,都可以避免一上来就陷入细节。
一、结构与逻辑的区分
结构 = 总和分、上下层次、组成关系
- 整体由什么组成
- 每部分属于哪里
- 哪些是总体、子系统、模块、组件
例如:系统 → 服务 → 模块 → 类 → 函数
逻辑 = 前因后果、条件关系、推导关系、执行关系
- 为什么产生什么
- 什么条件下做什么
- 做了 A 之后导致 B,B 又作为 C 的前提
例如:输入 → 解析 → 判断 → 分发 → 执行 → 输出
「不是东一榔头西一榔头」,正是逻辑性的核心。
结构回答「东西怎么组织」,逻辑回答「事情怎么发生」。
以服务器为例
结构(服务器由哪些东西组成):
1 | Server |
逻辑(请求怎么一步步变成结果):
1 | 客户端请求 → 网络接收 → 协议解析 → 路由匹配 |
工程设计 = 结构 × 逻辑
结构确定「谁负责什么」,逻辑确定「谁先做什么、为什么做、做完产生什么」。
「系统用结构描述,工程用流程描述」是同一组关系:系统偏向回答「它是什么、由什么组成」;工程过程偏向回答「它怎么被构造、怎么运行、怎么验证」。
二、文档的四层组织与内容槽位
结构和逻辑解决「不要乱」,还差「具体放什么」。任何文档/文章的组织可以理解成四层:
1 | 结构:放在哪里 |
其中最关键的是内容的固定槽位。
最基本的内容骨架
一份比较完整的文档,通常按这个顺序组织(每个位置有自己的职责):
1 | ① 背景 为什么要讨论/做这个东西? |
这就已经不是「想到什么写什么」,而是每个位置有自己的职责。
以 CLI 程序设计为例
结构(分类):
1 | CLI |
逻辑(因果/过程):
1 | 用户输入命令 → 解析参数 → 检查参数合法 → 构造请求 |
具体内容(槽位):
1 | Parser: 输入 argv → 输出 Command |
写东西就是「填槽位」
1 | 主题 → 确定范围 → 建立结构 → 建立逻辑 |
例如一个叫「Parser」的章节,固定回答:Parser 是什么?为什么需要它?输入是什么?输出是什么?处理什么、不处理什么?处理流程是什么?错误怎么处理?怎么测试?——这样写出来就很难乱。
文章 vs 工程文档的区别
- 文章最核心的是论证逻辑:观点 → 理由 → 解释 → 证据/例子 → 结论
- 工程文档最核心的是信息完整性 + 可查找性 + 可执行性:对象 → 定义 → 结构 → 接口 → 规则 → 流程 → 实现 → 验证
「该写什么」= 信息单元应该回答什么问题
| 内容类型 | 回答的问题 |
|---|---|
| 定义 | 它是什么? |
| 背景 | 为什么有它? |
| 目标 | 想得到什么? |
| 范围 | 管什么、不管什么? |
| 结构 | 由什么组成? |
| 关系 | 谁和谁有什么关系? |
| 原理 | 为什么这样? |
| 流程 | 先做什么、后做什么? |
| 规则 | 什么情况下必须怎样? |
| 接口 | 怎么与它交互? |
| 实现 | 具体怎么做? |
| 示例 | 实际是什么样? |
| 验证 | 怎么证明正确? |
| 限制 | 哪里不能保证? |
| 结论 | 最终得出了什么? |
真正成熟的写作不是「会写漂亮的句子」,而是:先建立信息结构 → 再建立信息之间的逻辑 → 再确定每个节点应该回答的问题 → 最后填入具体内容。
结构解决「杂」,逻辑解决「乱」,内容槽位解决「空」。
三、审查的拆分:一次只审查一种东西
核心原则:
不是「审查代码」,而是把「代码正确性」拆成很多种互相独立的审查任务,每次只检查一种性质。
每轮只有一个判断问题,输入、检查对象、规则、输出都可以固定。
代码审查八类
① 结构审查——东西放得对不对:分层审查(文件夹是否对应层、是否跨层直接调用、是否反向依赖)、文件归属
② 模块审查——同一功能是否聚在一起:文件是否属于正确功能模块、一个模块是否混入其他功能、是否出现「万能模块」「common.cpp」什么都往里塞
③ 职责审查——它有没有偷偷负责别的事:algorithm/FindProcess() 不应该出现打开文件、创建窗口、打印 CLI、解析命令行、访问数据库
④ 接口职责审查——接口是否只有接口:有没有实现代码、接口是否过大、一个接口是否承担多个不同职责
⑤ 原子化审查——该拆的有没有拆:有没有应该拆而没拆?有没有原子能力还没形成接口就直接开始组合?原则:先形成原子能力,再进行组合
⑥ 组装层审查——拆好的东西有没有正确组合:CLI 是否只负责解析/分发/调用 Service、是否把业务逻辑写进 CLI、是否绕过 Service 直接调用底层组件
⑦ 逻辑审查——事情是否按正确逻辑发生:顺序是否正确、前置条件有没有检查、有没有漏步骤/重复步骤、错误是否正确传播、状态变化是否正确
⑧ 行为审查——功能是否正确、边界是否正确、异常是否正确、测试是否覆盖
文档审查的九项流水线
① 结构审查——有没有放对地方:只信息组织位置,不判断内容对错
② 内容完整性审查——该写的有没有写:逐项打勾,找出缺失项
③ 逻辑审查——是不是东一榔头西一榔头:前后关系(为什么→因此、输入→处理→输出、问题→原因→解决方案)
④ 概念审查——有没有混概念:同一个词是否始终表示同一个东西
⑤ 层次审查——抽象层级有没有混乱:标题是「系统架构」,却突然出现「std::vector 扩容时会重新分配内存」
⑥ 关系审查——该建立的关系有没有建立:A 和 B 是什么关系?是否存在孤立概念?
⑦ 事实审查——说的东西有没有依据:有没有把推测写成事实、把个例写成普遍规律
⑧ 推理审查——结论是不是从前面推出来的:「A 项目成功 → 所以这种架构一定适合所有项目」
⑨ 表达审查——有没有把确定的东西说清楚:歧义、啰嗦、重复、术语统一(表达审查应该比较靠后)
五个基础审查器
1 | 结构审查 解决「有没有乱放」 |
对 Agent 的执行方式
不要给 Agent「全面审查这个项目」,而是分轮给单一判断:
1 | 「只检查分层和依赖方向,不检查功能正确性。」 |
这样就从「凭经验审代码」变成了真正的工程审查流程。
四、闭环与总结
完整闭环
1 | 主题 → 结构:有哪些部分 → 逻辑:部分之间如何关联 |
核心方法:
先建立结构,再建立逻辑;具体内容填入结构;最后把审查拆成一个个独立维度逐项检查。
审查本身也要有结构和逻辑
审查也不能混乱——一次只问一个问题:结构是否合理?内容是否完整?层次是否混乱?概念是否统一?关系是否表达清楚?逻辑是否连贯?推理是否成立?事实是否正确?表达是否清楚?
连审查本身也要有结构和逻辑。
四句话总结
结构管「放什么、放哪里」。
逻辑管「为什么、怎么连」。
具体管「里面到底写什么」。
审查管「分别有没有问题」。
与其他线的关系
- 与单一职责主题:结构审查、职责审查是单一职责在审查环节的执行——一次只审查一种性质,就是审查的单一职责
- 与拆解与组织主题:结构 = 拆解的结果,逻辑 = 组织的关系;文档组织是拆解与组织原则在文档上的应用
- 与设计表示线:设计表示提供八种视图(层级树/流程图/依赖图/时序图/状态图);文档组织确定这些视图按什么顺序放进文档
- 与建模与逆向主题:文档的内容槽位就是「模型 → 文章」的展开模板;文档审查就是逆向应用(用模型检查产物)
