作者:蔡学镛

在试图建立“技术文档”时,许多人可能会想到“文档模板” 。文档模板的存在究竟是好是坏,因人因事而异。此外我们也应该分清楚:何时应该使用文档模板,何时不要使用文档模板?

使用模板的好处

先来看看使用模板的好处:

1、在你毫无头绪时,文档模板具有引导写作的功效。

2、文档模板可以帮助你不会遗漏一些该写的重点(假设该模板已经很完备)。

3、你可以专注写内容,不用分心去管板型(因为模板都已经将这些设置好了)。板型很重要,好的板型有助于阅读。

使用模板的缺点

当然使用模板也有缺点:

1、你会觉得有义务将模板内的每个章节都填上文字,你认为这样才是一个完备的文档,这导致许多节的内容被填入一些没有太大意义的陈词滥调。

2、这些“杂讯”会造成文档阅读者的困扰。我看到一些PRD(Product Requirement Document,产品需求文档)的内容有数十页,但真正有价值的却只有几页。

3、你觉得只能依照文档模板的规范写,这会造成视野变窄,因为模板钳制了你的思想,让你无法对当前所写的主题进行创新地思考。

4、如果你认为必须根据模板的前后次序填入内容,可能会造成写作的停滞,因为有些小节的内容你无法理解。

跳脱模板的框架

我认为,长期使用模板,可能会对知识的组织与创新能力有害。况且,通常“写作的次序”与“展现的次序”会不太一样,模板的次序是“展现的次序”。虽然依据有一定的品质模板写出来的文档,也可以到达合格的标准,但是想要写出高品质的文档,就必须要跳脱模板的框架。

这系列关于文档写作的文章,绝对不是展示各种文档的模板,而是着重讨论每个文档的意义、价值和写作重点。有些文档因为相关,所以放在一起讨论。为了方便解说,我虚构出了NewLang、OldLang等技术。

首次登场的是下面三种文档:

1、What’ s New in NewLang 3.1

2、NewLang 3.1 Change Log

3、Learning NewLang form OldLang

What’ s New in NewLang 3.1

“What’ s  New  in  NewLang 3.1”文档的目的是让NewLang的“旧版本”用户快速更新到“新版本”的知识。“What’ s New  in NewLang 3.1”文档着墨在新旧版本之间的差异,不赘述新旧版相同的部分。写此文档时,要特别注意两点:

1、两个版本之间差异的部分,必须详细说明;

2、两个版本之间相同的部分,除非特殊状况,否则不应该占用任何篇幅。

“新版本”是目前最新版本,这方面通常没有问题,但“旧版本”的挑选,必须谨慎。在What’ s New in NewLang 3.1的例子中,用来对照的旧版本有可能是:NewLang 3.0、NewLang 2.6、NewLang 2.0。挑选旧版本有两个原则,重要性依序是:

1、最多人用的旧版本,例 如 :NewLang 2.6。

2、前一个旧版本,例如:NewLang 3.0。

选定好旧版本之后,“What’s New  in NewLang 3.1”文档一开始必须明确地声明,新版本为何,以及对照的旧版本为何。

What’s New  in NewLang 3.1必须用各种手段(图、文、源码范例),完整地描述新旧版差异的部分。编排格式比较自由不固定。常见的排列方式:

1、以Enhancement Proposal或Wish List的条目编号排列次序。

2、以对规格书(Specification)所做的修改排列次序。

3、可能会依据异动的对象分不同小节。例如:工具操作的异动、语法的异动、程序库的异动、目录结构的异动。

NewLang 3.1 Change Log

很多人会把“NewLang 3.1 Change Log”和“What’s New in NewLang 3.1”混淆了,其实两者主要差异如下:

1、Change  Log是条列式,且每个条列都写得相当精简,不会多做说明。而What’ s New in NewLang 3.1必须写得很详细,容易阅读。

2、Change Log一般是累积的,一份Change  Log文档内,会描述多个版本之间渐进的变化。版本越新列在越上面(例如,3.1、3.02、3.01、3.0)。但What’s New则是只挑一个旧版本作为比较对象(例如3.0)。

3、通常只有比较大的版本会有What’s New,小版本不会有。所以不太会看到What’s New in NewLang 3.1.2。

4、What’s New只描述重要的异动,通常不会提对特定Bug的修复(除非是相当严重且知名的Bug)。Change Log则是不管异动是大或是小,都会列出来。

5、Change Log一般是纯文字格式,除了tab和换行,没有其他变化。What’s New的板型变化比较多,可以改变字体,贴图与表格。

