27 不要冲出前灯范围

只在可见反馈范围内小步前进,对远期预测保留不确定性,避免以猜测制造不可逆承诺。

学习目标

  • 能解释为什么只能把下一步建立在可见反馈上,并指出远期预测的停止边界
  • 能修改一段计划或代码,把大承诺拆成可观测、可回退的小步并保留首差证据
  • 能回答:当反馈在第三步消失时,为什么不能继续预测第五步,应该怎样恢复?

从手电筒照亮的下一步开始

夜里拿着手电筒走路,你能看见下一块地面,却看不见整条路的终点。稳妥的走法是照亮一小段、迈一步、确认脚下仍然安全,再决定下一步。

如果把远处的黑暗当成已经确认的路线,就会在尚未验证时许下不可逆承诺;一次依赖变化,整张计划表都可能失效。本章把“看见—迈步—确认—调整”变成可复核的工作流。

这章要守住哪条边界

本页依据 David Thomas、Andrew Hunt《程序员修炼之道:通向务实的最高境界(第2版)》,云风译,电子工业出版社,2020年4月,ISBN 9787121384356 的公开完整中文目录,独立重构 27 不要冲出前灯范围提示42:小步前进——由始至终提示43:避免占卜。示例、代码、图示、实验和练习均为本课程重新设计,不复制原书正文、插图、练习答案或代码。

本章的验收对象不是“预测得有多远”,而是能否在每个节点留下输入、结果和拒绝条件:前灯范围 → 小步 → 反馈 → 再规划 → 停止线。停止线不是失败,它是对当前证据边界的诚实声明。

先看证据如何带着计划移动

先预测:如果第三步的反馈消失,计划能不能直接跳到第五步?再打开实验台,推进到第 3 步观察首差;最后重置并比较“正常、边界、单故障”三种记录。

Topic 27 · 前灯范围实验台
前灯范围:只承诺看得见的下一步当前:第 1 步 · 前灯范围 · 冻结当前证据1前灯范围冻结当前证据现在看得见什么?证据已写入2小步承诺可逆变化一次只动一件事等待观察3反馈观察首个变化结果回到现场等待观察4再规划更新下一步按新证据调整等待观察5停止线拒绝远期占卜看不见就先停等待观察验收合同:每一步只基于已经看见的证据更新下一步前灯范围 → 小步 → 反馈 → 再规划 → 停止线提示42:小步前进——由始至终 · 提示43:避免占卜

第 1 / 5 步:前灯范围 已留下可复核证据。

先预测反馈在哪一步出现,再注入单故障;重置后应回到第 1 步和完整证据。
分步1 / 3

1. 先圈出前灯范围

前灯范围:只承诺看得见的下一步当前:第 1 步 · 前灯范围 · 冻结当前证据1前灯范围冻结当前证据现在看得见什么?证据已写入2小步承诺可逆变化一次只动一件事等待观察3反馈观察首个变化结果回到现场等待观察4再规划更新下一步按新证据调整等待观察5停止线拒绝远期占卜看不见就先停等待观察验收合同:每一步只基于已经看见的证据更新下一步前灯范围 → 小步 → 反馈 → 再规划 → 停止线提示42:小步前进——由始至终 · 提示43:避免占卜
只把下一步建立在可见反馈上;看不见的远期结果应成为停止线,而不是承诺。

先把当前能观察到的输入、输出和边界写下来;范围之外的内容只能标为未知,不能用熟悉的故事补齐。

常见误区与回退

五个节点怎样形成前灯合同

前灯范围:先承认看不见的部分

<Term def="当前输入和反馈真正能够覆盖的工作范围;范围之外的内容必须标成未知。">前灯范围</Term>不是项目的全部愿望,而是此刻能用证据照亮的局部。开始前写清版本、输入、观测点和边界;下游只能接收这些已声明的事实。

小步:让承诺保持可逆

<Term def="一次只改变一个条件、能够在下一次反馈前撤回的最小行动。">可逆承诺</Term>把远期目标切成短路径。小步不是把大任务机械切碎,而是让每一步都能回答“改了什么、预期看见什么、若没看见如何回退”。

反馈:让结果回到决策点

<Term def="行动完成后回到决策者手里的观察结果,用来判断下一步是否仍然成立。">反馈半径</Term>描述一次行动能观察到多远。半径太大时,多个原因混在一起;半径太小时,无法验证目标。合适的半径能在首差处停止,而不是等到远期承诺全部失效。

