編寫對社區真正有用的文檔
成功和可持續的項目,與那些消失無蹤的項目有什么不同?答案是 —— 社區。社區是開源項目的發展動力,而文檔是構建社區的基石之一。也就是說,文檔的意義不僅僅在于文檔本身。
建立好的文檔可能很困難。用戶不愿意閱讀文檔,因為它不易查找,它很快就過時了,它冗長,或者它不全面。
開發團隊不寫文檔,因為他們陷入了“對我來說顯而易見,所以對所有人都顯而易見”的陷阱。他們不寫,因為他們忙于開發項目。要么是需求變化太快了,要么是開發得還不夠快。
但是好的文檔仍然是團隊和項目之間最好的溝通工具。考慮到項目隨著時間的推移往往會變得更大,這一點尤其重要。
文檔可以是團隊或公司內部的唯一真理。這在協調人們朝著共同的目標前進,以及在人們轉移到不同的項目時保留知識方面非常重要。
那么,要如何為一個項目寫出合適的文檔,并與正確的人分享呢?
什么是成功的社區文檔?
要想在你的社區文檔編寫中取得成功,你需要:
- 規劃你的路徑
- 使其清晰簡單
- 靈活變通,根據具體情況調整路徑
- 做版本控制
圖片展示了建立文檔的整個流程
靈活并不意味著混亂。許多項目之所以成功,就是因為它們組織得很好。
James Clear(《原子習慣Atomic Habits》一書的作者)寫道:“你并不是提升到了你目標所在的水平,而是降低到你整個系統所在的水平。”一定要組織好過程,使水平足夠高,才能取得成功。
設計流程
文檔本身就是一個項目。你可以把寫文檔當作寫代碼一樣。事實上,文檔可以是一個產品,而且是一個非常有價值的產品。
這就意味著你可以采用與軟件開發相同的流程:分析、獲取需求、設計、實現和維護,把文檔作為你的一個流程對待。
在設計流程時,要從不同的角度考慮。不是所有的文檔都適用于所有人。
大多數用戶只需要一個了解項目概況的文檔,而 API 文檔則是留給開發者或高級用戶的。
開發者需要了解庫和函數的文檔。用戶則更需要看到示例、操作指南,和項目與其他軟件相配合的架構概述。
圖片展示了編寫文檔時的不同視角
總之,在創建任何流程之前,你必須確定你需要什么:
- 關注的群體: 包括開發者、集成商、管理員、用戶、銷售、運營、高管
- 專業水平: 要考慮到初級、中級和高級用戶
- 詳細程度: 既要有高層級的概述,也要有技術細節,所以要考慮如何呈現這些內容
- 路徑和入口: 人們如何找到文檔,如何使用文檔
當你思考這些問題時,它可以幫助你構建你想通過文檔傳達的信息的結構。它定義了文檔中必須包含的內容的清晰指標。
下面是如何圍繞文檔建立一個流程的方法。
編碼約定
代碼本身應該有意義。文檔應通過良好的類名、文件名等來表達出來。通過思考以下內容,創建通用的編碼標準和自我注解的編碼過程:
- 變量命名約定
- 通過使用類、函數命名方案使名稱易于理解
- 避免深度嵌套,或 ??根本不嵌套??
- 不要簡單地復制和粘貼代碼
- 不應使用長方法
- 避免使用幻數(改用常量)
- 使用提取的方法、變量等
- 使用有意義的目錄結構、模塊、包和文件名
開發時測試
測試不僅僅是關于代碼應該如何工作。它還涉及如何使用 API、函數、方法等。編寫良好的測試可以揭示基本用例和邊緣用例。甚至還有一種 ??測試驅動開發?? 的實踐,專注于在代碼開發之前創建測試用例(應該測試什么以及如何測試的分步場景)。
版本控制
版本控制(即使是對文檔進行版本控制)可以幫助你跟蹤更改的邏輯。它可以幫助你回答為什么這么修改。
確保提交期間的注釋能解釋為什么進行更改,而不是進行了哪些更改。
編寫文檔過程越吸引人,就會有更多的人參與其中,為它添加創造力和樂趣。你應該通過以下方式考慮文檔的可讀性:
- 軟件代碼約定
- 圖表和圖形(也通過文字進行解釋)
- 思維導圖
- 概念圖
- 信息圖表
- 圖片(突出顯示重要的部分)
- 短視頻
通過使用不同的交流方式,你可以提供更多的方式來參與文檔。這有助于防止誤解(不同的語言,不同的含義)和有助于通過不同的學習方式進行學習。
以下是一些用于創建文檔的軟件工具:
- Javadoc、Doxygen、JsDoc 等: 許多語言都有自動化的文檔工具,以幫助捕獲代碼中的主要功能
- Web 鉤子和 CI/CD 引擎: 允許持續發布文檔
- Restructured Text、Markdown、Asciidoc: 文件格式和處理引擎,幫助你從純文本文件中生成美觀且實用的文檔
- ReadTheDocs: 是一個可以和公共 Git 存儲庫聯動的文檔托管主機
- ??Draw.io???、LibreOffice Draw、Dia: 制作圖表、圖形、思維導圖、路線圖、計劃、標準和指標等
- Peek、Asciinema: 記錄終端命令操作
- VokoscreenNG: 錄制屏幕和鼠標點擊操作
文檔很重要
編寫文檔的過程和協議與項目本身同樣重要。最重要的是,它把項目的信息和項目的創造傳達到位,更加令人興奮。
快速進入項目和流程,以及了解一切是如何工作的,是文檔一個重要的功能。它有助于確保眾人持續參與。通過在團隊中構建一種“語言”,可以簡化流程,更清晰地理解所要做的事情。
文檔旨在傳達價值,即無論是通過團隊成員還是通過應用程序的用戶的言行,來展示出某些東西。
要將這個過程視為一個連續的整體,并在其中融合使用溝通、流程和文檔的方式。
圖片展示了文檔作為一種溝通的過程
文檔是一種溝通手段。
(題圖:MJ:document development illustration in high resolution, very detailed)