上一篇讲 GitHub 上有哪些地方可以练英语。这一篇更靠前一步:你打开一份英文文档,得先知道它是哪一种。

用错读法,读什么都费劲。用对读法,很多文档你其实只需要读三分钟。


一、先说结论

技术文档不是"一种东西"。它至少有四种基本类型,每一种的写作目的不同,所以结构不同,读法也必须不同。

这个分类不是我编的,来自一个叫 Diátaxis 的文档框架(现在被 Django、Cloudflare、Ubuntu、Gatsby 等一大批项目采用)。它的分法很干净——两个维度切成四块:

偏学习(要懂)偏工作(要用)
偏行动(动手)Tutorial 教程How-to 指南
偏认知(理解)Explanation 解释Reference 参考

四个格子,四种文档。认出来是哪一格,读法立刻就不一样了。


二、Tutorial(教程):唯一一种必须老实照着做的

怎么认

  • 标题常带 Getting Started、Your First ___、Quickstart、Tutorial
  • 有编号步骤,一步一条命令
  • 有预期的输出贴在下面
  • 几乎不解释"为什么"

怎么读

不要读,直接做。

教程是唯一一种"读完再动手"会浪费时间的文档。因为它的设计前提是:你什么都不知道,所以它把每一步都替你决定了。

你做的时候只关心两件事:

  1. 报错了吗
  2. 输出和它写的一样吗

不一样,就是你的第一个真实问题——这时你已经得到了一个可以拿去问的素材。

一个提醒

教程的目的是让你建立信心,不是让你学会。它故意回避了所有边界情况、所有配置选项、所有"如果你的环境不一样怎么办"。

所以:跑通教程 ≠ 会用这个项目。 很多人卡在这一步——教程跑通了,真要写自己的东西就懵了。


三、How-to(指南):直接跳到你需要的那一节

