technical-writing
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseTechnical 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. Add new offenders to 's abstract-metaphor rule with their replacement.
unslop我们的目标是让疲惫的工程师一眼就能看懂内容。通过四个层级实现这一目标,每个层级对应一个问题:这是哪种类型的文档?语句如何面向读者?每个句子承载多少信息?是否存在歧义?需同时应用这四个层级。
在这些层级之上有三条核心规则:
- 删掉所有无实际作用的词。如果去掉某个词句子依然通顺,就删掉它。将“In order to”简化为“to”,直接删掉“It is important to note that”这类冗余表达。
- 使用简短的日常词汇。用“Use”而非“utilize”,用“Help”而非“facilitate”,用“Do”而非“perform”。长词汇必须以精准性为代价才能使用。
- 若规则让句子变得生硬,换其他方式修改句子或保留原样。规则是为读者服务的。如果一个句子完全符合规则却读起来像机器生成的,那它就是失败的。
代码库就是词汇表。使用真实的符号、文件、标志或命令名称,而非同义词或描述性表达。
不要创造行话。使用开发者日常会说的词汇:用“move”“delete”“只减不增的预算”,而非“evacuate”“ratchet”或“endgame”。当文档首次提及命名模式时,需说明其含义。将新的违规词汇及其替代词添加到的抽象隐喻规则中。
unslopVary 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".
层级决定了文档的内容以及每个句子承载的信息量。一份完全符合层级要求的文档仍可能读起来像机器生成的:每个句子都过于简短,缺乏全局视角,内容不够具体。
- 刻意混合句子长度。短句用来突出要点,长句则用来附带条件或结果地传递事实。
- 一句一想法不代表一句一长度。拆分承载两个想法的句子,保留承载一个想法的长句。
- 在允许的模式下表达观点。解释类文档需要权衡利弊,因此要说明你的看法,而非仅罗列优缺点。参考类文档则需保持客观简洁。
- 优先具体表达而非空泛表述。不说“架构变更可能引发问题”,而说“列重命名会导致构建失败”。
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. Reach for it whenever you feel unsure what you are writing. Gut feel is often wrong here.
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)
该方法可应用于整篇文档或单个句子。每当你不确定要写什么时,就用它来判断。直觉在这里往往不准确。
教程:在实践中学习。你是老师,学习者的成功是你的责任,而非他们自己的责任。开篇说明学习者将构建什么,而非他们将“学习”什么。每个步骤都要尽早且频繁地产生可见结果。告诉他们预期看到的内容:输出结果、提示变化、日志行。将解释简化为一个分句加链接。教学暂停会打断课程节奏。保持内容具体。用“我们”的口吻,使用命令式:“首先,执行x。现在,执行y。”
操作指南:达成目标的步骤。解决用户实际遇到的问题,而非机器能执行的操作。假设用户具备相应能力。跳过教学内容,只保留行动指令:不要跑题,不要添加背景知识,不要为了完整而完整。将这些内容以链接形式提供。允许分支和自主判断:“如果你想要x,执行y。” 指南名称以任务命名:“如何校准雷达阵列”,而非“雷达阵列校准”。
参考文档:供查阅的事实。仅做描述。不包含指令、说服或观点。保持客观、完整、准确:陈述事实、选项、限制和错误,不要含糊其辞。与所描述对象的结构保持一致,以便代码和文档可以同步导航。将内容放在读者预期的位置。尽可能从代码生成,以确保内容真实准确。
解释文档:理解与原因。围绕一个明确的主题展开,可脱离产品阅读。每个标题前可隐含“关于……”。围绕真实的“为什么”问题展开。提供上下文:设计决策、历史背景、约束条件、替代方案。只有这类文档允许表达观点。
不要混合模式:教程中不要加入参考表格,参考文档中不要有教程式的指导,操作指南中不要有争论。应拆分内容并添加链接。
来源: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.
- Read the awkward sentence aloud. If it stays awkward, rewrite it.
- 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”。
- 明确动作执行者:“编译器会检查”,而非“被检查”。仅当执行者未知或无关紧要时才使用被动语态。
- 指令用命令式:“点击提交。” 事实用平实表述。绝对不要用“should be done”。
- 将条件放在指令之前:“要删除文档,请点击删除。” 读者会跳过不适用的内容。
- 先讲常见情况,再讲例外情况。
- 语气像知识渊博的朋友。不要使用流行语、比喻性语言,指令中不要用“please”,流程中绝对不要用“simply”“easy”或“quickly”。如果事情真的简单,读者就不会来查阅了。
- 不要提前预告(“我们即将支持……”),不要连续用相同短语开头。
- 大声朗读拗口的句子。如果依然拗口,就重写。
- 链接文本要说明跳转目的地:页面标题或简短描述。绝对不要用“点击这里”。优先在页面上提供上下文句子,而非跳转链接。
- 标题要传递核心要点,而非仅点明主题(“先确定模式”,而非“模式”)。使用句首字母大写格式。任务类标题是动词短语(“创建实例”),概念类标题是名词短语。每页一个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”。
- 流程用直接命令式,不要用叙述式或被动语态:“安装组件”,而非“组件必须被安装”。
- 尽可能避免使用“-ing”形式的单词。它们承担过多语法功能,容易引发误解。
来源:asd-ste100.org(第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, or both”替代“a/b”或“and/or”。
- 每个事物在全文中只用一个名称。如果一份文档用“the gate”“the ratchet”“the budget check”指代同一个事物,相当于教了读者三个不同的概念。编辑时随意改写无变化的句子也会造成同样的问题:不要随意修改无需改动的内容。
- 避免习语、口语化表达、拉丁语缩写和隐喻。非母语读者、翻译人员和AI Agent都最容易理解平实的表达。
来源:Kohl,《Global English Style Guide》(SAS Press)。指南文本获取自互联网档案馆和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.
- 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.
- 所有该技能涉及的文档都要应用unslop技能。该技能负责管理冗余模式目录:AI词汇、填充词、模糊表述、格式问题。
- PR描述和提交信息也属于写作范畴。除Diátaxis外,所有层级规则都适用于它们。
- 产品UI字符串不属于文档范畴。需遵循产品的文案规范。
- 代码片段用制表符缩进。使用真实路径和真实符号。确保所有计数或树状结构描述在提交时真实有效,并包含重新生成计数的命令。
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:
reads the committed budget frombudget.mjsand counts the files that import protos. If the count exceeds the budget, CI fails. Runbudget.jsononly to lower the budget.budget.mjs --write
The fixes, by layer: "configuration is performed" becomes " reads", so someone does something (Google). "Ratchet" goes away. The script's real filename does the naming (jargon rule). The five-noun string breaks up into plain clauses (Global English). The hedge "note that it's important to remember" is deleted (cut every word that does no work). The failure condition moves ahead of the step it explains (STE). The buried "should only be done when lowering" becomes a command with "only" next to its verb (STE). "If exceeded" gets a subject: the count (Global English).
budget.mjs修改前:
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.
修改后:
reads the committed budget frombudget.mjsand counts the files that import protos. If the count exceeds the budget, CI fails. Runbudget.jsononly to lower the budget.budget.mjs --write
各层级的修改点:“configuration is performed”改为“ reads”,明确了动作执行者(Google风格)。删掉了“Ratchet”,使用脚本的真实文件名命名(行话规则)。将五个名词组成的长串拆分为平实的分句(Global English)。删掉了模糊表述“note that it's important to remember”(删掉无意义的词)。将失败条件移到了对应的步骤之前(STE规则)。将隐晦的“should only be done when lowering”改为“only”紧邻动词的命令式(STE规则)。为“If exceeded”补充了主语:the count(Global English)。
budget.mjsReview checklist
审阅检查清单
Apply to any prose this skill covers. Item 1 applies only to document sets:
- Is each file one Diátaxis mode, with links where modes meet?
- Is every instruction written as a command, with its condition in front?
- Does any sentence carry two instructions or two thoughts? Split it.
- Can any word be cut without losing meaning? Cut it.
- Is "only" next to the word it changes? Does every "it" point at one thing? Does every clause keep its verb?
- Does each thing have exactly one name across the docs?
- Would a developer say these words out loud? Replace invented metaphors and fancy synonyms with the plain word or the real symbol name.
- Are all symbols, paths, and counts real at this commit, with the commands that regenerate the counts?
适用于该技能覆盖的所有文本。第1条仅适用于文档集:
- 每个文件是否仅对应一种Diátaxis模式,模式衔接处是否添加了链接?
- 所有指令是否都采用命令式,且条件前置?
- 是否存在承载两个指令或两个想法的句子?如果有,拆分它。
- 是否存在可删除且不影响含义的词?如果有,删掉它。
- “only”是否紧邻其修饰的单词?每个“it”是否指向明确对象?每个分句是否保留了动词?
- 每个事物在整个文档集中是否只有一个名称?
- 开发者是否会口头使用这些词汇?将自创隐喻和华丽同义词替换为平实词汇或真实符号名称。
- 所有符号、路径和计数在本次提交时是否真实有效,是否包含重新生成计数的命令?