夜班步骤 是做什么的?
这是什么
大多数程序都是由已经熟悉工作的人编写的。这些程序在办公桌前阅读时感觉不错。但在凌晨3点、嘈杂的房间、手机上、第二语言环境下,或者当读者害怕弄坏东西时,这些程序就失效了。这些失效是可以预见的:一个步骤中隐藏了两个操作、警告放在它本该保护的操作之后、条件出现在句末、被动语态隐藏了必须执行的人、以及像"properly"这样让读者去猜测的词语。
此技能将此类文本转化为人们可以逐字遵循的步骤。它借鉴了飞机和工业维护中使用的受控语言的规范(短句、每句一个动作、主动语态、一词一义)、设备标签上使用的安全信息顺序(信号词、危险、后果、避免方法),以及在每个风险步骤后写出预期结果的习惯,以便读者知道何时停止。
这不是一个"让它听起来更人性化"的润色。目标是创建一份无法被误读的程序,即使它听起来有些平淡。
何时使用
- 运行手册、事故处理手册、值班检查清单、部署和回滚步骤。
- 硬件、家用设备、实验室设备或办公IT的设置或修理指南。
- 标准操作程序和交接记录,供另一个人或另一个班次使用。
- 将经过机器翻译或由非母语人士阅读的说明。
- 任何一步误读就可能导致数据丢失、金钱损失或人身伤害的文本。
不要将其用于论文、营销文案或概念解释。这些需要不同的口吻。
规则(默认级别)
| # | 规则 | 限制或检验标准 |
|---|---|---|
| R1 | 每个步骤一个操作 | 步骤内部不得出现", then", "and then", ";" 或由 "and" 连接的两个动词 |
| R2 | 指令性句子要短 | 英文20词,中文约35字 |
| R3 | 描述性句子要短 | 英文25词,中文约45字 |
| R4 | 命令式,主动语态 | 以动词开头。如果操作者不是读者,需指明操作者 |
| R5 | 条件在前 | "如果灯是红色的,就停下。" 而非 "如果有红灯就停下。" |
| R6 | 一词一义 | 在术语表中锁定术语。切勿为了多样性而使用同义词替换 |
| R7 | 精确值 | 带单位的数字,标签与屏幕或设备上显示完全一致 |
| R8 | 安全信息在步骤之前 | 信号词、危险、后果、该怎么做 |
| R9 | 风险步骤后附加预期结果 | "结果:..." 及如果结果不同该怎么办 |
| R10 | 无猜测性词语 | 移除 "properly", "as needed", "make sure", "should", "just" |
严格级(用于安全关键或受监管的文本):无例外地应用每一条规则,完全不允许保留余地,并在每个步骤后加上结果行。轻量级(用于已经不错的内部笔记):仅应用 R1、R5、R8 和 R9。
信号词
使用仍然正确的最低级别词。不要夸大。
- 危险:忽视将导致死亡或重伤。
- 警告:可能导致死亡、重伤、或重要数据或金钱损失。
- 注意:可能导致可修复的轻伤或损坏。
- 提示:无受伤风险;仅涉及财产、数据或时间风险。
每个安全信息都包括三部分:危险是什么、忽视它的后果是什么、以及该怎么做。"小心"不是安全信息。
如何操作
- 填写流程卡片。 在编辑之前,写下来:目标状态("重建磁盘 2")、谁将遵循它(角色、语言、条件,如手套、噪音、手机屏幕、夜间)、他们有什么(访问权限、工具、时间)、危险以及停止条件。询问用户任何你无法推断的内容。缺失停止条件是最常见的漏洞。
- 列出必须保留的事实。 每个数字、单位、标签、命令、顺序约束、警告和条件。改写必须包含所有内容,且不添加任何内容。如果你认为某个值有误,标记它;不要无声地修改。
- 拆分为操作。 读者执行的一个动词 = 一个步骤。导航步骤也算("转到存储"和"选择磁盘 2"是两个步骤)。将背景信息移到一个简短的"开始之前"段落中。
- 改写每个步骤。 动词在前,条件在前,确切的标签用粗体或
代码表示,始终带上单位。替换所有隐藏操作者的被动语态:"密钥被生成" 改为 "工具生成密钥",或者更好,改为读者为了生成它所执行的步骤。 - 放置安全信息。 对于每个涉及删除、覆盖、断电、重启、断开、加热、切割或加压的步骤,将信息直接放在该步骤之上。从上面的阶梯中选择信号词。
- 添加结果和出口。 在每个有风险或改变状态的步骤之后,写下读者在步骤成功时会看到什么。如果结果可能不同,给出一行:"如果你看到 X,停下来并转到恢复 A。" 编写恢复部分。
- 锁定术语表。 每件事物选用一个术语(例如,"托盘",而不是"支架"或"滑板")。如果该流程需要维护,将其保存为
glossary.json。 - 检查。 运行
python scripts/stepcheck.py lint procedure.md --glossary glossary.json。修复每个 UNSAFE 和 REWORK 的发现,或解释为什么某个是误报。 - 进行字面演练。 只阅读编号的步骤,就像一个人会完全按照每句话所说的去做,不多也不少。他们在哪里会停下、猜测或做有害的事情?修复那些地方。
- 返回 改写后的流程,然后是一份简短的变更列表(规则编号)、你未能验证的事实列表以及未解决的问题。
辅助脚本
scripts/stepcheck.py 是一个用于 Markdown 流程(英文或中文)的标准库 Python 检查工具。
| 代码 | 严重程度 | 含义 |
|---|---|---|
| HAZARD-NO-WARNING | hard | 风险步骤上方没有安全信息 |
| LATE-WARNING | hard | 安全信息位于它应该守护的步骤之后 |
| WEAK-WARNING | fix | 信息没有说明后果 |
| LONG | fix | 指令性句子超过限制 |
| STACKED | fix | 一个步骤中有多于一个操作 |
| HIDDEN-ACTOR | fix | 被动语态或"被"隐藏了操作者 |
| HEDGE / VAGUE | fix | 猜测性词语 |
| CONDITION-LAST | fix | 条件位于操作之后 |
| DRIFT | fix | 使用了术语表中禁止的同义词 |
| NO-RESULT, LONG-DESC | note | 仅建议 |
结论:就绪(退出码 0),需返工(退出码 1),不安全(退出码 2)。该脚本使用词表和模式,因此有时会漏报,有时会误报正确的句子。它永远不能替代第9步。
示例
之前:
- 如果 NAS 还在运行,请将其关机。
- 拉出磁盘 2 的托盘并将新磁盘放入其中。 注意:旧磁盘可能很烫。
之后:
警告:在移除磁盘前,请将 NAS 关机。在磁盘运行时拔下它可能会损坏第二块磁盘。 5. 按住电源按钮 2 秒以关闭 NAS。 结果:约1分钟后,前面板的所有灯熄灭。 注意:旧磁盘使用后可能很烫。抓住托盘,否则可能烫伤手指。 6. 拉出磁盘 2 的托盘。 7. 将新磁盘放入托盘。
变更:R1(拆分步骤4),R5(通过将关机变为独立步骤消除条件),R8(将警告上移并给出后果),R9(添加了结果)。完整文件见 examples/。
提示
- 如果源文本有误,最清晰的改写仍然是错误的。在变更列表中标记有疑问的值。
- 保持命令、路径和屏幕上的标签逐字节不变。围绕一个输入错误的命令写清晰的散文比原文更糟。
- 一个需要长解释的步骤通常意味着它是两个步骤外加一个在其前面的注释。
- 连续编号步骤。不要在一个流程中重新开始编号;为恢复步骤使用单独的部分。
- 当你同时产出中文和英文版本时,将两者并排阅读:每个步骤应该一一对应。
- 绝不要声称输出符合任何官方的受控语言标准。应该说"采用受控风格编写"。