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

还没有读者喜欢这篇文章。
No swimming sign with alligator biting it

佛罗里达州州立图书馆和档案馆,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、他们的博客和第三方论坛上写文章。虽然这可能很好,但这也是最差实践的解决方案蓬勃发展并获得势头的好方法。接纳这些人,让他们成为您项目的官方文档工作的一部分,有很多好处。

与小说写作不同,小说写作的普遍建议是直接开始写,但对于技术写作,您需要稍微计划一下。在开始之前,您应该问自己几个问题。

谁?

第一个问题是谁?。您是为谁写作?一些专业技术作家会创建 人物角色,以便他们在写作时可以这样想:“莫妮卡在这种情况下需要知道什么?” 或“马库斯可能在这个主题上遇到什么样的问题?” 然后据此写作。

在这个过程的这个阶段,记住并非所有的受众都是年轻、白人、说英语的男性 他们从小就看 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 Server 文档中,我们有一份名为 《入门指南》 的文档,其中涵盖了您在开始之前需要了解的内容。该文档的目标是划定一条界限,说明什么是文档范围之外的内容,同时还将人们指向实际上深入涵盖这些内容的资源。因此,HTTP 规范、DNS 的内部工作原理以及内容问题(例如 HTML 和 CSS)都明确地不在文档范围之内,但每个使用 Apache Web Server 的人都需要了解这些内容。

文档类型

一旦您确定了范围以及您要为谁写作,您可以为他们编写几种不同类型的文档。Anne Gentle 将它们分类如下

从这里开始

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

参考指南

参考指南是全面的,通常非常枯燥。在这里定义术语,解释函数的输入和输出,并给出示例。语气是事实性和切中要害的。没有太多讨论或对话。声音通常是非个人的。

教程

教程手把手地引导您前进。它们向您展示每个步骤,偶尔会在路径旁的长椅上坐下来解释特定步骤的理由。它们非常健谈,有时甚至很健谈。声音是个人化的;您是在与早期人物角色阶段定义的特定人说话。

学习/理解

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

食谱/配方

食谱 通常是 O'Reilly 技术图书目录中最畅销的部分,这是有原因的。人们想要解决方案,而且他们现在就想要。您的文档的食谱或配方部分应提供针对常见问题的剪切粘贴的最佳实践解决方案。它们应该附带解释,但您应该理解,大多数食谱用户会剪切并粘贴解决方案,这对他们来说就结束了。

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

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

配方也应提倡最佳实践,而不仅仅是最简单或最快的解决方案。永远不要告诉他们如何不去做,因为他们只会剪切并粘贴那个,然后陷入比他们开始时更糟糕的境地。

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

错误消息

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

考虑以下两条错误消息

`ERROR. FORBIDDEN`

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

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

理念

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

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

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

在他的 《Programming Perl》(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 软件基金会的董事、成员和会议副总裁。

24 条评论

很棒的文章,Rich。您说得太对了!

我从事这个行业多年,文档的范围从不存在到可怕,再到不正确,以及——非常偶尔地——到真正优秀。我自己写了很多文档,并试图在实践中学习。我不记得见过任何关于如何编写文档的课程。

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

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

>“我不记得见过任何关于如何编写文档的课程。”

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

回复 ,作者:dboth

很棒的文章,切中要害!

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

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

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

当我在 1990 年代担任一家 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 (未验证)

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

回复 ,作者:Rikki Endsley

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

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

换句话说,他们的软件的质量与他们的文档的质量一样好。

回复 ,作者:Rikki Endsley

“我怀疑很少有火箭科学家是记录火箭科学的合适人选。如果编写优秀的文档如此容易”

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

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

一个好的工程师会编写简洁、易读、易懂的文档。一个坏的工程师会编写糟糕或没有文档。毕竟,这是使这样的人成为坏工程师的最大原因之一,因为如果必须对其进行逆向工程才能使用它,那么他们的工作就很粗制滥造。

回复 ,作者:Rikki Endsley

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

回复 ,作者:UX-admin (未验证)

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

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

回复 ,作者:pilhuhn

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

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

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

回复 ,作者:新晋技术作家

`文件权限禁止访问。(ERRNO 03425)`

这不是一个好的错误消息。在我看来,编写此代码的程序员应该被解雇。

任何关于文件的错误消息,如果未提供完整路径和文件名,几乎与“ERROR. FORBIDDEN”没有什么区别

“这句话是那些问了问题的,在我们这些开明人士看来,回答这些问题有损我们的尊严,但借此机会打压一下新手的自尊心却不有损尊严的人说的。”

我想对它的理解可以更乐观一些。

“当我出生时,我还没有«开明»。”
“您和我一样。”
“所以,您可以!”
“RTFM,伙计!”

也许...

“您问的问题很简单。通过自己学习的机会不会被我的«热情友善»所扼杀。”

“我们俩都是一样的野兽。”
“所以 RTFM,伙计!”

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

在任何情况下,“耐心和同理心是编写优秀文档的基础”,我们完全同意这一点。

感谢您思考和撰写关于这些主题的文章!

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

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

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

文档是必须的。不仅用于记录,还用于进一步开发。当您回顾并阅读它时,您会发现改进的空间。我见过非常糟糕的文档,您不知道这个人想表达什么,但英特尔 OA&M API for Linux 操作系统手册为异常情况提供了一个很好的例子。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.