technical-writing

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Technical writing

技术写作

The goal is writing a tired engineer understands on the first read. Four layers get you there, one question each: what kind of document is this, how do sentences address the reader, how much does each sentence carry, and can any sentence be read two ways. Apply all four.
Three rules sit above the layers:
  • Cut every word that does no work. If the sentence survives without a word, the word goes. "In order to" is "to". "It is important to note that" is nothing.
  • Use the short, everyday word. "Use", not "utilize". "Help", not "facilitate". "Do", not "perform". A long word has to buy its length with precision.
  • When a rule makes a sentence worse, fix the sentence another way or leave it alone. The rules serve the reader. A sentence that follows every rule and sounds like a machine wrote it has failed.
The codebase is the word list. Write the real symbol, file, flag, or command name, not a synonym or a description of it.
Don't invent jargon. Use the words a developer would say out loud: "move", "delete", "a budget that only decreases", not "evacuate", "ratchet", or "endgame". A named pattern is fine when the doc says what it means the first time. Propose a new offender and its replacement as an addition to
unslop
's abstract-metaphor rule in your reply, with the diff. Don't edit that skill.
目标是让筋疲力尽的工程师一读就懂。要达成这一点,需要四层原则,每层只回答一个问题:这是什么类型的文档、句子如何面向读者、每个句子承载多少信息,以及任何句子是否可能有两种理解。四层原则都要应用。
三条规则位于这些层之上:
  • 删掉每一个不起作用的词。 如果删掉某个词后句子依然成立,就删掉它。“In order to(为了……)”应简化为“to”;“It is important to note that(需要注意的是……)”应直接删去。
  • 使用简短、日常的词。 用“use(使用)”,不用“utilize(利用)”;用“help(帮助)”,不用“facilitate(促进)”;用“do(做)”,不用“perform(执行)”。长词必须以精确性来证明其长度合理。
  • 如果规则让句子变得更糟,就换一种方式修改句子,或者干脆不用这条规则。 规则服务于读者。如果一个句子遵守了所有规则,却听起来像机器写的,它就失败了。
代码库就是词汇表。写出真实的 symbol、文件名、flag 或命令名,不要用同义词或描述代替。
不要生造术语。使用开发者会口头说出的词:“move(移动)”“delete(删除)”“a budget that only decreases(一个只会减少的预算)”,而不是“evacuate(撤离)”“ratchet(棘轮)”或“endgame(终局)”。对于有名称的模式,只要文档首次出现时说明其含义即可。在回复中,提出一个新的不良表达及其替换词,作为对
unslop
skill 中“抽象隐喻”规则的补充,并附上 diff。不要编辑该 skill。

Vary the rhythm

让节奏有变化

The layers decide what a document says and how much each sentence carries. A doc can obey all of them and still read machine-written: every sentence clipped short, no view anywhere, nothing specific.
  • Mix sentence lengths on purpose. Short sentences land a point. Longer ones that take their time carry a fact with its condition or consequence.
  • One thought per sentence does not mean one length per sentence. Split the sentence that carries two thoughts. Keep the long sentence that carries one.
  • Have a view where the mode allows it. Explanation weighs trade-offs, so say what you make of them instead of listing pros and cons. Reference stays dry.
  • Be specific over sterile. Not "schema changes can cause issues" but "a column rename fails the build".
各层决定文档要表达什么,以及每个句子承载多少信息。一篇文档可能遵守所有规则,却仍然读起来像机器写的:每个句子都被剪得很短,完全没有观点,也没有具体信息。
  • 有意识地混合句子长度。短句用来落点。需要展开的长句承载事实及其条件或后果。
  • 每句一个想法,并不意味着每句只能有一种长度。承载两个想法的句子要拆开。只承载一个想法的长句则保留。
  • 在模式允许时表达观点。Explanation 要权衡取舍,因此应说明你如何看待这些取舍,而不是罗列优缺点。Reference 则保持平实。
  • 要具体,不要泛泛而谈。不要写“schema 更改可能引发问题”,而要写“重命名某列会导致构建失败”。

Pick the mode first (Diátaxis)

首先选择模式(Diátaxis)

One document, one mode. Two questions pick it: does the content inform action (doing) or understanding (thinking), and does it serve learning or work?
  • Action + learning: tutorial.
  • Action + work: how-to.
  • Understanding + work: reference.
  • Understanding + learning: explanation.