再规划:用新证据替换旧猜测

<Term def="根据最新反馈改写下一步边界、输入和验收条件的动作。">再规划</Term>不是为旧计划找理由。它应该留下旧版本、首差、新假设和新的停止条件,让复核者知道哪一条证据改变了路线。

停止线:明确拒绝占卜

<Term def="当证据不足或反馈缺失时暂停副作用、拒绝继续承诺的明确边界。">停止线</Term>把“我不知道”变成可执行的工程状态。停止后保留现场、补齐观测或缩小问题;不要用默认成功值把黑暗填成绿色。把这段缺口写成<Term def="当前证据还不能支持的部分;它应被标记、等待反馈,而不是被猜测填满。">不确定性</Term>,复核者就能看见为什么这里必须停。

提示42:小步前进——由始至终

“小步前进——由始至终”要求每一步都有开始条件、结束证据和下一步的输入。一个发布计划可以先交付一条可观测的垂直路径,再用真实反馈决定第二条路径,而不是先写满所有远期接口。

下面的 TypeScript 片段把每次行动限制在一个可回退的步长内。代码练习会要求你改动它,关键是让没有反馈时的停止行为显式可测。

type Probe = { value: string; observedAt: number };
 
function nextStep(probe: Probe | null) {
  if (!probe) return { kind: "stop", reason: "feedback-missing" };
  return { kind: "continue", input: probe.value };
}

nextStep 没有替缺失反馈猜一个值;它把缺口变成状态,让调用者决定补观测、缩小范围或回退。每次只改变一个输入,才有机会把结果归因到当前小步。

提示43:避免占卜

“避免占卜”不是拒绝计划,而是拒绝把遥远的未知写成精确事实。估算可以帮助排序,不能替代观测;路线图可以表达假设,不能绕过反馈。

当工具能够自动生成代码、测试或计划时,也要把“工具做了什么”与“系统实际观察到什么”分开记录。自动通过只说明声明覆盖的范围;超出前灯范围的风险仍然要由人重新设定停止线。

把三种样本放在同一张记录里

样本唯一变化预期首差与恢复
正常输入与反馈都完整五个节点依次闭合保存每步输出和下一步输入
边界反馈刚好在停止线外明确拒绝继续承诺记录边界条件,缩小步长
单故障只移除第 3 步反馈反馈处首差并停止补回观测,从原节点重放

一个成功样本只能证明这条路径成立;只有把边界和单故障也保存下来,复核者才知道结论在哪些条件下失效。

本章回顾

  • 前灯范围限定当前真正可见的输入、结果和边界。
  • 小步让承诺可逆,反馈让结果回到决策点,再规划负责更新下一步。
  • 反馈缺失时应在停止线停下;继续向远期推演就是把未知伪装成事实。
  • 提示42:小步前进——由始至终提示43:避免占卜共同要求计划随着证据移动。

练习

练习

  1. 边界拆分:一个团队要在三个月内迁移整套服务,但当前只知道登录链路的输入和输出。请写出第一小步、反馈点和停止条件。
  1. 故障定位:实验台在第 3 步失去反馈,但第 4、5 步仍显示绿色。你会接受最终状态吗?说明首差、拒绝理由和恢复动作。
  1. 改 Demo 代码:修改 nextStep,让它能接收一次可控的观测延迟;要求延迟期间不能继续规划,恢复后仍使用同一个输入,并写出一条断言。

名词解释

名词解释

本章出现的专业名词,用大白话再讲一遍。

前灯范围

当前证据能照亮的工作范围;看不见的部分先标成未知,不用想象补齐。

可逆承诺

一次只改一点、发现不对可以撤回的小行动,像只走到手电筒照亮的下一块地面。

反馈半径

一次行动能观察到多远;它决定你能否在错误扩大前看见变化。

再规划

根据最新观察重新决定下一步,而不是替旧计划继续找理由。

停止线

证据不足时暂停并拒绝继续承诺的边界,停下本身就是一种有效状态。

不确定性

目前还没有证据支持的部分;它不是空白答案,而是需要等待反馈的明确状态。

来源与改写范围

本页是基于公开目录的 independent rewrite;前灯范围模型、TypeScript 示例、图示、实验和练习均为本课程重新设计,不声称提供原书全文或原书答案。

前后导航

讨论

评论区加载中…