# 技術文件寫作導論

::: tip 前言
**你寫的文件有人看嗎？** 很多開發者覺得「程式碼能跑就行，文件以後再說」。結果就是：新人到職看不懂專案、API 對接全靠口頭溝通、半年後自己都忘了當初為什麼這麼設計。

本章帶你掌握技術文件寫作的核心方法，讓你的文件真正有人看、看得懂、用得上。
:::

**這篇文章會帶你學什麼？**

| 章節 | 內容 | 核心概念 |
|-----|------|---------|
| **第 1 章** | 文件的類型與結構 | 不同文件的寫法 |
| **第 2 章** | 寫作原則 | 清晰、準確、簡潔 |
| **第 3 章** | 實戰對比 | 好文件 vs 差文件 |
| **第 4 章** | 文件維護 | 讓文件保持更新 |

學完本章，你將能寫出結構清晰、內容準確、易於維護的技術文件。

---

## 0. 全景圖：技術文件重要的動機

程式碼告訴電腦「怎麼做」，文件告訴人類「為什麼這麼做」。沒有文件的專案就像沒有說明書的電器——能用，但用起來全靠猜。

::: tip 好文件的價值
- **降低溝通成本**：新人自助上手，減少重複解答
- **保存決策上下文**：記錄「為什麼」，而不只是「是什麼」
- **提升專案可信度**：好文件是開源專案的門面
- **加速協作**：API 文件讓前後端平行開發
:::

---

## 1. 文件的類型與結構

透過下面的互動元件，了解不同類型文件的標準結構：

<DocStructureDemo />

### 1.1 常見文件類型

| 文件類型 | 目標讀者 | 核心內容 |
|---------|---------|---------|
| **README** | 所有人 | 專案是什麼、怎麼用、怎麼貢獻 |
| **API 文件** | 介面呼叫方 | 端點、參數、回應、錯誤碼 |
| **架構文件** | 開發團隊 | 系統設計、技術選型、資料流 |
| **變更日誌** | 使用者/開發者 | 版本變化、新增/修復/破壞性變更 |
| **貢獻指南** | 貢獻者 | 開發環境、程式碼規範、PR 流程 |

### 1.2 README 的黃金結構

一個好的 README 應該包含：

1. **專案名稱 + 一句話描述**：讓人 3 秒內知道這是什麼
2. **快速開始**：最少步驟跑起來
3. **功能特性**：核心賣點
4. **安裝方式**：詳細的環境需求和安裝步驟
5. **使用範例**：可複製貼上的程式碼
6. **貢獻指南**：如何參與
7. **授權條款**：法律資訊

---

## 2. 寫作原則

### 2.1 清晰優先

```markdown
<!-- 差：模糊不清 -->
這個函式處理資料。

<!-- 好：具體明確 -->
將原始訂單資料轉換為發票格式，包含稅費計算和幣別轉換。
```

### 2.2 面向讀者

寫文件前先問：**誰會讀這個文件？他們需要什麼資訊？**

- 給新手寫：解釋術語，提供完整範例
- 給有經驗的開發者寫：直奔主題，提供 API 參考
- 給非技術人員寫：用類比，避免術語

### 2.3 程式碼範例是最好的文件

```markdown
<!-- 差：只有文字描述 -->
呼叫 createUser 函式，傳入使用者名稱和電子郵件參數。

<!-- 好：給出可執行的範例 -->
const user = await createUser({
  name: '張三',
  email: 'zhangsan@example.com'
})
// 回傳: { id: 'u_123', name: '張三', createdAt: '2025-01-15' }
```

---

## 3. 實戰對比

透過下面的互動元件，對比好的技術寫作和差的技術寫作：

<TechWritingPracticeDemo />

### 3.1 Commit Message 規範

```
# 差
fix bug
update code

# 好（Conventional Commits）
fix: 修復登入頁在 Safari 下白屏的問題
feat: 支援批次匯出 PDF 格式報表
docs: 更新 API 認證章節的範例程式碼
```

### 3.2 註解的藝術

```javascript
// 差：描述「是什麼」（程式碼已經說了）
// 遍歷陣列
for (const item of items) { ... }

// 好：解釋「為什麼」
// 倒序遍歷，因為刪除元素時正序會跳過下一個
for (let i = items.length - 1; i >= 0; i--) { ... }
```

---

## 4. 文件維護

### 4.1 文件即程式碼

把文件和程式碼放在同一個儲存庫，用同樣的工作流管理：

- 文件變更隨程式碼一起提交 PR
- CI 檢查文件格式和連結有效性
- 版本發布時同步更新文件

### 4.2 避免文件腐爛

| 問題 | 解決方案 |
|------|---------|
| 文件過時 | 程式碼變更時強制更新文件（PR 檢查） |
| 無人維護 | 指定文件負責人 |
| 內容重複 | 單一資訊來源，其他地方引用連結 |

---

## 5. AI 助力：用大模型提升文件品質

大模型在技術寫作領域幾乎是「天賦異稟」——產生文件、改善表達、翻譯內容都是它的強項。

### 5.1 產生 API 文件

> **提示詞**：
> ```
> 根據以下 Express 路由程式碼，產生完整的 API 文件，包括：
> - 端點路徑和方法
> - 請求參數（路徑參數、查詢參數、請求體）及類型
> - 成功和錯誤的回應範例
> - 使用 curl 的呼叫範例
>
> [貼上你的路由程式碼]
> ```

### 5.2 改善技術寫作

> **提示詞**：
> ```
> 請改善以下技術文件的表達，要求：
> 1. 語言簡潔清晰，去掉冗餘表述
> 2. 用主動語態替代被動語態
> 3. 專業術語保持準確
> 4. 添加必要的程式碼範例
> 保持原意不變，只改善表達品質。
>
> [貼上你的文件內容]
> ```

### 5.3 產生 README

> **提示詞**：
> ```
> 根據以下專案資訊，產生一份高品質的 README.md：
> - 專案名稱：[名稱]
> - 一句話描述：[描述]
> - 技術棧：[列出]
> - 核心功能：[列出]
>
> 要求包含：專案簡介、快速開始、功能特性、
> 安裝步驟（含程式碼）、使用範例、貢獻指南、授權條款。
> ```

::: tip AI 使用建議
AI 產生的文件要檢查技術細節是否準確——它可能編造不存在的 API 參數或錯誤的回傳值。始終對照實際程式碼驗證。
:::

---

## 6. 總結

1. **類型匹配**：不同文件有不同的結構和寫法
2. **清晰優先**：具體、準確、面向讀者
3. **範例驅動**：好的程式碼範例勝過千言萬語
4. **持續維護**：文件即程式碼，隨專案一起演進

::: tip 終極思考
寫文件不是浪費時間，而是**節省未來的時間**。你今天花 30 分鐘寫的文件，可能幫 10 個人各節省 1 小時。好的文件是對團隊最好的投資。
:::

---

## 延伸閱讀

- **寫作指南**：Google 的技術寫作課程（Technical Writing）免費且實用。
- **文件工具**：VitePress、Docusaurus、GitBook 等現代文件框架。
- **API 文件**：OpenAPI/Swagger 規範是 API 文件的業界標準。
- **實踐建議**：從為自己的專案寫一個好的 README 開始。