Use the compass on a whole document or on one sentence.
Tutorial: learning by doing. You are the teacher. The learner's success is your job, not theirs. Open by saying what the learner will build, not what they will "learn". Every step produces a visible result, early and often. Tell them what they should see: the expected output, the prompt change, the log line. Cut explanation to one clause and a link. Teaching pauses break the lesson. Stay concrete. Write as "we", in commands: "First, do x. Now, do y."
How-to: steps to a goal. Solve a problem a person has, not an operation the machine can perform. Assume competence. Skip teaching. Action only: no digressions, no background, no completeness for its own sake. Link those instead. Allow forks and judgment: "If you want x, do y." Name the guide by the task: "How to calibrate the radar array", not "Radar array calibration".
Reference: facts for lookup. Describe. Only describe. No instruction, no persuasion, no opinion. Be dry, complete, and sure. State facts, options, limits, and errors with no hedging. Mirror the structure of the thing described, so code and docs can be navigated together. Put material where readers expect it. Generate from code where possible, so it stays true.
Explanation: understanding and why. One bounded topic, readable away from the product. Each title should tolerate an implicit "About..." in front. Anchor on a real why question. Give context: design decisions, history, constraints, alternatives. Opinion is allowed here and nowhere else.
Don't mix modes: no reference tables inside a tutorial, no tutorial hand-holding inside reference, no arguing inside a how-to. Split and link instead.
Source: diataxis.fr, fetched 2026-07-18.
一篇文档只用一种模式。通过两个问题来确定:内容是用于指导行动(做)还是促进理解(思考),以及它服务于学习还是工作?
  • 行动 + 学习:tutorial。
  • 行动 + 工作:how-to。
  • 理解 + 工作:reference。
  • 理解 + 学习:explanation。
这个指南既可用于整篇文档,也可用于单个句子。
Tutorial:边做边学。 你是老师。学习者的成功是你的职责,而不是他们的职责。开头说明学习者将构建什么,而不是他们将“学会”什么。每一步都要尽早并频繁地产出可见结果。告诉他们应该看到什么:预期输出、prompt 变化或日志行。解释压缩到一个从句并附上链接。教学性停顿会打断课程。保持具体。使用“我们”,并采用命令式:“首先,执行 x。现在,执行 y。”
How-to:用步骤实现目标。 解决一个人实际遇到的问题,而不是执行机器能够执行的操作。假定读者具备相应能力。跳过教学,只提供操作:不要离题、不要补充背景,也不要为了面面俱到而追求完整;这些内容改为链接。允许分支路径和条件判断:“如果你想要 x,就执行 y。”按任务命名指南:“如何校准雷达阵列”,而不是“雷达阵列校准”。
Reference:供查阅的事实。 描述。只描述。不提供指令、劝导或意见。语气要平实,内容要完整,表述要确定。明确说明事实、选项、限制和错误,不做含糊其辞。映射所描述对象的结构,让代码和文档可以对应浏览。把材料放在读者预期看到的位置。尽可能从代码生成内容,以确保它始终准确。
Explanation:理解与原因。 围绕一个有边界的主题,即使脱离产品也能读懂。每个标题前都应能自然地补上隐含的“关于……”。以一个真实的“为什么”问题为核心。提供背景:设计决策、历史、约束和替代方案。这里可以表达观点,其他地方都不可以。
不要混用模式:Tutorial 中不要放参考表,Reference 中不要进行 Tutorial 式的手把手引导,How-to 中不要展开争论。应当拆分内容并添加链接。
来源:diataxis.fr,获取于 2026-07-18。

Write sentences to the reader (Google developer style)

面向读者写句子(Google 开发者风格)

  • Talk to the reader as "you", in the present tense. "Will" only for things that genuinely happen later.
  • Say who does what: "the compiler checks", not "is checked". Passive is fine only when the actor is unknown or beside the point.
  • Write instructions as commands: "Click Submit." State facts plainly. Never "should be done".
  • Put the condition before the instruction: "To delete the document, click Delete." The reader skips what does not apply.
  • Put the common case first. Exceptions after.
  • Sound like a knowledgeable friend. No buzzwords, no figurative language, no "please" in instructions, and never "simply", "easy", or "quickly" in a procedure. If it were simple, the reader would not be here.
  • Don't pre-announce ("we will soon support...") and don't start consecutive sentences with the same phrase.
  • Link with words that say where the link goes: the page title or a short description. Never "click here". Prefer a sentence of context on the page over a link off it.
  • Headings carry the point, not just the topic ("Pick the mode first", not "Modes"). Sentence case. A task heading is a bare verb phrase ("Create an instance"). A concept heading is a noun phrase. One h1 per page, no skipped levels.
  • Numbered lists for sequences, bullets for everything else. Introduce a list with a complete sentence. Keep items parallel.
  • Code goes in code font. UI elements go in bold. Use serial commas. Drop "etc." and say up front that a list is partial.
