跋
把职业自豪与不伤害原则放进真实决策,明确面对有害需求时的评估、升级和拒绝路径。
学习目标
- 能把不伤害原则转成受影响者、失败后果、缓解措施和拒绝条件
- 能在职业伦理冲突中区分继续、升级、暂停和拒绝,并记录决定依据
- 能让独立复核者重建责任、影响和回退路径,而不是依赖个人声望
跋
本页依据 David Thomas、Andrew Hunt《程序员修炼之道:通向务实的最高境界(第2版)》,云风译,电子工业出版社,2020 年 4 月,ISBN 9787121384356 的公开中文目录,独立重构 跋。正文、代码、图示、实验和练习都是本课程重新设计的教学材料,不复制原书正文、插图或答案。
跋把技术判断带回人的影响:程序会改变谁的选择、隐私、机会、时间和安全?“先勿伤害”不是一句抽象格言,而是要求团队在交付前识别受影响者、评估失败、保留缓解证据,并在无法接受时升级或拒绝。职业自豪也不是个人形象,而是让决定和限制可以被多人复核。
三个会让不伤害原则失效的陷阱
五个词把原则变成动作
<Term def="识别会被系统决策、数据处理或自动化行为影响的个人、群体、客户和下游团队。">受影响者</Term>让讨论不止围绕提出需求的人。没有受影响者名单,就很难评估沉默的代价。
<Term def="描述失败会造成什么损失、对谁造成、持续多久、是否可逆以及如何被发现。">失败后果</Term>把道德担忧变成可比较的信息。严重但不容易被监测的后果需要更保守的边界。
<Term def="降低失败可能性、暴露范围、持续时间和恢复成本的具体技术、流程或治理措施。">缓解措施</Term>必须有负责人和验证方式。写在文档里的缓解但从未被测试,不足以支持交付。
<Term def="判断哪些风险可以继续观察,哪些必须升级、暂停、回退或拒绝的项目边界。">不可接受条件</Term>应提前写出,避免压力来临时临时移动门槛。
<Term def="让团队能够在冲突或压力下提出事实、保护用户、升级决定并安全停止工作的组织能力。">责任机制</Term>包括审查、记录、权限、申诉和接管;它不能依赖某个勇敢的人临场对抗。
不伤害回路从受影响者开始,经过失败后果和缓解措施,进入不可接受条件的判断,最后形成继续、升级、暂停或拒绝,并把决定留入责任机制。
提示98:先勿伤害
这条提示要求团队在收益之外检查伤害和可逆性。一个功能即使带来业务收益,也不能用平均收益抵消对少数人的不可接受伤害。把受影响者、失败后果、监测、缓解和回退写入交付合同,才能在压力下保持判断。
提示99:不要助纣为虐
技术能力不自动赋予每个请求正当性。若请求要求欺骗、伤害、绕过同意或隐瞒影响,工程师应说明事实、拒绝直接协助,并把争议交给有权限的伦理、法律或安全渠道;安全替代方案仍然可以帮助解决合法的部分目标。
责任复核合同
type HarmReview = {
affectedPeople: string[];
consequences: string[];
mitigations: string[];
unacceptable: string[];
owner: string;
decision: "continue" | "escalate" | "pause" | "refuse";
};
function needsEscalation(review: HarmReview) {
return (
review.affectedPeople.length > 0 &&
review.consequences.length > 0 &&
review.mitigations.length === 0 &&
review.unacceptable.length > 0
);
}这个合同不是伦理裁判,而是迫使团队把受影响者、失败、缓解和决定放在同一份证据中。若没有缓解措施却存在不可接受条件,系统应进入升级、暂停或拒绝,而不是继续等待坏结果发生。
用一个请求练习责任判断
Interactive lab
选择责任样本,定位停止或升级的首个变化
输入证据
请求会影响隐私或公平,但缓解措施和领域判断仍不完整,不能靠个人猜测继续。
实际首差
边界节点:证据不足,必须暂停并转给有权限的复核者。
恢复动作
缩小范围,补受影响者、后果和缓解证据;复核前不扩大暴露。
先识别受影响者和不可逆后果,再选择样本;暂停、升级和拒绝都需要证据和责任人。
1. 识别受影响者和收益
写出请求想带来的合法收益,以及会被数据、排序、自动决定或权限影响的人。标注谁没有发言权、谁承受失败、谁拥有停止或升级权。
正常、边界与单一故障证据
| 样本 | 只改变的变量 | 预期判定 | 必存证据 |
|---|---|---|---|
| 正常 | 受影响者、收益和缓解清楚 | 决定可解释,责任可以接管 | 影响、证据、负责人和复查 |
| 边界 | 伤害阈值、同意或可逆性变化 | 升级、暂停或拒绝,不绕过门槛 | 阈值来源、解释、决定和替代 |
| 单一故障 | 一个缓解、复核或升级失效 | 在首个责任异常点暴露并恢复 | 首差、影响、回退和行动 |
专业责任不是保证每个判断都完美,而是让判断可以被质疑、修正和接管。对于不能被安全回退的错误,谨慎的暂停比快速交付更符合“不伤害”的边界。
术语表
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 受影响者
会被系统决策、数据处理或自动化行为影响的个人、群体、客户和下游团队。
- 失败后果
失败会造成的损失、受影响对象、持续时间、可逆性和发现方式。
- 缓解措施
降低失败可能性、暴露范围、持续时间和恢复成本的具体措施。
- 不可接受条件
必须升级、暂停、回退或拒绝的风险边界。
- 责任机制
让团队在压力下提出事实、保护用户、升级决定并安全停止工作的组织能力。
练习
练习
问题 1: 需求要把用户行为数据用于一个未告知用户的自动排序。你会怎样决定?
问题 2: 领导要求“先做出来,风险以后再说”,但功能一旦发布很难撤回。你会保存哪些证据?
问题 3: 团队成员担心拒绝会影响绩效,没人愿意记录风险。如何改进责任机制?
本单元回顾
跋提醒我们,技术决策最终会落到具体的人和影响上。先识别受影响者,评估失败与可逆性,验证缓解,写出不可接受条件,再决定继续、升级、暂停或拒绝;把理由和恢复留给团队复核,才能让“不伤害”从口号变成可执行责任。