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.
-
砍掉每个不干活的词。 去掉一个词句子还成立,词就走。“In order to” 就是 “to”。“It is important to note that” 什么也不是。
-
用短、日常的词。 “Use”,不是 “utilize”。“Help”,不是 “facilitate”。“Do”,不是 “perform”。长词要用精确买长度。
-
规则让句子更糟时,换修法或放着。 规则服务读者。遵守每条规则却读起来像机器写的,已经失败。
The codebase is the word list. Write the real symbol, file, flag, or command name, not a synonym or a description of it.
代码库就是词表。写真实符号、文件、flag 或命令名,不是同义词或对它的描述。
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.
别发明行话。用开发者会说出口的词:“move”、“delete”、“a budget that only decreases”,不是 “evacuate”、“ratchet” 或 “endgame”。命名模式可以,文档第一次要说清含义。新罪犯及其替换作为 unslop 抽象隐喻规则的增补提在回复里,带 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 changes can cause issues”,而是 “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.
-
行动 + 学习:tutorial。
-
行动 + 工作:how-to。
-
理解 + 工作:reference。
-
理解 + 学习: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.”
Tutorial:做中学。 你是老师。学习者的成功是你的活,不是他们的。开场说学习者会建成什么,不是会「学到」什么。每步产出可见结果,早且频。告诉他们该看到什么:期望输出、prompt 变化、日志行。解释砍到一个从句加链接。教学停顿打断课。保持具体。用「we」、命令式:“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”.
How-to:通向目标的步骤。 解决人有的问题,不是机器能执行的操作。假定胜任。跳过教学。只要行动:不跑题、不背景、不为完整而完整。那些用链接。允许岔路与判断:“If you want x, do y.” 按任务命名指南:“How to calibrate the radar array”,不是 “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.
Reference:供查找的事实。 描述。只描述。无指示、无说服、无观点。干、完整、确定。陈述事实、选项、限制、错误,不犹豫。镜像所描述之物的结构,让代码与文档可一起导航。材料放读者期望处。能从代码生成就生成,保持真。
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.
Explanation:理解与为什么。 一个有界主题,离开产品也能读。每个标题前应容得下隐含的 “About…”。锚定真实 why 问题。给上下文:设计决策、历史、约束、备选。观点只在这里允许。
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.
别混模式:tutorial 里别塞 reference 表,reference 里别 tutorial 式搀扶,how-to 里别辩论。拆开再链接。
Source: diataxis.fr, fetched 2026-07-18.
来源:diataxis.fr,抓取于 2026-07-18。
Write sentences to the reader (Google developer style)
对读者写句子(Google developer style)
-
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.
-
用「you」对读者说话,现在时。“Will” 只用于真的之后才发生的事。
-
说谁做什么:“the compiler checks”,不是 “is checked”。仅施事未知或无关时被动才行。
-
指示写成命令:“Click Submit.” 事实直说。绝不 “should be done”。
-
条件放指示前:“To delete the document, click Delete.” 读者跳过不适用的。
-
常见情况先。例外后。
-
像有见识的朋友。无黑话、无比喻、指示里无 “please”,流程里绝不 “simply”、“easy”、“quickly”。若真简单读者不会在这。
-
别预告(“we will soon support…”),别连续句用同一短语开头。
-
链接用说清去哪的词:页标题或短描述。绝不 “click here”。优先页上语境句,而非链出去。
-
标题承载要点,不只主题(“Pick the mode first”,不是 “Modes”)。Sentence case。任务标题是裸动词短语(“Create an instance”)。概念标题是名词短语。每页一个 h1,不跳级。
-
序列用编号列表,其余用子弹。用完整句引出列表。条目保持平行。
-
代码用代码字体。UI 元素用加粗。用牛津逗号。丢掉 “etc.”,事先说列表不完整。
Source: developers.google.com/style, fetched 2026-07-18.
来源: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.
-
一句一个指示。别处一句一个想法。
-
指示约超过 20 词、其他句子约超过 25 词就拆。
-
警告或条件放在它守卫的步骤前:“If hot oil touches your skin, injuries can occur.”
-
保留 “the” 和 “a”:“Remove backup file” 有两种读法。“Remove the backup file” 只有一种。
-
每个词一个意思、一个活,然后保持。若 “check” 表示检查,别再用它表示约束。
-
每个动作挑一个词并坚持:“start”,别这里 “start” 那里 “initiate”。
-
流程写成直接命令,绝不当叙述、绝不被动:“Install the component”,不是 “the component must be installed”。
-
能避就避 “-ing” 词。它们语法职位太多,滋生误读。
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.
来源: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.
-
把 “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” 是免费消歧。
-
用句号,不用分号。em dash 换成新句子。
-
括号内文本做成完整语法单位或独立句。绝不加 “(s)” 做复数。
-
不要斜杠:写 “a, b, or both”,不是 “a/b” 或 “and/or”。
-
每样东西处处一个名字。一份文档对同一东西说 “the gate”、“the ratchet”、“the budget check”,等于教三样。编辑间对未改句子重写词句,代价一样。别搅动没变的。
-
跳过习语、口语、拉丁缩写、隐喻。非母语读者、译者、agent 都最擅长解析白话结构。
Source: Kohl, The Global English Style Guide (SAS Press). Guideline text fetched from the Internet Archive and the SAS sample chapter, 2026-07-18.
来源: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 拥有 slop 模式目录:AI 词表、填充、犹豫、格式征兆。
-
PR 描述和 commit message 也是写作。除 Diátaxis 外每层都适用。PR 正文是审阅者一分钟内可读完的简报。别粘贴 swarm 日志、SHA 列表或指标表。链过去。
-
产品 UI 文案不是文档。那些用产品文案指南。
-
代码片段用 tab 缩进。写真实路径和真实符号。每个计数或树声明在落地 commit 时为真,并附可再生成它的命令。
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.mjsreads the committed budget frombudget.jsonand counts the files that import protos. If the count exceeds the budget, CI fails. Runbudget.mjs --writeonly to lower the budget.