RTFM?如何编写值得阅读的手册

尚无读者喜欢这篇文章。
No swimming sign with alligator biting it

State Library and Archives of Florida, modified by Rikki Endsley

定义RTFMRead The F'ing Manual 的缩写)。有时也被讽刺地称为 Read The Fine Manual,这个短语常被那些自诩为“启蒙者”的人用来回应新手提出的问题,他们认为回答这些问题有损自己的尊严,但借此机会打击新手的自尊心却不觉得有失身份。

您是否注意到,一个开源社区越频繁地告诉您 RTFM,其 FM(手册)就可能越糟糕?我多年来一直在思考这个问题,并得出结论,这是因为耐心和同理心是编写优秀文档的基础,就像它们是成为一个好人的基础一样。

首先,一些免责声明。

虽然我从事开源文档编写工作已近 20 年,但我没有接受过任何实际培训。有些人接受过相关培训,并且市面上也有一些非常棒的书籍,如果您对此感兴趣,应该阅读一下。

首先,我推荐 Anne Gentle 撰写的 《Conversation and Community》。如果您正在寻找关于这方面的会议,我建议参加两个:Write The DocsOpenHelp

这篇文章的标题来源于 Kathy Sierra,她在多年前的一次演讲中展示了一张 幻灯片,上面写着:“如果你想让他们 RTFM,那就编写更好的 FM。” 但我们该如何做到这一点呢?

开源世界中有一个普遍的观点:每个人都知道文档很糟糕,没有人想编写文档,而且情况就是这样。但事实是,有很多人想编写文档。只是我们让他们参与变得太难了。所以他们在 Stack Overflow、他们的博客和第三方论坛上撰写文章。虽然这可能很好,但这也是最差实践解决方案蓬勃发展并获得势头的好方法。接纳这些人,让他们成为您项目官方文档工作的一部分,有很多好处。

与小说创作中普遍建议的“直接开始写作”不同,在技术写作方面,您需要稍作规划。在开始之前,您应该问自己几个问题。

谁?

第一个问题是谁?。您是为谁写作?一些专业技术作家会创建 用户画像,以便他们在写作时,可以这样想:“Monica 在这种情况下需要了解什么?” 或者“Marcus 在这个主题上可能遇到什么样的问题?” 然后据此写作。

在这个过程中,记住并非所有受众都是年轻、白人、说英语的男性 看着 Monty Python 长大 的人至关重要。

案例 A:Python 文档

Python 文档 中充满了 Monty Python 的典故

Screenshot of Python documentation with Monty Python skit references

 

现在,请不要误解我的意思:Python 文档在很大程度上是很棒的。但我对它有一个抱怨——内部笑话。Monty Python 式的幽默贯穿于所有文档,这是一把双刃剑。内部笑话形成了一种社群意识,因为你get到了笑点,所以你就在圈内。除非你没有 get 到。在这种情况下,内部笑话鲜明地指出你不在圈内。在此处要谨慎行事。考虑包含一个参考指南来解释这些笑话,并且在死鹦鹉的例子中,指向一个 YouTube 视频

口语化表达也是如此。

案例 B:PHP 文档

在这个 PHP 文档的示例 中,英语谚语“finding a needle in a haystack”(大海捞针)被引用,以使示例更易于理解。如果您是以英语为母语的人,这个例子很棒,因为它清楚地表明了哪个参数是哪个。然而,对于非英语母语的读者来说,这个例子表明他们不是目标受众,这可能会对将新人引入您的社区产生寒蝉效应。

哪里?

下一个要问的问题是哪里?。是的,您需要在您的项目网站上提供文档,但对话还在哪里发生?除非在极少数情况下,否则 StackOverflow 等其他站点实际上是您项目的默认文档。如果您真的关心帮助您的用户,您需要去他们所在的地方。如果他们在 Twitter、Facebook 或 AOL 上提问,您需要去那里,在那里回答他们的问题,并给他们指向官方文档的链接,以便他们知道下次在哪里查找。

您无法控制人们在哪里进行对话,试图这样做会被视为与您的受众脱节。(顺便说一句,他们无论如何都不是您的受众。)

有一次,当我在一家前雇主工作时,我们发现我们的受众正在 Facebook 上进行对话,而不是在我们的网站上。当权者决定我们必须阻止这种情况,于是我们建立了自己的内部社交网站。然后我们告诉所有人,在讨论我们的组织时,他们必须使用它——而不是 Facebook。我猜您能猜到这对我们来说效果如何。

