值夜班步驟
這是什麼
大多數程序是由已經熟悉工作的人編寫的。它們在辦公桌前讀起來沒問題。但在凌晨三點、嘈雜的房間、手機上、使用第二語言、或讀者害怕弄壞東西時,它們就失敗了。這些失敗是可預測的:一個步驟中隱藏了兩個動作、警告位於它所保護的步驟之後、條件出現在句子結尾、被動句隱藏了必須行動的人、以及像「正確地」這樣的詞要求讀者去猜測。
這項技能將這類文字轉換為人可以逐字遵循的步驟。它借鑒了飛機和工業維護中使用的控制語言規範(短句、每個句子一個動作、主動語態、一詞一義)、設備標籤上使用的安全訊息順序(信號詞、危害、後果、避免方式),以及每個風險步驟後寫下預期結果的習慣,讓讀者知道何時該停下來。
這不是一個「讓它聽起來像人類」的處理過程。目標是建立一個無法被誤讀的程序,即使它聽起來有點平淡。
何時使用
- 應變手冊、事件處理手冊、待機檢查清單、部署和回滾步驟。
- 硬體、家用設備、實驗室設備或辦公室IT的設定或維修指南。
- 標準作業程序(SOP)和交接記錄,供另一個人或另一個班次使用。
- 將被機器翻譯或由非母語者閱讀的指示。
- 任何一個誤讀步驟可能導致資料、金錢損失或造成傷害的文字。
不要將其用於論文、行銷文案或概念性說明。這些需要不同的語氣。
規則(預設層級)
| # | 規則 | 限制或測試 |
|---|---|---|
| R1 | 每個步驟一個動作 | 步驟內不能有「,然後」、「然後」、分號或兩個由「和」連接的動詞 |
| R2 | 簡短的指示句 | 中文約35個字 |
| R3 | 簡短的描述句 | 中文約45個字 |
| R4 | 祈使句、主動語態 | 以動詞開頭。如果動作執行者不是讀者,要指明 |
| R5 | 條件在前 | 「如果燈是紅色的,停下來。」永遠不要說「停下來,如果燈是紅色的。」 |
| R6 | 一詞一義 | 在詞彙表中鎖定術語。永遠不要為了變化而交換同義詞 |
| R7 | 確切的值 | 帶單位的數字、與螢幕或設備上完全相同的標籤 |
| R8 | 安全訊息在步驟之前 | 信號詞、危害、後果、該怎麼做 |
| R9 | 風險步驟後的預期結果 | 「結果:...」以及如果結果不同該怎麼做 |
| R10 | 無猜測性詞語 | 移除「正確地」、「按需」、「確保」、「應該」、「只要」 |
嚴格層級(適用於安全關鍵或法規要求的文字):套用所有規則,無例外,不容許任何模糊用語,並在每個步驟後加上結果行。寬鬆層級(適用於已經不錯的內部備忘錄):僅套用R1、R5、R8和R9。
信號詞
使用仍然真實的最低程度詞語。不要誇大。
- 危險:忽略會導致死亡或重傷。
- 警告:可能導致死亡、重傷或重要的資料或金錢損失。
- 小心:可能導致可修復的輕傷或損壞。
- 注意:無傷害風險;僅有財產、資料或時間風險。
每個安全訊息包含三個部分:危害是什麼、讀者忽略會發生什麼、以及該怎麼做。「小心」不是一個安全訊息。
如何操作
- 填寫程序卡。 在編輯之前,寫下:目標狀態(「磁碟2正在重建」)、誰將遵循它(角色、語言、條件例如手套、噪音、手機螢幕、夜間)、他們擁有什麼(存取權限、工具、時間)、危害以及停止條件。對於任何你無法推斷的內容,向使用者提問。缺少停止條件是最常見的差距。
- 列出你必須保留的事實。 每個數字、單位、標籤、指令、順序限制、警告和條件。改寫必須包含所有這些,且不添加任何內容。如果你認為某個值有誤,請標記出來;不要默默修正。
- 拆分為動作。 讀者做的一個動詞=一個步驟。導航也算在內(「前往儲存」和「選擇磁碟2」是兩個步驟)。將背景資訊移到一個簡短的「開始之前」段落。
- 重寫每個步驟。 動詞在前,條件在前,確切的標籤用粗體或
代碼表示,單位始終保留。替換每個隱藏動作執行者的被動語態:「金鑰被生成」變成「工具生成金鑰」,或者更好的是讀者用來生成它的步驟。 - 放置安全訊息。 對於每個刪除、覆寫、關機、重啟、斷開、加熱、切割或加壓的步驟,將訊息直接放在步驟上方。從上面的階梯中選擇信號詞。
- 添加結果和退出點。 在每個風險或狀態變化的步驟之後,寫下讀者看到什麼表示操作成功。如果結果可能不同,給出一行:「如果你看到X,停下來並前往恢復A。」寫下恢復章節。
- 鎖定詞彙表。 為每個事物選擇一個術語(例如「托盤」,而不是「支架」或「滑軌」)。如果程序將被維護,將其儲存為
glossary.json。 - 檢查。 執行
python scripts/stepcheck.py lint procedure.md --glossary glossary.json。修正每個「不安全」和「需重做」的發現,或解釋為什麼某個是誤判。 - 進行字面走讀。 只閱讀編號的步驟,假裝你是嚴格執行每句話所說內容、不多做任何事情的人。他們會在何處停下來、猜測或做出有害的事情?修正那些地方。
- 回傳 改寫後的程序,然後是簡短的變更清單(規則編號)、你無法驗證的事實清單以及待解決的問題。
輔助腳本
scripts/stepcheck.py 是一個使用標準庫的Python檢查工具,用於Markdown程序,支援英文或中文。
| 代碼 | 嚴重程度 | 意義 |
|---|---|---|
| 危害-無警告 | 嚴重 | 風險步驟上方沒有安全訊息 |
| 延遲警告 | 嚴重 | 安全訊息位於它保護的步驟之後 |
| 弱警告 | 修正 | 訊息沒有說明會發生什麼 |
| 過長 | 修正 | 指示句超過限制 |
| 堆疊 | 修正 | 步驟中有超過一個動作 |
| 隱藏執行者 | 修正 | 被動語態或「被」隱藏了誰在行動 |
| 模糊/含糊 | 修正 | 猜測性詞語 |
| 條件在後 | 修正 | 條件在動作之後出現 |
| 偏移 | 修正 | 使用了詞彙表中禁止的同義詞 |
| 無結果、描述過長 | 備註 | 僅供建議 |
判定結果:就緒(exit 0)、需重做(exit 1)、不安全(exit 2)。腳本使用詞彙表和模式,因此會遺漏某些情況,有時也會將正確的句子標記為錯誤。它永遠無法取代步驟9。
範例
改寫前:
- 如果NAS仍在運行,請關閉電源。
- 拉出磁碟2的托盤,並將新磁碟放入。 小心:舊磁碟可能很燙。
改寫後:
警告:在移除磁碟之前關閉NAS電源。磁碟在運行時被移除可能會損壞第二個磁碟。 5. 按壓電源按鈕2秒以關閉NAS電源。 結果:約1分鐘後,前面板的所有指示燈熄滅。 小心:舊磁碟使用後可能很燙。握住托盤,否則可能燙傷手指。 6. 拉出磁碟2的托盤。 7. 將新磁碟放入托盤。
變更:R1(拆分步驟4)、R5(透過將關機設為獨立步驟移除條件)、R8(警告上移並附上後果)、R9(添加結果)。完整檔案在 examples/ 中。
提示
- 如果原始文字是錯的,最清晰的改寫仍然是錯的。在變更清單中標記有疑問的值。
- 保留指令、路徑和螢幕上的標籤,一字不差。在拼錯的指令周圍寫出清晰的散文比原始文字更糟。
- 需要長篇說明的步驟通常是兩個步驟加上一條前置備註。
- 步驟連續編號。不要在單一程序中重新開始編號;對恢復使用單獨的章節。
- 當你同時產生中文和英文版本時,並排閱讀:每個步驟應該一一對應。
- 永遠不要聲稱輸出符合任何官方控制語言標準。請說「以控制風格撰寫」。