Learning NewLang  form OldLang

Learning NewLang form OldLang或者NewLang  for OldLang Programmers之类的文档,目的是要帮助OldLang的使用者“进化”到NewLang。这样的文档会着重在OldLang和NewLang的差异。

OldLang的挑选必须谨慎,挑选原则是:

1、OldLang是NewLang的竞争对手:例如,Java => C#。

2、NewLang的发展受到OldLang的重大影响,例如,Camel => F#。

“Learning  NewLang form OldLang”的做法类似于“What’s New in NewLang 3.1”,但有下面的差异:在“Learning NewLang form OldLang”中,NewLang和OldLang一致的部分也必须提,但可以不必使用太多的篇幅。而在“What’s New in NewLang 3.1”中,两个版本一致的部分要省略不提。

“Learning NewLang form OldLang”可能是本文章所提到的三种文档中编写难度最高的。我建议下面几点编写原则:

1、一开始先做大局观,强调理念或范式(Paradigm)上的差异。

2、接着条列每个做法的异同之处。重点放在相异之处,但相同之处也要提及。

3、对于容易形成陷阱的差异,不止要提,甚至要特别强调(透过颜色、特殊方块、特殊标记)。

4、微不足道的小差异,可以忽略。

Change Log的扩展

讨论完这三种文档,其中的Change Log由于牵涉到其他的文档,话题值得再展开讨论。有一些文档容易和Change Log混淆:Release Notes;ReadMe;Feature List。

有些公司是不详细区分Release Notes和Change Log,但事实上,这两份技术文档是不同的,不同之处包括了:

1、Release Notes通常是针对“目前版本”与“上个版本”的差异进行条列。Change  Log是“每个版本”之间的差异条列。

2、Release Notes有可能比Change Log对于每个条目的说明更详细一些。

3、如果有提供Change Log,“通常”可以不需要再提供Release Notes。

4、Release Notes会有一些Last Minute的资讯。我们希望每份文档都是文档工程师花许多时间精心编写的,但有时候文档写完了,程序仍有继续修改的可能。如果文档是以印刷的形式存在,那就没有修改的可能,只好推出Release Notes,连同软件放在一起,作为补充说明。

5、早期的软件,经常会附上ReadMe(读我)档案(档名通常为Readme.txt或者Read.me),提及安装与配置的一些“注意事项”(平台兼容的问题、目录的结构、各种文件用途说明等),现在的软件很少会有ReadMe,而是将这些内容并入到Release Notes中。这些原来属于ReadMe的内容,是不可能出现在Change Log中的。

Feature List

至于Feature List,其实不是技术文档,而是偏市场营销的文档(尽管可能会大量提及技术)。Feature List通常是大方向的特色说明,不会有太多细节描述,也不会特别强调版本。很多时候,Feature List甚至不是一份独立的文档,而只是An Introduction to NewLang(后续文章会提到此文件)的一小节。

既然提到Feature List,顺便提两个相关且营销性质更强的文档:Feature Matrix和Data Sheet。Feature Matrix(功能比较表)是表格形式的文档,它有两个作用:一是列出所有功能,以供快速查询。Feature太多的时候,可以依据属性分类。二是比较两个(或多个)产品的功能差异。Data Sheet意思是数据单,说穿了就是Specification(规格书)。它和Specification的区别在于:Data Sheet是营销文件,面向买家;而Specification是技术文件,面向工程师。Data Sheet也经常被合并成为一个单字Datasheet。

小结

本系列文章共有四篇,这是第二篇,这一次提到了许多技术文档,我希望你可以在读完这篇文章之后,就开始行动,为你的软件产品建立必要的文档。下一期还有更多技术文档要登场,包括了FAQ、Troubleshooting、Quick Start、User's Guide、Specification、Glossary等,敬请期待。

作者简介:

蔡学镛,台湾台南人,毕业于台湾清华大学Computer Science研究所,现任阿里巴巴支付宝架构师,负责新系统的开发。

(本文来自《程序员》杂志2010年3月刊)