但是,当您忽略 StackOverflow、Twitter 和各种第三方网站上的受众时,您也在做同样的事情,因为他们不在正确的地方。

什么?

关于机制。您应该写什么?

范围

您必须决定的第一件事(是的,您需要决定这一点,因为不一定只有一个正确的答案)是您的文档范围是什么。也就是说:您愿意涵盖哪些主题?当然,这意味着其他所有内容都超出范围,应该推给其他人的文档。

例如,在 Apache Web 服务器文档中,我们有一份名为 《入门指南》 的文档,其中涵盖了您在开始之前需要了解的内容。该文档的目标是划清界限,说明哪些内容超出文档范围,同时还引导人们查找实际上深入涵盖这些内容的资源。因此,HTTP 规范、DNS 的内部工作原理以及内容事项(如 HTML 和 CSS)都明确超出了文档范围,但每个使用 Apache Web 服务器的人都需要了解这些内容。

文档类型

在您确定了范围以及您的写作对象之后,您可以为他们编写几种不同类型的文档。Anne Gentle 将它们分类如下

从这里开始

就像我之前提到的《入门指南》文档一样,这是您告诉用户他们在开始之前需要了解什么的地方。

参考指南

参考指南是全面的,通常非常枯燥。这是定义术语、解释函数输入和输出以及给出示例的地方。语气是实事求是,切中要点。没有太多讨论或对话。声音通常是非个人化的。

教程

教程手把手地引导您前进。它们向您展示每个步骤,有时会在路径旁的长椅上坐下来解释特定步骤的基本原理。它们非常健谈,有时甚至很健谈。声音是个人化的;您是在与之前用户画像阶段定义的特定人员交谈。

学习/理解

学习/理解文档通常从教程链接过来,它们会更深入地挖掘。它们调查特定事物的“为什么”和“如何”。为什么做出某个决定?它在代码中是如何实现的?这件事的未来是什么样的?您如何帮助创造那个未来?这些文档有时最好以博客文章的形式完成,而不是作为正式文档的一部分,因为它们可能会严重分散那些只想解决问题的人的注意力。

Cookbook/食谱

Cookbooks》通常是 O'Reilly 技术图书目录中最畅销的部分,这是有原因的。人们想要解决方案,而且他们现在就想要。文档的食谱或 Cookbook 部分应提供针对常见问题的即用型最佳实践解决方案。它们应该附带解释,但您应该理解,大多数 Cookbook 用户会复制粘贴解决方案,然后就到此为止了。

您的很大一部分受众只关心解决他们眼前的问题,因为这就是他们获得报酬所要做的一切,您需要理解这是一个完全合理的需要。当您组装新的宜家书桌时,您不关心为什么选择特定的螺丝尺寸,您只是想要说明书,并且您期望它们能起作用。

因此,至关重要的是,示例已经过测试。无论示例多么微不足道,您都必须对其进行测试,并确保它能按预期工作。许多令人沮丧的时间都花在了试图弄清楚为什么文档中的示例不起作用上,而只需几分钟的测试就可以发现冒号应该改为分号。

食谱还应提倡最佳实践,而不仅仅是最简单或最快的解决方案。永远不要告诉他们如何不这样做,因为他们只会复制粘贴,然后陷入比开始时更糟糕的困境。

我最喜欢的网站之一是 There, I Fixed It,它展示了人们在解决问题时的聪明才智,但没有过多考虑其解决方案可能造成的后果——他们只是想解决问题。

错误消息

是的,错误消息也是文档。有用的错误消息,实际上指向解决方案,可以节省无数的搜索和挫败时间。

考虑以下两条错误消息

`ERROR. FORBIDDEN`

`Access forbidden by file permissions. (ERRNO 03425)`

第一条消息令人震惊,但毫无帮助,需要大量摸索才能弄清楚为什么被禁止。第二条消息告诉您这与文件权限有关,并且还额外提供了一个错误编号,您可以使用该编号在 Google 上搜索许多详细说明如何解决问题的文章。

理念

这种想法源于多年来忍受技术支持渠道——IRC、电子邮件、正式文档、Usenet 等等。我们这些掌握答案的人,似乎想让新手感到困难。毕竟,我们记得,我们赤着脚在雪地里上学,又走回来,不是吗?我们通过阅读代码和实验来弄清楚如何让事物工作。我们为什么要让这些孩子更容易呢?他们应该被强迫去它,就像我们一样,对吧?

技术世界每天都变得越来越复杂。您应该知道的事情清单一直在增长,没有人可以成为所有方面的专家。期望每个人都做完功课并提出聪明的问题不仅是不合理的,而且正在变得不可能。

富有同情心的技术支持——以及更好的文档——是人们有效使用您的软件的唯一途径。而且,如果他们在合理的时间内无法获得答案,他们将使用具有更好入门体验的不同解决方案。

在他的 《Programming Perl》 第一版书中,Perl 编程语言的创建者和该社区的创始人 Larry Wall 开玩笑地谈到了程序员的三种美德:懒惰、急躁和傲慢

对这个笑话的解释 非常值得一读,但请记住,这些是程序员作为程序员,与计算机相关的角色中的美德。在 1999 年出版的 《Open Sources: Voices from the Open Source Revolution》 一书中,Larry 解释说,作为一个人,与他人交往时,我们应该渴望的三种美德是:勤奋、耐心和谦逊。

当我们帮助人们解决技术问题时,急躁会被视为傲慢。“我的时间比你的问题更重要。” 傲慢被视为轻视。懒惰呢?好吧,那就是懒惰。

保持耐心和友善,帮助人们以他们自己的节奏前进(即使感觉很慢),会被视为尊重。欢迎处于任何水平的人们,并耐心地帮助他们提升到下一个水平,这就是您建立社区的方式。

不要让人感到愚蠢:这必须是一个核心目标。

即使世界上其他人都很混蛋,您也不必如此。

文档

专栏



本文是 Rikki Endsley 协调的“Doc Dish”专栏的一部分。要为本专栏投稿,请提交您的故事想法或通过 open@opensource.com 联系我们。

Rich Bowen
Rich 是 AWS 的开源倡导者。他是 Apache 软件基金会的董事、成员和 VP 会议主席。

24 条评论

好文章,Rich。你说得太对了!

我从事这个行业多年,文档的质量参差不齐,从不存在到糟糕,到不正确,再到——极少数情况下——真正优秀。我自己也写过很多文档,并试图在实践中学习。我不记得曾经上过关于如何编写文档的课程。

您提到的一些事情在我阅读您的文章时也一直在我的脑海中盘旋。我加入的一个邮件列表上有人咆哮说,另一个人试图理解一些文档时,“学习英语”,而另一个邮件列表则在持续讨论我使用的应用程序缺少文档的问题。

许多本应包含软件文档的网站都不完整,以至于毫无用处。很多时候,他们都在请求帮助编写文档,但大多数人都不够关心,宁愿抱怨也不愿贡献。

>"I do not recall ever having seen a class in how to do documentation."

https://www.google.com/?gws_rd=ssl#q=technical+writing+class

回复 作者 dboth

好文章,切中要害!

我在大学的 CS 课程作业中包含了一门技术写作课程。这门课程超出了正常的 Eng101 - 基础写作的要求。一位伟大的讲师讲授的优秀课程。作为课程的一部分,我们必须描述一个过程,描述一个对象——特别是一个工具以及如何使用它。此外,还必须为不同的受众(新手、基本、高级、专家等)写作。

像这样的课程应该成为任何技术领域——工程、计算机等——的人的必修课。它不仅为我向最终用户(想想——客户)解释事情奠定了基础——而且同样重要的是,也为企业领导层奠定了基础。那些决定您是否能保住职位的人。

我告诉我的孩子们——您能学到的最重要的技能是有效沟通。这超越了您可能获得的任何技术(专业)能力。如果您无法有效地向他人传达您的想法、想法或概念,那么您认为自己在提升职位方面能走多远?

当我在 20 世纪 90 年代担任一家 IT 公司的技术总监时,我常说,没有适当文档的程序是不存在的。我仍然认为这是正确的。这是一篇及时而精彩的文章。请将副本发送给 systemd 的作者。

Rich - 一篇精彩的文章!

我现在是一名技术作家,但以前是一名系统管理员,因此可以体会到优秀文档的价值。尽管在某些人看来很奇怪,但有些人*喜欢*编写文档。

如果您的开源项目缺乏优秀的文档,也许可以发出求助呼吁。可能不总是有人回应,但问一下也无妨。对于一位初出茅庐的技术作家来说,在版本控制存储库中公开访问的工作作品集可能是展示他们的工作和能力的绝佳方式。

在工业界担任嵌入式系统软件/固件工程师多年后,我最近才接触开源。在过去的几天里,我一直在通过电子邮件与我的一些行业同事就这个话题进行对话,所以这篇文章对我来说非常及时。

