跳转到内容
pstack 中文学习站

认识论

你在看 pstack 0.15.17 时的版本,最新版在这里

证据是历史留下的、零散的,有时还互相矛盾。这时要判断自己有多把握,并告诉用户,又不能把它说成虚假的确定。代码显示它做什么,不显示它为何存在。原因在提交、PR、工单、文档和对话里。这些材料都不完整,带有偏向,有时根本没有。假装不是这样,就会写出听起来很有把握、却会误导用户的猜测。

输出里的每条主张必须落在一个层级。层级决定它进哪一节,以及怎么措辞。

有明确的文本引用,而且它回答了问题。是作者实际写下的原因,不是「代码做了 X,所以作者一定想要 X」。例如:PR 描述写「修复了用户超过 1000 条时无法分页的 bug」;工单写「因为客户 Acme 在安全审查里提出要求,我们加上这个」;代码注释写 // clamp to 100 because the upstream API rejects larger values;设计文档写「选 A 不选 B,因为需要在重启之后还留着」;作者的聊天写「改用这个做法,因为旧做法在测试里不稳定」。

措辞:有把握,用现在时,并注明出处。「之所以存在,是因为 X。」

多条间接证据收敛到同一个结论。没有单一来源明说,但跨来源的模式让它很可能成立。例如:PR 标题写「提升性能」,工单标了「perf」,周围的提交都改到同一条热路径。或者这次变更加上的好几条测试,都在演练很大的输入。或者作者同一周的其他 PR,都点名同一起事故。

措辞:有把握,但明显是推导出来的,并逐条引用。「证据强烈指向 X:[具体片段]。」

对上下文的合理解读,没有明确的支持。这是你的解释,不是记录里的事实。例如:PR 没写原因,但生产环境当时在报错(按事故频道的时间),修复又很赶(当天就合并了),所以很可能是紧急修复。或者函数名像重试逻辑,重试次数是 3,和代码库别处「重试 3 次」的惯例一致。

措辞:留有余地,并把推断链写明。「鉴于 A 和 B,C 很可能成立,因为 D。」

说得通的假设,证据很薄,别的解释也同样说得通。值得写出来,因为用户可能知道哪个对,但要标明这是猜测。例如:「这可能是某个后来已修好的浏览器 bug 的临时绕过,但我们没找到当时的证据。」或者:「这个阈值可能是为了对齐某份 SLA,但没有 SLA 文档引用它。」

措辞:「一种可能是 X,但我们没有直接证据。」通常放在「竞争假设」里,和其他可能并列。

你查过了,还是不知道。这是有效而且重要的结果。把它记下来。

措辞:「我们搜了 X、Y、Z,没找到原因的证据。」要具体写出搜了什么。「我们查不到」不如这句有用:「我们在工单系统用关键词 A 和 B 搜索,扫了 2023 年以来改过这个文件的 6 个 PR,又在仓库里 grep 和这个阈值匹配的字符串字面量。都没有找出写明的理由。」

表示确信的词意味着证据是直接或有支撑的,旁边必须立刻有引用。推断里不要用这些词:「因为」、「原因是」、「被设计为」(这是在声称作者的意图)、「修复」/「解决」/「处理」(这是在声称这次改动达成了目标)、「团队决定」(这是在声称发生过群体决策)。

留有余地的词表示你在解释,不是在转述记录。在「可以合理推断的」里可以多用:「看起来」、「似乎」、「很可能」、「表明」、「与……一致」、「一种解读是」、「说得通」、「可能曾是」、「证据指向」。

避免使用的词:

  • 「显然」。若真的显然,用户不会问
  • 「清楚」。几乎总在并不清楚的主张前
  • 「当然」。同上
  • 「只是」(如「这只是为了性能」)。带有轻视意味,常隐藏不确定性
  • 「我认为」/「我相信」。你在综合证据,非给个人意见。用「证据表明」。

今天「说得通」的代码,写它的理由可能已经不适用,或者当时就不对。不要给乱的历史补一套干净的理由。不要假设作者做了「对」的事,再倒推着替它辩护。不要假设前后一致的模式是有意的,它可能只是复制粘贴。不要把没有证据,当成证据表明这件事不存在(「没人提过安全方面的顾虑,所以当时一定不在意」)。

用户常把假设嵌在问题里:「我们为什么这样做,我猜是为了性能?」不要直接确认。这个猜测是调查的起点,不是待验证的结论。把它当作候选之一,独立查证据。证据支持,就带引用说明。不支持,也说明,并写出证据实际支持什么。

两条来源都写进输出,并附上引用。不要选那个更整齐的故事。例如工单说「客户 X 的合规要求需要这个」,PR 说「清理这块的技术债」。两条都可能是真的(工单推动了这项工作,PR 写出的是作者自己的说法),也可能有一条是错的。让用户来判断。

诚实的「我们不知道」是最有价值的输出之一。用户会由此知道:答案不在明显的地方;得去问人(原作者、产品负责人、团队负责人);或者可以决定这个问题不值得再追。不标出缺口,反而用听起来有把握的猜测填上,会实实在在伤害用户,因为他们会照着猜测去行动。每个缺口都要具体写出:问题是什么,搜了哪些来源,每个来源搜了什么,找到了什么(没有,或只有沾边的材料)。

合成器交出输出之前,检查「已经查到的」和「可以合理推断的」里的每条主张。每条要么有引用,要么移到推断或假设。措辞要和它的层级匹配。不要把代码当成它自身意图的证据。如果这样做了,删掉或改到别的层级。输出里要有「还不知道的」一节。如果完全没提缺口,这很可疑。要么证据异常完整,要么有东西被盖过去了。