如何写出一个好文档

教你写出一流的python 文档

1.为什么需要写文档

首先,代码是最有意义的文档,所有对于代码描述的文档主要是给:

  • 不了解代码

  • 没有时间阅读代码(源码太复杂)

  • 不想要阅读源码

  • 没有权限阅读源码

So don’t write clever code, write elegant code.

Code is more often read than written

当写code时,主要有两个观众,用户和开发者。所有的观众都同等重要,想象一下你的用户或者其他开发者正在经历和你使用其他开发者代码的痛苦。

2.注释和文档的区别 Commenting 和documenting code

在介绍写文档之前,我们先区分一下文档和注释。

通常,注释主要用于描述code for developers。 主要的观众是代码的开发者和维护者,comments 帮助读者更好的了解代码的目的和设计。

2.1基本的注释:

2.1.1 注释的主要功能

(#)🇬🇧用于简单的声明和注释,一般不超过几句

  1. 计划和检查:当计划在某个位置写代码时,可以先用注释声明代码区域和要实现的功能和outlining, 记得当代码写好之后,将这些注释删除。

  2. 代码描述: 解释特定的代码部分

  3. 算法描述:当使用了算法,特别是复杂的算法,解释算法如何工作和如何在你的代码中应用十分重要,如果可能,解释下为何要用算法工作。

  4. tagging :描述已经知道的问题或待提高的部分 如bug fixme, todo 等

2.1.2 注释的注意事项

代码注释应该简单和专注,应避免使用长的注释。

  1. 使注释尽可能的接近代码,注释离代码太远容易让人迷惑

  2. 不要使用复杂的format 如 table ,这会导致难以维护

  3. 不要包括冗余的信息

  4. 为注释设计你的代码,设计出 easy understand concept, 读者将会很快了解你的目的,记住代码的注释是为其他读者写的,引导他们了解代码的目的。

Commenting code via type hinting ,在 python 3.5 以上可以使用type hinting来为代码写一些注释,包括输入输出的数据类型。

2.2 文档

2.2.1 Docstrings基本描述 :

  1. Docstrings,

    可以帮助使用者和自己快速了解项目,python 使用内置的funtion help来打印出 objects的doctoring to the console。也可以使用.__doc__来查看class的注释

  2. docstring types:

    docstring 具体的要求在pep 257中描述,主要目的是提供对object的简单描述,应该简洁高效易维护,容易让新的读者了解object的目的和使用方法。在所有情况下docstrings 应该使用(""") 来书写。通常可以被放在一行或多行。当有一行时,应该是一个quick summary。 当有多行时,则应该包括如下部分。

    (1)一行summary

    (2)一行空行

    (3)Further elaboration

    (4)空行

  3. docstring 形式

    docstring可以被分为3类,分别是class docstrings, package and module docstring 和 script docstrings.

    (1) class docstrings :class and class method

    (2) package and module docstring: package modules, functions

    (3) Script docstrings:script and functions

2.2.2 docstring 详细介绍

2.2.2.1 Class:

主要用于class和class方法。在class名称下使用。

class docstrings 应该包含如下内容:

(1) 目的和作用的简介

(2) public 方法的简单描述

(3) 类属性

(4) 任何相关的子类

Class method 的docstring应该包含:

(1) 简单介绍方法是什么用来做什么

(2) 参数

(3) 有默认值或者可选的参数

(4) 执行这个方法的副作用

(5) exception

(6)使用限制

2.2.2.2 Package and module docstrings:

Module docstrings:

(1) 简单描述模块和目的

(2) 任何class, exception,functions,other objects exported

Module function docstring:

和class method 类似

2.2.2.3 stript docstrings:

script通常是单一的可执行文件,script docstrings 通常在文件的最上方,并且应该告诉用户如何使用这个脚本,通常应该使用 -h 可以打出需要的信息,如果使用argparse,英国对每个参数进行描述,command-line parsing libraries 包含更多的细节。

最后,任何自定义的活第三方的imports 应该在docstring中 允许用户知道哪些包是需要用到的。

可以参考numpy 或 scipy的docstings.

3. 为python projects 写文档

在写python projects 的文档时,要时刻记得谁是你的用户,并且来满足他们的需求,根据项目类型,一些特定的文档是需要的。

通用的项目和他的文档应该是如下格式:

项目应该包括三个主要类型:paivate, shared public, open source.

3.1 私有 project

Readme : 简单介绍项目和目的,包括requirements

Example.py : 使用project的例子

3.2 Shared 项目

共享项目是和其他人共享,文档应该要求更加严格,主要是帮助新的成员来这个项目或者为项目添加新东西。

Readme : 除了简单的介绍和requirements, 还应该包括一些先前的主要版本信息。

Example.py : 使用样例。

How to contribute : 介绍新的贡献者如何加入到这个项目中。

3.3 Public 项目:

Readme : 简单介绍项目和其目的,包括任何特殊的依赖包或环境。另外,添加上个版本到这个版本的主要变更,另外,添加练到到未来的文档,bug 报告和其他关于这个项目的重要信息,

How to contribute : 包括新的贡献者如何对此项目作出贡献。包括发展新的功能,修复已有的问题,增加文档,新的新的测试,报告问题。

Code of conduct : 定义其他的贡献者在开发或使用你的软件时应该如何互相对待。

license

Docs :一个文件夹包含未来的的文档。主要包括4个部分,分别是教程,使用案例,参考文件和解释。

4. 如何写docs

4.1 如何写一个完整的docs

一个完整的docs应该包括以下几个部分:

(1) 教程

  • Learning -oriented 学习引导的

  • quick start 告诉新人如何快速开始

  • a lesson 是一个课程

(2) 操作指南

  • 目标导向的

  • 展示如何解决实际问题

  • 一系列的步骤

(3) 解释

  • 理解优先

  • 解释性

  • 提供背景和具体内容

(4) 参考文献

  • information 导向

  • 描述机制

  • 精确完整

详细的内容可以阅读参考文献[3]

4.2 如何写出优秀的docs

  1. 结构简单清晰;

    所谓结构清晰就是用户能马上找到自己要查找的知识点在哪,分类清晰。有些文档爱用模棱两个的词,比如“1. 常见问题”,“2. 热点问题”,”3. 高频问题”。我有十万火急的事情,你来告诉我我到底是要先看哪个?

  2. 循序渐进

    先从最简单的开始,然后慢慢深入。比如我们学习Java,一开始Hello World都还没跑起来就先说配置文件要怎么写,Java一大堆的xml配置文件老司机都看的眼花缭乱更别说新手,这种文档让人直接从想了解到放弃。

  3. 引人入胜

    把能吸引人的地方展示出来,比如Unity 3D默认就带一个设计精良的游戏Demo,一看到就有学习的兴趣。另外提供的API应该直接能在浏览器里模拟出一个可调用的Demo,而不是开放的API文档需要不停的尝试,不停的踩坑才能调通。

  4. 文档close to code and api 方便最终使用

  5. 使文档avaiable to others 通过ticketing system ,版本控制,

4.3 常见的documentation工具

Sphinx,epydoc, read the docs, doxygen, mkdocs, pycoo.

5.从哪里开始写文档

  1. 没有文档

  2. 有一些文档

  3. 有完整的文档

  4. 好的文档

  5. 完美的文档

如果你不知道如何开始写,看看你在哪个位置,努力提高自己的文档水平。

最后,不要害怕写文档,一旦你开始写了,很容易保持下去。

Reference :

[1] https://blog.it2048.cn/article-doc-write/

[2] https://blog.jooq.org/2013/02/26/the-golden-rules-of-code-documentation/

[3] https://www.divio.com/blog/documentation/

[4] https://realpython.com/documenting-python-code/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容