Source: developers.google.com/style, fetched 2026-07-18.
  • 用“你”称呼读者,并使用现在时。只有确实会在以后发生的事才使用“will”。
  • 明确说明谁做什么:写“编译器会检查”,不要写“会被检查”。只有行为主体未知或不重要时,才使用被动语态。
  • 把指令写成命令:“点击 Submit。”平实陈述事实。绝不写“应该完成……”。
  • 把条件放在指令前:“要删除文档,请点击 Delete。”这样,读者可以跳过不适用的内容。
  • 常见情况写在前面,例外情况写在后面。
  • 语气要像一位知识渊博的朋友。不要使用流行术语或比喻,不要在指令中使用“please(请)”,在操作步骤中绝不写“simply(简单地)”“easy(容易)”或“quickly(快速地)”。如果事情真这么简单,读者就不会来到这里。
  • 不要预先宣布(“我们很快就会支持……”),也不要让连续多个句子以相同短语开头。
  • 链接文字应说明链接目标,使用页面标题或简短描述。绝不要写“点击这里”。如果目标内容就在当前页面上,优先用一句上下文说明,而不是链接到其他页面。
  • 标题应传达重点,而不只是主题(“先选择模式”,不要写“模式”)。使用 sentence case。任务型标题采用不带主语的动词短语(“创建一个实例”)。概念型标题采用名词短语。每页只能有一个 h1,标题层级不得跳级。
  • 顺序步骤使用编号列表,其他内容使用项目符号。用完整句子引出列表。各项保持结构平行。
  • 代码使用代码字体。UI 元素使用粗体。使用系列逗号(最后一个并列项前也加逗号)。不要写“etc.”,而应提前说明列表仅包含部分内容。
来源:developers.google.com/style,获取于 2026-07-18。

Make statements load one at a time (STE rules)

让信息一次只表达一个要点(STE 规则)

  • One instruction per sentence. One thought per sentence everywhere else.
  • Split instructions longer than about 20 words and other sentences longer than about 25.
  • Put the warning or condition before the step it guards: "If hot oil touches your skin, injuries can occur."
  • Keep "the" and "a": "Remove backup file" reads two ways. "Remove the backup file" reads one.
  • Give each word one meaning and one job, then keep it. If "check" means inspect, don't also use it for restrain.
  • Pick one word per action and stick to it: "start", not "start" here and "initiate" there.
  • Write procedures as direct commands, never as narration and never in the passive: "Install the component", not "the component must be installed".
  • Avoid "-ing" words where you can. They take too many grammatical jobs and breed misreadings.
Source: asd-ste100.org (Issue 9, 2025), fetched 2026-07-18. The numbered rules and dictionary live in the spec PDF. The principles above are the transferable core.
  • 每条指令只写在一句话中。其他内容每句话只写一个想法。
  • 指令超过约 20 个词、其他句子超过约 25 个词时,应将其拆开。
  • 把警告或条件放在它所约束的步骤之前:“如果热油接触皮肤,可能会造成伤害。”
  • 保留“the”和“a”:“Remove backup file(删除备份文件)”可以有两种理解,而“Remove the backup file(删除该备份文件)”则只有一种。
  • 让每个词只表达一个含义、承担一项职责,并始终保持一致。如果“check”表示“检查”,就不要同时用它表示“约束”。
  • 每个动作选一个词并贯穿全文:统一用“start”,不要一处用“start”、另一处用“initiate”。
  • 操作步骤要写成直接命令,绝不能写成叙述,也绝不能使用被动语态:写“Install the component(安装该组件)”,不要写“The component must be installed(该组件必须被安装)”。
  • 可以避免时,不要使用以“-ing”结尾的词。它们承担太多语法作用,容易引发误解。
来源:asd-ste100.org(Issue 9,2025),获取于 2026-07-18。编号规则和词典收录在规范 PDF 中。上面的原则是可迁移的核心内容。

Leave no sentence open to two readings (Global English)

不让任何句子产生两种理解(Global English)

  • Keep words like "only" and "not" next to the word they change: "only fails on growth" and "fails only on growth" say different things.
  • Break up long noun strings: "the proto import budget check script" becomes "the script that checks the proto-import budget".
  • Make every "it", "they", and "this" point at one obvious thing. Repeat the noun when in doubt. Never use "this" or "which" to point at a whole clause.
  • Don't drop verbs: "Phase 1 moves the converters and Phase 2 the runtime" leaves Phase 2 without one. Give it one.
  • Keep the small words that show structure. "Ensure that the switch is off" keeps "that" because it makes the sentence parse one way. Never trade clarity for word count.
  • Repeat the article in a series when it prevents a misread: "the client and the host", not "the client and host", when they are two things.
  • Say which parts "and" or "or" joins when a sentence can group two ways. "Both...and", "either...or", and "if...then" are free disambiguators.
  • Use periods, not semicolons. Replace an em dash with a new sentence.
  • Make text in parentheses a full grammatical unit or its own sentence. Never form plurals with "(s)".
  • No slashes: write "a, b, or both" instead of "a/b" or "and/or".
  • Call each thing by one name, everywhere. A doc that says "the gate", "the ratchet", and "the budget check" for one thing teaches three things. Rewording an unchanged sentence between edits costs the same way. Don't churn what didn't change.
  • Skip idioms, colloquialisms, Latin abbreviations, and metaphors. A non-native reader, a translator, and an agent all parse plain constructions best.