蔡学镛:文档模板,天使或恶魔?相关推荐

  1. 蔡学镛[散文随笔]:从A到E+ (转)

    蔡学镛[散文随笔]:从A到E+ (转)[@more@] [散文随笔]: 从A到E+ XML:namespace prefix = o ns = "urn:schemas-microsoft- ...

  2. 蔡学镛[散文随笔]:从A到E+

    [散文随笔]: 从A到E+ 最近台湾的书市有一本名为<从A到A+:向上提升,或向下沉沦?企业从优秀到卓越的奥秘>的书,由远流出版,狂卖到缺货,这本书的原书是Jim Collins所着的&l ...

  3. IT命名学(蔡学镛)

       最近比较烦这些命名的事,网上看到好文一枚,收藏! 许多人告诉我,我的名字听起来很有「书卷气」.如果他们知道我更名前的旧名,他们一定会觉得很有「乡土味」.同样的人,只因为不同的名字,竟然有了「书卷 ...

  4. 如何做好 PPT(蔡学镛演讲稿)

    2019独角兽企业重金招聘Python工程师标准>>> 四大困扰,一个对策:告别损伤,呈现完美!你所需要的 [PPT 修复精华],都在这一瓶 "学镛小黑瓶".万千 ...

  5. 一份很不错的敏捷产品接口文档模板

    在采用敏捷研发的过程中,前后端开发人员如何来描述与记录接口信息?如何精简的描述接口的用处?接口的请求方式?接口的入参是什么?返回模型是什么等等. 结合我们项目团队多年的实际情况以及授课老师的推荐,我觉 ...

  6. VC++ 多文档模板(添加新文档模板)编程实例

    现在假设要做一个VC++多文档程序,一个文档类型处理txt文件,一个文档类型处理图片文件: 新加一个Img的文档模板类型: 先新建一个多文档工程,名为duodocDemo1: 在菜单选择 插入-类: ...

  7. 十三种技术文档模板_竞品分析|关于产品规划的思考:石墨文档 VS 腾讯文档 VS金山文档...

    作者以在线协作文档行业领先的石墨文档.腾讯文档和金山文档为例进行了了竞品分析,通过对几款产品全方位的分析,总结了自己关于石墨文档产品规划的思考. 一.竞品概述 1. 竞品目的 2. 竞品目的 通过对石 ...

  8. 深入浅出MFC文档/视图架构之文档模板

    在"文档/视图"架构的MFC程序中,提供了文档模板管理者类CDocManager,由它管理应用程序所包含的文档模板.我们先看看这个类的声明: / // CDocTemplate m ...

  9. “Word自动更改后的内容保存到通用文档模板上。是否加载该模板?“的解决办法...

    在win7系统下,Word2010出现了不能正常关闭.打开一个已有word文档,点击右上角关闭按钮后,先提示"word已停止工作,windows正在检查该问题的解决方案",随后提示 ...

  10. Pycharm文档模板变量

    点击这里查看JetBrains官方英文源文件 本篇Blog只是搬运外加大概翻译一下. File template variables A file template can contain varia ...

最新文章

  1. python之链表、单链表、双向链表、单向循环链表
  2. 让Hive支持行级insert、update、delete
  3. websocket获取httpsession报NullPointerException解决办法
  4. 再来一次的C语言贪吃蛇小游戏(三)
  5. 熊猫烧香变种病毒分析
  6. C++确定一个字符串是否是另一个字符串的排列的算法(附完整源码)
  7. Intellij idea 出现错误 error:java: 无效的源发行版: 11解决方法
  8. 将m个苹果放入n个盘子的问题【转】
  9. C# string 特殊的引用类型
  10. pwm 正弦波_增强型PWM抑制功能对于直列式电机控制的五大优势
  11. 软件工程领域2021年上半年的CCF-A和B类会议列表
  12. 科技巨头们以 A 取名的时尚潮流
  13. 数组中元素与字节的关系
  14. 看懂卫星遥感数据RPC文件
  15. 如何通过学习实现人生的逆袭!
  16. 赤链——区块链底层技术革命
  17. emmc和ssd的区别
  18. 安装docker 配置 oracle11g
  19. [Practical.Vim(2012.9)].Drew.Neil.Tip01 学习摘要
  20. 图文并茂详细教程之——用pixhawk飞控组装一台S500四轴无人机(下)(苍穹四轴)

热门文章

  1. 原生select下拉框样式修改:去除聚焦的黄色边框样式
  2. 【数据结构】树(六)—— 二叉平衡树(C语言版)
  3. 微信小程序-获取微信用户手机号码
  4. 使用torch.nn.BatchNorm1d出现Tensor for argument #2 ‘weight‘ is on CPU, but expected it to on GPU错误
  5. qqxml图片代码_QQXML代码大全(持续更新)
  6. 安装系统user服务器登录失败,win10系统开机提示user profile service服务器登录失败的解决方法...
  7. 带图像识别的YYS连点器 V2.0
  8. AndroidStudio NDK开发环境配置及示例
  9. 基于php034医院电子病历住院病人
  10. 计算机中所有文字信息都是,计算机文字 计算机文字与信息处理