硬件中心的高科技领域是如何生成文档的?是的,有技术作家负责编写最终用户文档,也有项目经理、架构师和工程师负责与技术作家合作,以确保最终用户文档的完整性和准确性。

而且,作为其工作描述的核心部分,项目经理、架构师和工程师必须生成各种类型的文档,作为设计和实施过程的一部分。这些文档是首先交给技术作家用于生成最终用户文档的内容。它们还有助于以非常实质性的方式将技术作家带入设计、实施和测试过程。

哪些可以应用于开源?第一步是什么?胡萝卜在哪里?

是什么会促使开源项目经理生成需求规范,开源架构师生成设计文档,开源工程师生成实施文档?

1) 如果您使他们更容易(更快)上手,您将获得更高质量的人才为您的项目做出贡献。
2) 您将有一些东西可以交给技术作家,让他们更快地上线。
3) 如果您花一些时间记录需求、设计和实施等内容,您可能会得到更好的产品。

我喜欢它。再说一遍,经常说。我是一个客户服务型的人,我爱人,碰巧也喜欢开源,但通常不喜欢那些运行开源项目的人。所以我写免费书籍只是想把局外人带进门,一直警告他们这不是一个好地方,但你肯定可以完成很多工作。我也是一位经验丰富的公众演讲者,也许有一天我会有机会教新手 Linux。在那之前,我希望有一个缓冲区,里面的人不要那么暴躁。

阅读完整手册 - 而不是薄薄的用户手册。完整手册应有尽有。
在超链接出现之前,我们使用脚注参考文献。
对于汽车修理工,请阅读维修手册,而不是操作员手册或用户手册。

这一切,为了什么?

编写文档不是火箭科学,您不是在设计燃料或发动机,也不需要执行物理计算!

编写该死的文档,使其逐步进行:文档只需要编写成保证按照步骤可以从状态 A 到状态 B,并解释这些步骤的作用。“牵着用户的手”;就这么简单。

示例,示例,示例。将程序描述为参考,但放入大量示例,即使看起来很傻:展示示例,以便读者在消费这些信息时可以出现清晰的模式。UNIX(尤其是 Solaris)手册页是这方面的一个很好的例子:它们包含系统上每个程序的详细参考,但每个手册页也包含示例,而且有几个,以便可以发现模式,并且它的编写方式使其加强和完善了手册的其余部分。

相比之下,GNU/Linux 操作系统中的手册页编写得非常糟糕,示例在那里是一个例外,而不是规则,以至于每个人都避之不及,因为它们对于设置事物毫无用处,对于理解主题也毫无用处。

什么是好的文档?《AWK》和《C 编程语言》书籍是关于如何系统地编写关于特定主题的通用文档的很好的例子。如果您需要示例,请不遗余力地寻找。docs.sun.com(现在是 docs.oracle.com)或 techpubs.sgi.com(IRIX 部分)也是系统编写文档的很好的例子。

再说一遍,编写好的文档不是火箭科学,也不需要像上述文章中那样进行广泛的哲学思考:当您有疑问时,请逐步编写。故事结束!

您说得对 - 文档不是火箭科学。文档需要完全不同的技能组合。事实上,我怀疑很少有火箭科学家是记录火箭科学的合适人选。如果编写好的文档如此容易,那么所有开源项目都会有它。

回复 作者 UX-admin (not verified)

它当然需要一种不同的格式塔——包括态度——但这种纪律是有回报的。
向不觉得直观的人教授某事会发挥额外的脑回路,并增强原始技能组合。然而,一些非常聪明(在一个领域)的人并没有被赋予所有相关的能力,可能需要彻底的补习培训,而其他人则在较早的年龄段成长。

回复 作者 Rikki Endsley

这很容易,困难不是问题,问题是懒惰的人宁愿编写代码也不愿编写文档!

这些人还有另一个问题,即他们没有意识到,如果为了使用他们的程序,必须首先对其进行逆向工程,那么他们的程序几乎毫无用处。

换句话说,他们的软件只和他们的文档一样好。

回复 作者 Rikki Endsley

"I suspect that few rocket scientists are the right people to document rocket science. If it were so easy to write good documentation"

顺便说一句,这是一个带有偏见的断言。

可以通过文档的质量(或缺乏)来判断一位工程师的好坏。

一位优秀的工程师会编写简洁、易于阅读、易于理解的文档。一位糟糕的工程师会编写糟糕或没有文档。毕竟,这是使一个人成为糟糕工程师的最大原因之一,因为如果必须对其进行逆向工程才能使用,那么他们的工作就是马虎的。