怎么认

  • 标题是任务式的:How to configure HTTPS、Deploying to Kubernetes、Migrating from v1
  • 没有编号步骤的强连续性,每节独立
  • 步骤里会带前提条件(“假设你已经……")

怎么读

只读你当前要解决的那一节,前面的全跳过。

How-to 的写法是"问题导向"的,作者已经假设你有具体目标。你从头读到尾,会读到一堆你不需要的操作。

读的时候只看三个东西:

  1. 前提条件(Prerequisites)—— 你有没有
  2. 命令本身
  3. “Note” / “Warning” / “Caveat” 标记的段落 —— 这是作者踩过坑之后加进去的,价值最高

最容易忽略的一行

How-to 里经常有一句:

This will overwrite your existing configuration.

一句话,五个词。不看,数据就没了。 这类警告句在英文文档里通常很短、很平、很容易滑过去——恰恰是最该停下来读的。


四、Reference(参考):不读,只查

怎么认

  • 表格、列表、参数说明
  • 标题是名词短语:API Reference、Configuration Options、CLI Commands
  • 结构高度规律,重复度高

怎么读

不要通读。永远不要通读。

Reference 是字典。没人会从头读字典。

用法是:先知道"它有什么”,再在需要时查。

所以你要做的是先扫一遍目录/侧边栏,建立一张心理地图:

“哦,这个库有 Client、Session、Auth、Errors 四个部分。”

这张地图比记住任何具体参数都重要。 有了它,你不知道具体怎么写的时候,至少知道该去哪里找。

读一条参数的顺序

一条典型的参数说明长这样:

timeout (float, optional): Maximum seconds to wait before
aborting the request. Defaults to 30. Set to None to disable.
Raises TimeoutError if exceeded.

信息密度最高的读法是倒着读:

  1. Raises TimeoutError if exceeded —— 出错会怎样(先看后果)
  2. Defaults to 30 —— 默认值是多少(不改会怎样)
  3. Set to None to disable —— 特殊情况怎么办(边界)
  4. Maximum seconds to wait —— 它到底是什么(最后看定义)

为什么倒着读? 因为"它是什么"你已经从名字猜到了(timeout 还能是什么),而后三条是你猜不到的。


五、Explanation(解释):唯一一种值得"整篇读完"的

怎么认

  • 标题常带 Understanding、Why、Architecture、Design、Concepts、How ___ works
  • 有大段散文,几乎没有代码
  • 会讲历史、讲取舍、讲"为什么不那样做"

怎么读

这一类要慢读,而且值得读完。

因为 Explanation 不解决任何具体问题——它改变的是你对整件事的理解模型。

判断要不要读的标准很简单:

“我能不能用一句话说清它是怎么工作的?”

不能 → 读 Explanation。 能 → 不用读,去干活。

这类文档的隐藏价值

Explanation 里最值钱的部分,往往是那些**“为什么不用 X 方案”**的段落。

作者写这一段时,通常是他真的试过 X 方案并失败了。这是你没花时间就捡到的经验——比任何正面介绍都有用。


六、四种文体之外,还有五种你天天遇到

Diátaxis 覆盖的是"项目自己的文档"。但实际上你还会碰到这五种,各有各的读法:

1. README

混合体。前三分之一是营销(跳过),中间是教程(照做),后面是指南(按需)。

2. RFC / 规范文档

这是最容易读错的一类。

RFC 里每个句子都在做规定,不在描述。关键在情态动词,而且它们有严格定义(来自 RFC 2119):

词强度含义
MUST / SHALL绝对必须,否则不合规
MUST NOT绝对禁止
SHOULD强建议有正当理由可以不做,但要想清楚
SHOULD NOT强建议同上,反向
MAY / OPTIONAL可选做不做都合规

读 RFC 时只做一件事:把 MUST 和 SHOULD 分清楚。

一个协议实现里,MUST 是红线,SHOULD 是可以商量的。混了这两者,写出来的东西在互操作性上会出问题。

3. API 文档

Reference 的变体,但多一个关键信息:示例请求 + 示例响应。

读 API 文档,先看示例,再看参数表。 一个完整的 curl 调用比十行参数说明更快建立直觉。

4. Release Notes / CHANGELOG

只读三块:

  1. Breaking Changes —— 永远是第一优先
  2. Security —— 有就立刻看
  3. Deprecations —— 现在不坏,但将来会坏

Feature 列表可以扫一眼,其他全跳过。

判断标准:这次升级会不会让我的代码坏掉?——只看会不会坏。

5. 源码注释

最容易忽略、信息密度最高的一类。

好的注释不是在说"这行代码做了什么"(代码自己能说),而是在说:

  • 为什么这么写(// needed because the API returns null on empty)
  • 什么情况下会出问题(// TODO: this breaks if name contains a slash)
  • 什么东西不能动(// DO NOT reorder, order matters here)

读源码时,先扫注释,再读代码。 注释是作者留下的路标。


七、一个二十秒的判断流程

打开一份陌生文档,二十秒内问自己三个问题:

1. 它有没有编号步骤?
   有 → 教程(照做)或指南(跳到需要那节)
   没有 → 继续问

2. 它是表格/列表/参数为主吗?
   是 → 参考(别通读,建地图,按需查)
   不是 → 继续问

3. 它主要是在讲"为什么"吗?
   是 → 解释(慢读,值得读完)
   不是 → 大概是个混合体,按段落判断

这一个流程能省掉你 80% 的无效阅读。


八、三句实话

第一,绝大多数人把 Reference 当 Explanation 读,所以永远读不完。 参数表不是用来通读的,是用来查的。建立目录地图,比记住任何一条参数都值。

第二,教程跑通之后,你会产生一种"我会了"的错觉。 破法是:关掉教程,从零自己写一遍。 写不出来,说明你只是跟着执行,没有理解。

第三,读文档的能力,本质是"提问的能力"。 你不是在读它说了什么,你是在找它有没有回答你正在问的那个问题。带着问题读,比任何技巧都有效。


这是我的个人整理。Diátaxis 框架由 Daniele Procida 提出,公开可查;RFC 2119 的情态动词表是 IETF 的正式规范。文中的判断流程是我的用法,不是原文。


这个系列的其他几篇