练习的参考答案
把参考答案当作比较路径而非唯一结论,用前提、步骤、反例和独立复算评价答案。
学习目标
- 能先独立写出题目的前提、预测、步骤和失败条件,再参考答案定位首个分歧
- 能把参考答案当作可比较路径,区分事实、假设、推理和仍需验证的替代解
- 能用边界样本与独立复算检验答案,留下可重建的输入、证据、结论和回退
练习的参考答案
本页依据 David Thomas、Andrew Hunt《程序员修炼之道:通向务实的最高境界(第2版·20周年版)》,云风译,电子工业出版社,2020 年 4 月,ISBN 9787121384356 的公开中文目录,独立重构 练习的参考答案。正文、代码、图示、实验和练习都是本课程重新设计的教学材料,不复制原书正文、插图、练习答案或代码。
参考答案不是一道题的唯一终点,而是一条可以比较的路径:答题者先说明前提和预测,再与参考路径对照,找到第一个分歧,最后用反例或独立复算检查两条路径的边界。答案相同不代表推理可靠,答案不同也不代表个人一定错误。
三个会让答案评估失真的陷阱
五个词把答案变成可比较路径
<Term def="题目要求、输入、约束、时间窗口和不在范围内的条件;它决定答案比较的共同起点。">题目边界</Term>防止答题者用不同问题得出不同结论。边界不清时,先补问题而不是急着评分。
<Term def="在看到参考答案前,对输入、机制、结果和失败条件写出的可检验预期。">独立预测</Term>把答案评估从事后解释变成可观察的过程。预测错了并不可耻,隐藏预测才无法学习。
<Term def="从前提到结论的有序步骤,包括每一步的证据、判断和失败回退。">参考路径</Term>用于比较推理结构,不要求复制原作者的措辞。每一步都应能被另一个人复走。
<Term def="两条答案第一次产生不同状态、假设或结果的节点;它决定下一轮应只检查什么。">首个分歧</Term>比最后的结论更有诊断价值。找到首差后,记录两边输入和证据,避免凭印象争论。
<Term def="由另一名复核者在冻结输入和边界下重新运行题目,检查结论、反例和回退是否成立。">独立复算</Term>让参考答案接受现实约束。复算失败时,答案应缩小适用范围,而不是修改日志。
五个词组成学习回路:题目边界决定比较对象,独立预测保留原始假设,参考路径提供结构,首个分歧定位问题,独立复算决定接受、修正或暂停。
怎样阅读参考答案
先把问题改写成可判定命题:在什么输入、约束和时间窗口内,预期什么结果?然后独立写预测与失败条件。阅读参考答案时只比较一个维度:它是否改变了前提、步骤、证据或边界。
参考答案可以提供一种合理路径,却不能替你证明当前项目中的代码、流程或组织约束。若答案依赖某个工具版本、隐含权限或未说明的数据质量,必须把这些条件补入边界,再决定结论能否迁移。
答案比较合同
type AnswerReview = {
prompt: string;
prediction: string;
referencePath: string[];
firstDivergence: string;
counterexample: string;
replayEvidence: string;
decision: "accept" | "revise" | "pause";
};
function isReplayable(review: AnswerReview) {
return (
review.prompt.length > 0 &&
review.prediction.length > 0 &&
review.referencePath.length >= 2 &&
review.firstDivergence.length > 0 &&
review.replayEvidence.length > 0 &&
review.decision !== "pause"
);
}这个合同要求答案包含题目、预测、至少两步参考路径、首个分歧和复算证据。它不承诺所有问题只有一个答案;它只保证每个决定都有前提、路径和可复核的暂停条件。
四步比较流程
1. 冻结题目边界
记录输入、约束、目标、时间窗口、允许的工具和失败条件。把模糊的“最佳方案”改成可以被反例推翻的命题。
Interactive lab
选择答案样本,定位首个分歧
输入
参考答案假定输入稳定,而你的环境有权限和数据质量变化。
首个变化
前提先发生变化,不能直接比较最后结论。
裁决动作
补区分假设的样本,再决定采用哪条路径。
先记录自己的预测,再选择样本;答案评估关注可重走的路径和边界。
正常、边界与单一故障证据
| 样本 | 只改变的变量 | 预期判定 | 必存证据 |
|---|---|---|---|
| 正常 | 题目、前提、步骤和复算环境完整 | 两条路径的差异可解释 | 输入、预测、逐步输出、复算记录 |
| 边界 | 约束或资源恰好越过阈值 | 修改结论边界或暂停,不产生假完成 | 阈值、失败条件、替代解 |
| 单一故障 | 一个步骤、依赖或复核角色失效 | 在首个分歧暴露并回退 | 首差、错误上下文、恢复动作 |
最小答案证据包与反例
证据包包含题目版本、输入、独立预测、参考路径、工具版本、运行日志、正常与边界样本、首个分歧、反例、复算者、决定和回退。最终答案截图或与参考答案文字相似,只能辅助定位,不能单独证明推理成立。
反例应满足同一前提却产生不同结果,或指出题目边界在当前环境不成立。发现反例后,先确认首差,再缩小适用范围、修正前提并重放旧样本;不要删除反例来维持分数。
术语表
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 题目边界
题目要求、输入、约束、时间窗口和不在范围内的条件。
- 独立预测
看到参考答案前,对输入、机制、结果和失败条件写出的预期。
- 参考路径
从前提到结论的有序步骤,以及每一步的证据和失败回退。
- 首个分歧
两条答案第一次产生不同状态、假设或结果的节点。
- 独立复算
另一名复核者在冻结输入和边界下重新运行题目。
练习
练习
问题 1: 你的答案和参考答案结论不同,但你使用了不同的输入假设。如何判断谁更合理?
问题 2: 参考答案在你的当前工具版本上无法复现,你会如何记录?
问题 3: 评审者说“答案看起来对”,但没有运行边界样本。你会要求什么?
本单元回顾
参考答案是比较路径,不是唯一结论。先冻结题目边界,独立写预测,再定位参考路径的首个分歧,最后用边界样本和独立复算验证;能解释前提、反例、失败和回退,才算真正学会一道练习。