回复 作者 Rikki Endsley

在编写了初学者友好的逐步教程之后,仍然有人抱怨文档,因为我胆敢将写作风格和演示格式定位为抱怨者的类型。为什么您关注命令行而不是告诉人们单击“XYZ”按钮?嗯...文档后面提到了点击方式并进行了演示,在安装应用程序的步骤之后。唉,没有人能让人满意;编写文档非常耗时才能做好,但这是一项吃力不讨好的工作。

回复 作者 UX-admin (not verified)

我认为偏离 StackOverflow 等网站的部分原因是,这些网站让贡献者脱颖而出:他们以他们的名字(因为它自动出现在他们的帖子下方)被列出,他们在成功贡献时获得积分和状态升级。
可能最重要的是:他们可以在注册后立即开始写作,而无需任何额外的权限——(复制)编辑稍后由社区和版主完成。
博客文章也是如此(除了积分)。

Heiko,
您提出了很好的观点
1. 贡献文档应该很容易
2. 复制编辑/润色应由其他贡献者/编辑完成
3. 贡献者应因文档而获得认可,他们的贡献应受到社区的赞赏,因为它们对项目非常有帮助

回复 作者 pilhuhn

好文章。最佳台词:“不要让人感到愚蠢:这必须是一个核心目标。” 我想每次看到一个自述文件说类似这样的话时都指出这个概念
“Fizbuzz 非常容易使用。在不到 5 分钟的时间里,我实际上制作了一个完全可操作的 RESTful CRUD FPS:只需从 github 下载并将 repo 加载到您的持久性后兼容代理 shim 类中。无需代码,它适用于任何工具!还有什么比这更简单的呢?”

感谢您的撰写!我自己也是一位初出茅庐的技术作家,并且一直渴望获得软件和开发相关文档的经验,但一直受阻于如何取得进展。最近有人向我建议开源项目,但作为一个相对非技术人员(与程序员相比),我不确定我是否可以通过“仅仅”提供文档来参与。这篇文章绝对给了我一些很好的指导,特别是关于所需的心态,我渴望听到任何愿意提供建议的人的建议。

如果您可以清晰、简洁、连贯地写作,请为开源或自由/自由软件项目的文档做出贡献。您甚至可以从为众多命令行应用程序编写有用的 man(ual) 页面开始;使它们易于翻译成英语以外的其他语言,以进一步鼓励其他有抱负的技术作家做出贡献。或者,找到软件项目的 Wiki 并对其进行修订,使其不仅反映软件的当前状态,还反映如何实施和使用该软件。这些项目 Wiki 中有太多过时且遗漏了重要信息,即使是最新的也是如此。

回复 作者 New Tech Writer

`Access forbidden by file permissions. (ERRNO 03425)`

这不是一条好的错误消息。编写此代码的程序员应该被解雇,恕我直言。

任何关于文件的错误消息,如果未给出完整路径和文件名,则几乎与 `ERROR. FORBIDDEN` 没有什么不同

“a phrase uttered at people who have asked a question that we, the enlightened, feel is beneath our dignity to answer, but not beneath our dignity to use as an opportunity to squish a newbie's ego.”

我想对它有更乐观的理解。

“When I was born, I wasn't yet «enlightened».
You're just like me.
So, You can!
RTFM man!”

也许...

“What you ask is quite simple. The opportunity to learn by yourself is not going to be crushed by my «warm kindness».

Both of us are the same brute animals.
So RTFM man!”

另一方面,实际上是最差的 FM,甚至比没有还糟糕吗?如果不是,它可以作为起点吗?

无论如何,“耐心和同理心是编写优秀文档的基础”,我们完全同意这一点。

感谢您思考和撰写这些主题!

回复:英语使用者和“大海捞针”

这是一篇很棒的文章,但我在想上面的例子很糟糕。如果读者能够准确地翻译这个短语的字面意思,那么应该很容易理解它所指的问题。据我所知,种植和收获草供牛食用并不是只有英语国家才有的技能,而且我认为其他国家也有针。

另一方面,Monty Python 的例子是完美的。

文档是必须的。不仅用于记录,还用于进一步开发。当您回顾并阅读它时,您会发现改进的空间。我见过非常糟糕的文档,您根本不知道这个人想表达什么,但 Intel OA&M API for Linux Operating manual 为异常情况提供了一个很好的例子。www.manualbirds.com/manuals/intel-oam-api-for-linux-operating-user-manual-252543-17
假设读者是业余爱好者。我认为这是经验法则。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.