热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

技术文档写作的道与术

世界观为什么要写技术文档反驳不需要写文档的言论附议:为什么要看文档什么算好的技术文档文档&写文档的定义方法论基调结构IntroductionContentTermsSetupBod


  • 世界观

    • 为什么要写技术文档

    • 反驳不需要写文档的言论

    • 附议:为什么要看文档

    • 什么算好的技术文档

    • 文档&写文档的定义


  • 方法论

    • 基调

    • 结构

      • Introduction

      • Content

      • Terms

      • Setup

      • Body

      • Reference

      • FAQ

      • Appendix

      • ChangeLog

      • ReleaseNote


    • 过程

    • 工具

      • 写作工具

      • 维护工具



  • 总结

cover document writing

文档的范围很广,本文特指 开发人员撰写的包含基本产品背景和主要技术设计的文档


世界观

为什么要写技术文档

对于这个问题,我个人觉得很容易回答,写技术文档可以帮助团队完成

当前的信息共享和长期的知识传承 。对于个人而言,一方面可以

节省时间

因为避免了回答重复问题,也便于检索过去的知识;另一方面可以 塑造口碑

,比如某次就突然有个同事给我发消息说我的文档写的很好,对新接触这块业务的人帮助很大。

某某同事的感谢.

Snipaste 2019 12 19 20 57 10


反驳不需要写文档的言论

有很多程序员都持有一个观点:“不用看(写)文档,文档都在代码里”,还有一部分人认为,文档容易过时,很难跟上代码的更新节奏,因而没有必要写文档。

凡此种种观点导致了一个局面就是:

接手业务的时候吐槽别人不写文档,交接业务的时候又觉得这东西无需解释,根本不需要文档



对此,首先我个人认为涉及代码细节的部分确实没必要写文档,但是对于总体的设计和业务的变更是绝对需要写文档的。有些人觉得文档有过时问题,那是因为他们没有引入版本(ChangeLog)的概念,

过时的文档本身就是业务历史的一部分

,我在接手一个业务的时候,常常就需要这些历史信息来辅助理解。


附议:为什么要看文档

上周发生了一件趣事,一个产品跟我说,

开发两句话能说明白的,为什么要看文档

?确实,问开发能以最快速度准确地获取信息,毕竟人脑就是一个强大的搜索引擎。但是长期来看有以下问题:



  1. 浪费开发时间


  2. 开发无法随时答复,浪费自己时间


  3. 信息无法固化、传承,而且过于琐碎,浪费团队时间


一般来说,一份 好的技术文档

比起开发口述是不会有多余的理解成本的,甚至更低,因为对于很多信息,图片能比语言更好地表达。


什么算好的技术文档

我认为 好的技术文档 的核心是 敏捷 。一方面,好的的技术文档是

高度可维护的并且经常维护

的,比如新增了一些功能,文档的作者能够快速更新文档,文档的读者能及时获取更新;另一方面,好的技术文档是

易理解 的,更详细来说要表述准确、结构清晰、排版美观、风格统一。


文档&写文档的定义

最后,我想探讨下写文档到底是干吗?百度百科说:


软件文档或者源代码文档是指与软件系统及其软件工程过程有关联的文本实体。


那么写文档就是生产这个实体的过程了。但这样实在过于抽象,根据我最近一年的经验来看,我更愿意将其定义为

对特定信息进行结构化整理的过程

以上就是写作技术文档的道了,也就是我们对于这件事最基础的世界观,接下来谈术,即基于此执行的方法论。


方法论

基调

在正式开始写文档之前,我们必须要有以下三点认知:



  1. 足够了解

    我们要为某个模块写文档,前提一定是我们对这个模块足够了解,只有基于此,我们的文档才是有价值的,否则只是信息垃圾。


  2. 换位思考

    即便有了交接文档,我们也经常需要去询问交接人,这种情况屡见不鲜,究其本质,是因为很多时候我们都是站在自己的角度、按照自己的理解来写文档的,但是读者的信息背景和我们是完全不一样的,我们觉得理所当然的可能他们一无所知,所以写作文档必须要有足够的换位思考的意识。

    文档是写给别人看的,不是写给自己看的


  3. MECE原则 : 简单来说就是 相互独立,完全穷尽

    ,这个思想可以指导我们对文档结构进行组织。下面给出一个参考。



结构

本章节讨论了一份技术文档应该具备的各个单元,可以作为今后技术文档写作的框架或者Checklist。


Introduction

简单介绍项目背景信息,如下面是我为某个项目写的 Introduction :