Source: Kohl, The Global English Style Guide (SAS Press). Guideline text fetched from the Internet Archive and the SAS sample chapter, 2026-07-18.
  • 让“only”“not”等词紧挨着它们所修饰的词:“only fails on growth”和“fails only on growth”表达的含义不同。
  • 拆分过长的名词串:“the proto import budget check script”改为“the script that checks the proto-import budget”。
  • 确保每个“it”“they”“this”都指向一个明确对象。拿不准时重复名词。绝不要用“this”或“which”指代整个从句。
  • 不要省略动词:“Phase 1 moves the converters and Phase 2 the runtime”会让 Phase 2 缺少谓语。给它补上动词。
  • 保留能显示结构的小词。“Ensure that the switch is off”中的“that”能让句子只有一种解析方式,因此要保留。绝不能为了缩短字数而牺牲清晰度。
  • 当重复冠词能避免误解时,在一系列并列项中重复冠词:如果两者是两个对象,就写“the client and the host”,不要写“the client and host”。
  • 当“and”或“or”可能让句子产生两种分组方式时,要明确它们连接的部分。“Both...and”“either...or”和“if...then”无需额外解释即可消除歧义。
  • 使用句号,不要使用分号。用新句替换破折号。
  • 括号中的文字必须构成完整的语法单位或独立句子。绝不能用“(s)”表示复数。
  • 不要使用斜杠:写“a、b 或两者”,不要写“a/b”或“and/or”。
  • 始终用同一个名称称呼同一事物。如果一篇文档用“the gate”“the ratchet”和“the budget check”指代同一件事,就等于教会了读者三个概念。在不同编辑轮次之间改写未变化的句子,也会带来同样的理解成本。不要无谓改动没有变化的内容。
  • 不使用习语、口语、拉丁文缩写或隐喻。非母语读者、译者和 Agent 都最容易理解平实的结构。
来源:Kohl,《The Global English Style Guide》(SAS Press)。指南文本获取于 Internet Archive 和 SAS 示例章节,2026-07-18。

Voice and repo specifics

语气与仓库专属要求

  • Apply the unslop skill to every doc this skill touches. That skill owns the slop-pattern catalog: AI vocabulary, filler, hedging, formatting tells.
  • PR descriptions and commit messages are writing too. Every layer except Diátaxis applies to them. A PR body is a briefing that a reviewer can read in under a minute. Do not paste swarm logs, SHA lists, or metric tables. Link them.
  • Product UI strings are not documentation. Use your product's copy guidelines for those.
  • Indent code snippets with tabs. Write real paths and real symbols. Make every count or tree claim true at the commit that lands it, and include the command that regenerates it.
  • 对此 skill 处理的每份文档,都应用
    unslop
    skill。该 skill 负责维护低质表达模式目录:AI 词汇、填充语、含糊措辞和格式化痕迹。
  • PR 描述和 commit message 同样属于写作。除 Diátaxis 外,其他各层都适用。PR 正文是一份审阅者一分钟内就能读完的简报。不要粘贴 swarm 日志、SHA 列表或指标表;应提供链接。
  • 产品 UI 文案不属于文档。应使用产品自己的文案规范。
  • 使用 tab 缩进代码片段。写出真实路径和真实 symbol。确保每项数量声明或目录树描述在对应变更实际合入的提交中都真实无误,并附上重新生成对应内容的命令。

Worked example

实例

Before:
Configuration of the proto import ratchet budget script parameters is performed via budget.json. Note that it's important to remember that running with --write, which updates the committed budget to reflect the current count, should only be done when lowering it. If exceeded, CI fails.
After:
budget.mjs
reads the committed budget from
budget.json
and counts the files that import protos. If the count exceeds the budget, CI fails. Run
budget.mjs --write
only to lower the budget.
修改前:
proto 导入棘轮预算脚本的参数配置通过 budget.json 完成。请注意,务必记住,运行带 --write 的命令会更新已提交的预算,使其反映当前计数,但仅应在降低预算时执行。如果超出预算,CI 失败。
修改后:
budget.mjs
从
budget.json
读取已提交的预算,并统计导入 proto 的文件。如果计数超出预算,CI 会失败。仅在降低预算时运行
budget.mjs --write
。