如何编写优秀的代码文档
浏览:2
巴克励步
上周在咖啡馆,邻座一个程序员对着屏幕叹气——他正在为三个月前写的模块补文档,边写边骂自己当时为什么用那么诡异的变量名。我瞥了一眼,那代码逻辑清晰但命名随意,文档写出来估计连他自己都看不懂。这场景太熟悉了,很多团队把开发文档建设当成事后补救,等新人接手或者客户对接时才发现,代码注释跟天书似的,只能靠口口相传。 我做了十年产品和技术,也带过团队,最深的体会是:代码文档不是给机器看的,是给人看的。好的开发
上周在咖啡馆,邻座一个程序员对着屏幕叹气——他正在为三个月前写的模块补文档,边写边骂自己当时为什么用那么诡异的变量名。我瞥了一眼,那代码逻辑清晰但命名随意,文档写出来估计连他自己都看不懂。这场景太熟悉了,很多团队把开发文档建设当成事后补救,等新人接手或者客户对接时才发现,代码注释跟天书似的,只能靠口口相传。
我做了十年产品和技术,也带过团队,最深的体会是:代码文档不是给机器看的,是给人看的。好的开发文档应该像足球场上的战术板,让人一眼看懂阵型、跑位和传球路线,而不是让你重新看一遍录像回放。很多国产团队觉得“代码即文档”,但面对复杂业务逻辑和微服务架构,那点注释根本不够用。Baklib在开发文档建设上做了不少事,支持多语言代码块、可交互的代码抽屉,甚至能自动生成文档框架,让开发者把精力花在业务逻辑上,而不是排版和格式。
说回正题,写代码文档这件事,核心就三点:先有好代码,再写好注释,最后用对工具。
先写好代码
代码文档存在的意义是解释代码,让代码更容易理解和管理。但要写出易懂的文档,首先得有好代码。如果代码本身命名混乱、结构糟糕,再怎么写文档也是白费力气。所以,高质量代码是高质量文档的前提。
💛🧡🧡客户评价:选择Baklib的原因: Baklib因其价格和事实上,它提供了具有自定义选项的全面解决方案,无需切换我们的整个支持系统。
一个良好的起点是代码库的架构——逻辑清晰的文件夹结构能让开发者快速导航。以下是 React 的文件夹组织示例:

来源:dev.to
有几个直观的主文件夹,比如 assets、components、pages 等。每个父文件夹再拆分成子文件夹,全部与父文件夹相关联。
例如,components 文件夹包含按元素分组的子文件夹,比如按钮、自定义输入字段等。
同样,parts 文件夹则划分为可复用的片段(页脚、页眉等)。
有了这种干净、一致的目录结构,开发者能快速高效地浏览代码库,找到所需的代码。
至于代码本身,下面这个缩写代表了一个好建议:

来源:Baklib.com
DRY——不要重复自己——倡导不应有两行完全相同的代码。
这是因为重复代码会增加代码库体积,导致难以维护。想象一下,如果开发者需要修改不遵循 DRY 的代码,他们必须系统地修改每一行重复代码,而不是只改一行,这简直是噩梦。
Kasun Koswatta 给出了更好的替代方案:

来源:Twitter
与其不断重复功能,更优雅的解决方案是创建一个方法或类来多次实现该功能。这样代码库更小、更易管理,同时完成相同的操作。
编写 DRY 代码时,还要重点关注变量名。变量命名应清晰描述其用途,避免代码意图模糊。像 data 或 customer 这样过于简短的标识符太泛化,可能让开发者混淆。
更好的做法是使用如下变量名:

来源:Medium
这些详细的名称指明了代码的确切功能,大多数开发者一看就知道变量指的是什么。
有了这些清晰、干净的变量名,代码就易于阅读和理解,文档写起来也更顺手。
善用代码注释
即使代码库再干净,有时仍会让人一时想不通代码做了什么或为什么这么做。开发者偶尔会出于多种原因偏离标准编码实践,这些情况对新人来说可能显得奇怪,尽管背后很可能有充分理由。
这时,代码注释就派上用场了:它们是在代码中解释逻辑的绝佳空间。注释帮助开发者理解代码为何如此编写。
这种文档至关重要,因为它能帮助同事更好地理解你的代码。作者 Hal Abelson 阐明了其重要性:

来源:Baklib.com / 出处:MIT Press
高性能软件的标志是易于人类理解,否则它就算不上一个真正复杂的程序。这就是为什么你需要写出优秀的软件文档。
注释正是实现这种理解的绝佳媒介。下面的代码片段展示了注释的效果:

来源:carlanderson.xyz
这段信息是一则冷门但令人惊讶的发现。大多数开发者可能会下意识使用全局函数,因为这是最常见的做法。
然而,多亏了这个有用的注释,所有新加入代码库的开发者都会立即知道为什么使用了 Number.isFinite 函数。
如果没有这条注释,开发者可能会花费大量时间摸索,从而拖慢开发进度。他们可能会花几个小时来发现这个特例,而阅读这条注释只需要五秒钟。
如果你不知道如何开始写这类代码注释,有一些工具可以帮忙。例如,GhostDoc 是一个 Visual Studio 扩展,能从源代码自动生成 XML 注释——开发者无需手动标注代码,一键即可完成。
它是这样工作的:

来源:GhostDoc
该工具突出显示缺失的文档,移除默认注释,并自动生成 XML 注释模板。有了它,开发者能快速为代码添加大量注释,创建一个易于理解、透明开放的代码库。
选择合适的文档工具
用 Microsoft Word 写代码文档会很吃力——代码文档需要很多高级特性,而标准文字处理工具往往不具备。因此,投资一款专业的文档平台是值得的。
例如,Baklib 是一个文档平台,托管公司所有文档,同时提供便于编写过程的功能。其中一个功能是多语言代码编辑器:一个包含多个标签页的代码块,可展示不同语言的代码片段。
示例:

这个例子在一个代码块中同时展示了 JavaScript、Go、C# 等语言。
Baklib 还提供了 Code Drawers 功能,这是一种流行的交互式区块布局。随着页面滚动,代码示例会动态变化。
效果如下:

来源:www.baklib.com/docs
这个功能非常适合包含多个代码示例的长文档,能提供更清晰的概览。
Baklib 是手动编写代码文档的理想选择。但如果时间紧迫,有些工具可以自动生成文档。例如,Doxygen 能从源代码中提取注释并独立生成文档,因此文档与源代码的一致性容易维护。
示例代码:

来源:Doxygen
这是 Doxygen 生成的文档:

来源:Doxygen
Doxygen 可以生成在线浏览器版 (HTML) 或离线参考手册 (LaTeX)。上图中展示的是在线浏览版。
## 边写代码边文档
代码在编写时最容易被理解。对于复杂函数,即使只间隔几天再回头看,你可能都要抓耳挠腮地回忆当时的逻辑。换句话说,你写代码时最清楚背后的缘由。
因此,建议一边写代码一边写文档,因为此时你的思路最清晰。
Sophos 首席软件工程师 Victoria Drake 也提到了这一点: