# 解决什么问题
你的产品有多好并不重要,因为如果它的文档不好,人们就不会使用它。即使他们因为别无选择而不得不使用它,如果没有好的文档,他们也不会有效地使用它或按你希望的方式做。
几乎每个人都明白这一点。几乎每个人都知道他们需要好的文档,大多数人都试图创建好的文档。但大多数人都失败了。
这不是因为他们不够努力,而是因为他们没有以正确的方式做这件事。
用正确的方法可以使你的文档更好。正确的方法也是更简单的方法——更容易编写,更容易维护。
# 文档的分类
文档需要包含并围绕其四个不同的维度进行分类:教程、操作指南、参考指南和解释。它们中的每一个都需要不同的写作模式。使用软件的人在不同的时间、不同的情况下需要这四种不同类型的文档。
不同类型的文档需要围绕它们的目标维度构建,并且能彼此区分。
教程 | 操作指南 | 参考指南 | 解释 | |
---|---|---|---|---|
文档目的 | 学习 | 达成一个目标 | 相关信息 | 深入理解 |
必要内容 | 允许新手入门 | 展示如何解决特定问题 | 描述体系架构 | 详细的解释 |
文档形式 | 一节课 | 一系列的操作步骤 | 干货 | 详细论证 |
例子 | 教小孩子做一道菜 | 烹饪大全中的一个食谱 | 参考的百科全书资料 | 烹饪有关的社会历史的文章 |
这种划分使作者和读者都清楚用什么材料,要怎么样用材料,达到什么目标。它告诉作者如何写,写什么,在哪里写。它使作者免于浪费大量时间 试图将他们想要传递的信息变成一个有意义的形状,因为每一种文档只有一个目标。
一旦你理解了这个分类结构,它就会成为一个非常有用的工具:用来分析现有文档,并了解需要做些什么来改进文档。
# 教程
教程是引导读者完成一系列步骤以完成某种项目的课程。它们是项目所需,以便向初学者展示他们可以用来实现的一些目标。
读者完全以学习为导向,具体来说,他们以学习怎么做而不是学习本身为导向。
重要的是,完成本教程后,学习者就可以理解文档的其余部分以及软件本身。
大多数软件项目都有非常糟糕或根本没有教程。教程可以将你的学习者转变为你的用户。一个垃圾的教程或者没有教程将阻止你的项目获得新用户。
在四种文档的中,教程是最多也最长的,它最难做好。最好的教学方法其实是让老师在场直接教学生。但这几乎是不可能的,我们的教程充其量只是一个远非完美的替代品。
教程需要对初学者有用,让初学者容易照着做,并始终保持更新。
我们可以这样去写教程:
- 允许用户边做边学
- 让用户能入门
- 确保教程是有效
- 确保用户照着做后立即看到效果
- 教程可重复操作
- 专注于具体的步骤,而不是抽象的概念
- 提供最低限度必要的解释
- 只关注用户需要采取的步骤
# 操作指南
操作指南的目的是引导读者解决实际问题,比如:如何创建 Web 表单;如何绘制三维数据集;如何启用 LDAP 认证。
操作指南完全以目标为导向,它与教程完全不同,不应该与教程混淆。教程是你告诉初学者需要知道的内容,操作指南是给具有一定经验的用户解决问题的答案。
在操作指南中,你可以假设一些知识和理解,可以假设用户已经知道如何执行基本操作和使用基本的工具。
与教程不一样,软件文档中的操作指南一般都做得相当好。它们很容易写。
我们可以这样去写操作指南:
- 提供一系列操作步骤
- 注重操作的结果
- 要解决特定问题
- 不需要解释概念
- 允许操作有一定的灵活性
- 只关注操作本身
- 取一个直观的标题
# 参考指南
参考指南是机器及其操作方法的技术描述。
参考指南只有一个目的:描述。它们是代码决定的,内容就是所描述的:关键类、函数、API,因此参考指南应该列出函数、字段、属性和方法等内容,并说明如何使用它们。
参考资料以信息为导向,要简朴而中肯。无论如何,技术参考可以包含示例来说明用法,但它不应试图解释基本概念或如何实现常见任务。
比如,描述包括如何使用机器的基本描述:类似如何实例化特定类或调用某个方法,或者在将某些内容传递给函数时必须采取的预防措施。然而,这只是其作为技术参考功能的一部分,并且不要与操作指南混淆。参考指南描述软件的正确用法,而操作指南展示如何使用它来实现某个目的。
对于一些开发人员来说,参考指南是他们能想象到的唯一文档类型。他们已经了解他们的软件,他们知道如何使用它。他们所能想象的其他人可能需要的只是关于它的技术信息。
参考资料往往很好写,因为在某种程度上,它甚至可以自动生成,但这本身并不够。
我们可以这样去写参考指南:
- 围绕代码构建文档
- 结构、语气、格式都必须保持一致
- 尽可能清晰和完整地描述
- 准确并保持最新
# 解释
解释或讨论、澄清、阐明特定主题。它们扩大了文档对主题的覆盖范围。
解释以理解为导向。它不是由要实现的特定任务(如操作指南)或你希望用户学习的内容(如教程)定义的。它也不是由机器的一部分定义的,比如参考材料。
解释同样可以等价为讨论;它们本质上是话语性的。它们从更高层次甚至不同的角度阐明它。你可能会想象讨论文档是在闲暇时阅读的,而不是在代码上阅读的。
文档的解释很少单独创建,相反,解释片段会分散在其他文档的部分中。诸如“背景”或“其他注释”或“关键主题”之类的名称。
我们可以这样去写解释:
- 在背景和上下文的地方写
- 用于考虑替代方案
- 补充其他文档没有提到的内容
通过以上介绍,我们在书写相应文档时,只要尽量遵循这些指导方向,就可以写出更好的软件文档。