Snipaste 2019 12 19 21 14 12


Content

目录,目录是结构的直接体现,必须有,一般文档写作工具都能自动生成:

Snipaste 2019 12 19 21 17 04


Terms

术语解释,很多业务会衍生一些特定词汇,如“白条卡”、“大图卡”等,都是有特定语境的,需要单独解释。

Snipaste 2019 12 19 21 23 10


Setup

如何运行这个项目,一般开源项目都会有,如果是SDK文档也常常有接入文档,就是这个模块。

Snipaste 2019 12 19 21 25 33


Body

这部分就是文档的主体部分,具体结构需要视内容而定,有以下通用规则



  • 一图胜千言,如Android的架构图、Actvity的生命周期图,比任何语言都好使。


  • Demo胜千言。


对于具体的格式规范,推荐阅读 ruanyf/document-style-guide:

中文技术文档的写作规范。


Reference



  • 相关需求单:比如某个业务所有相关的需求单都放在这里,方便其他人更进一步了解背景,也方便自己查找。


  • 参考资料。


这部分也可以放在附录里面,见下图。


FAQ

其他人经常问的问题,遇到就记录在这个模块,不断补充,日趋完善。

Snipaste 2019 12 19 21 27 32


Appendix

一些比较冗长的信息可以放在附录里面,比如日志,避免放在正文影响排版和阅读。

Snipaste 2019 12 19 21 27 07


ChangeLog

变更日志,一般开源项目都会记录每个版本的重要变更。

Snipaste 2019 12 19 21 28 13


ReleaseNote

发版日志,一般开源项目都会有一个单独的Release页面。


过程

一般来说,文档写作的流程如下:

收集信息、整理框架、实践结论、写作文档

。如果前期工作足够,写作所花的时间是很少的。

此外,文档完成后,还要注意读者反馈,以不断完善自己的文档。

写一份好的技术文档也不是一蹴而就的,需要不断打磨,要注意经常去

刻意练习


工具


写作工具

一般来说,只要别人发给我的文档是一份Word文档,我基本就把这份文档排在了最LowB的一档。对于这种文档,我就想问两点:



  • 文档有更新怎么分发给每个需要这份文档的人?


  • Word格式不兼容导致关键图表排版混乱怎么办?


一般来说,文档写作工具有以下选择:



  • Word


  • Pdf


  • Markdown


  • Asciidoc


  • Latex


对于Word/Pdf我是极力排斥的,因为很多文档都是需要更新的,这两种格式没法做到

动态更新 。Markdown

比较受开源社区的欢迎,因为它在表达力和简洁性之间找到了一个平衡点,但是它有一个致命问题就是

无法应付稍微复杂一点的排版

。Asciidoc是我的主力文档工具,很多人不知道Github也是支持这种文档格式的,比如本文就是这种格式的。Asciidoc的语法比Markdown更加复杂,但我认为

牺牲一点时间学习是完全值得的

。最后是Latex,Tex的变种,表达力最强大,可以应付各种复杂排版,一般在学术圈比较流行(尤其是那些复杂数学公式的表达),但我认为放在日常的文档写作中有点矫枉过正了。

综上,我推荐Asciidoc。


维护工具

对于文档的管理,我推荐使用Git,像管理代码一样管理文档。

另外我推荐使用一个静态网站来存放自己的文档,这样其他同事访问的时候看到的总是最新的文档了。

另外,公司目前在推iWiki,我觉得iWiki最大的优势是 权限控制

,对于一些敏感文档是必须的。但是,比起iWiki的变更记录,作为程序员的我更钟爱用Git进行管理,此外,iWiki是Web网页,编辑体验肯定也比不上本地自己配置的编辑器。当然,术没有绝对的优劣之分,也要看自己是否合适。


总结

以上,最近关于技术文档写作的一些思考。欢迎交流指正。



推荐阅读
  • intellij idea的安装与使用(保姆级教程)
    intellijidea的安装与使用(保姆级教程)IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(gi ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Pycharm编辑器取消双击shift弹出搜索框的方法
    在使用Pycharm编辑器时,双击shift会弹出搜索框界面,导致输入失去焦点,给用户带来不便。本文介绍了取消双击shift弹出搜索框的方法:在Pycharm中双击shift,输入registry并回车,找到“ide.suppress.double.click.handler”并勾选后,关闭即可解决该问题。通过这个方法,你再也不会被shift问题困扰了。 ... [详细]
author-avatar
蓝色调调2502937087
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有