摘要
本文旨在說服工程師們,尤其是敏捷團(tuán)隊(duì)的成員,在撰寫過程文檔時(shí),放棄傳統(tǒng)方式,嘗試使用:1、Markdown撰寫;2、SVN/Git版本管理;3、HttpServer排版;—— 3合1的新方式。
本文也描述了相關(guān)的技術(shù)要素:如何不再打開Office或WPS,只需普通的記事本,一樣寫出漂亮、易讀的文章;如何搭建一套Markdown->html的生成、發(fā)布、和訪問系統(tǒng);如何使用瀏覽器快捷、永久的訪問文檔……
關(guān)鍵詞
文檔代碼化 markdown toc headeranchor
目錄
-
理論篇
-
文檔的傳統(tǒng)方式
-
文檔的新方式
-
文檔的代碼化
-
實(shí)現(xiàn)篇
-
標(biāo)記語言與Markdown
-
Markdwon工具軟件
-
Markdown基礎(chǔ)
-
工作流
-
一些技術(shù)細(xì)節(jié)
-
附錄
理論篇
項(xiàng)目中的文檔有很多種:需求/用戶故事、方案設(shè)計(jì)、詳細(xì)設(shè)計(jì)、接口說明、測試報(bào)告…… 以前的軟件工程理論將這些文檔分?jǐn)偟讲煌慕巧砩?;現(xiàn)代的敏捷理論強(qiáng)調(diào)工作的軟件高于詳盡的文檔,講求文檔的簡單有效和角色的互相滲透合并。本文不論兩者的優(yōu)劣,只想探討一下如何讓寫文檔變的更方便、更愉悅這個話題,竊以為應(yīng)該是對兩派同學(xué)都是有益處吧。
文檔的傳統(tǒng)方式
回顧一下我們文檔撰寫、分發(fā)、閱讀、更新的傳統(tǒng)方式:
-
找到文檔模板:例如是word/Excel/PowerPoint模版。大公司里不要小瞧了找模板的困難,尤其是寫跨部門、跨團(tuán)隊(duì)的文檔,要找別人的模版時(shí)。找不對的話提交系統(tǒng)時(shí)被打回還要重新找。萬一遇到了模版更換Logo一類的事情,用提心吊膽來形容有時(shí)候都不過分。
-
把討論和筆記寫入文檔:雖然有模版,但還是會常常見到字體五花八門、行間距大小不一、色調(diào)五彩繽紛……對待這些問題,讀者只能呵呵了(本文如果哪天寫入了某個Word模版,肯定也是個鬼樣)。
-
合寫文檔的痛苦:通常的模式是:牽頭人把章節(jié)定一下,在章節(jié)后面把具體撰寫人的名字寫上,約定個時(shí)間,牽頭人手工合并。問題顯而易見啦:
-
手工合并易出錯
-
具體撰寫人需要修改時(shí)會去麻煩牽頭人,要么牽頭人不斷合并,要么撰寫人采取保守策略不再積極提交變更
-
合并文檔的版本管理困難:經(jīng)常會看到把日期加到文檔后,一連串的日期把自己累的不行
-
“指定章節(jié)到撰寫人”打擊了撰寫人寫其他章節(jié)的積極性:因?yàn)闀o合并人帶來更多的工作和混淆,撰寫人寧可保持低調(diào);同時(shí)撰寫人并不知道另一章節(jié)的人是否已經(jīng)撰寫了自己想到的內(nèi)容。
-
提交評審:挺好。但其中有一點(diǎn)需要改進(jìn):作者根據(jù)評審意見修改后,通常有兩種方式評判是否OK:主持人直接評判,主持人開會召集評委們再次評判?!?在一個溫和的團(tuán)隊(duì)中,這兩種方式都會“和諧”的完成??梢栽黾拥?種意見表達(dá)的方式:評委直接修改文檔,然而在word模版+沒有版本管理的方式下,這是令人望而卻步的。
-
更新文檔:最痛苦的部分到了
-
需求、方案類文檔:開發(fā)實(shí)現(xiàn)后回頭更新需求、方案的比例有多高?這個現(xiàn)實(shí)問題很多同學(xué)寧可提都不提, Let it go,隨她吧。
-
詳設(shè)、開發(fā)類文檔:軟硬件工程師們拿各種理由來搪塞的場景相信都遇到過吧,什么“來不及”了、“太多了”、“更新太快了”……甚至還有“代碼即文檔”這種左傾冒險(xiǎn)主義的托辭不一而足。面對領(lǐng)導(dǎo)燃燒的怒火,工程師們用微笑和聳肩來抵擋。
-
測試、報(bào)告類文檔:這個還好,因?yàn)槭且淮涡曰顒拥奈臋n產(chǎn)物,基本不需要更新?!稖y試方案》歸屬到第一類中。
-
其他:技術(shù)積累、會議紀(jì)要等過程文檔,細(xì)想想更恐怖,幾個月前討論的會議紀(jì)要你還會打開么?到哪里找估計(jì)都忘了吧,那次會議中的決議還記得么?上次調(diào)試遇到的挫折寫入技術(shù)積累了么?…… 呀呀呀,不要再說了。呵呵。
-
更新后文檔的推送:有幾種方式
-
第一次你是通過郵件、聊天軟件把文檔發(fā)給讀者的,更新后的文檔則需要重發(fā)一次,如果你一個月更新一次還好,如果一周更新一次呢?一天呢?
-
文檔在某某系統(tǒng)中歸檔的:這就要依賴與該系統(tǒng)是否好用、方便了。如果想讀一個文檔要進(jìn)入系統(tǒng)中能夠快速找到,Good;如果需要多次跳轉(zhuǎn)、或者要掌握什么奇技淫巧才行,就又要呵呵了,就是這次進(jìn)去找到了,下次可能又找不到了。—— 在某某系統(tǒng)中迷過路的小伙伴請舉下手。
上面這些如果有哪條戳中了你的痛點(diǎn),請繼續(xù)往下讀。如果你覺得沒關(guān)系啦,這些都是小事,雞毛蒜皮的,我們團(tuán)隊(duì)可以克服,那就請不用往下看了,謝謝!
文檔的新方式
現(xiàn)在,我們來試想下一種新的方式:
-
寫作和排版是分離的:作者只關(guān)心內(nèi)容和簡單的排版(如標(biāo)題、分段、列表),不關(guān)心最終的排版布局、字體色調(diào)等表現(xiàn)形式(如顏色、字體、行間距……),類似書籍出版業(yè):作者只需要把內(nèi)容寫在稿紙上或txt文本,編輯去完成排版和書籍的美工。這樣帶來的優(yōu)點(diǎn)很多:
-
多人合寫、協(xié)作是非常方便的:每個人的觀點(diǎn)和想法可以方便的在團(tuán)隊(duì)中流動,關(guān)鍵是可以被記錄在文檔中,而不是散落在郵件里。
-
寫作是簡文本形式的:隨時(shí)、隨處、隨編輯器可打開、編輯,再也不會出現(xiàn)在一個沒有安裝Office的電腦上打不開一個word文檔、打開文檔后一個visio圖是個紅色叉叉……的囧境。
-
文檔更新歷史信手拈來,毫厘不差:不必人工更新文檔中的某個叫做“更新歷史”的章節(jié),而是能夠方便的看到該文檔的所有參與人、參與時(shí)間、和修訂內(nèi)容?!@可不是word的修訂模式能夠完成的。
-
通過瀏覽器訪問文檔:打開IE/Chrom/FF,訪問網(wǎng)址既能看到最新的文檔,收藏到收藏夾中時(shí)不時(shí)看看,甚至可以進(jìn)行RSS訂閱 —— 這種閱讀體現(xiàn)還不能打動你么?
OK,幾大夢想如何來實(shí)現(xiàn)呢?非常方便,我們現(xiàn)在所處的互聯(lián)網(wǎng)時(shí)代早就搞定這些事情了,并且是非常簡單、高效,需要的只是你勇敢的去嘗試、然后喜歡。
-
使用Markdown等標(biāo)記類語言來寫簡文本文檔:編輯器很多,可以參考下文“工具軟件”章節(jié),此處我推薦SublimeText,Win/Mac/Linux全系統(tǒng)通用,適當(dāng)?shù)募由细鞣N插件,寫什么都特有感。
-
使用SCM(svn、git等)管理簡文本文檔:并不是什么都能用SCM管理,至少軟件版本、壓縮包、視頻、甚至圖片……這些二進(jìn)制的東西都是不能交給SVN、git來管理的,倒不是scm不能管理,而是你在做不對的事情,就像非要一個軟件工程師去畫一塊電路板,不是他做不出來,而是你用人不當(dāng)。簡文本是svn/git最能接受的,并且好處多多:
-
多人合寫文檔:在svn/git提交就是了,update一下,然后commit,什么牽頭人、合并人都不再需要了
-
修改別人的章節(jié):update后,修改就是了,提交后能方便地看到修改了啥,還能回退
-
促進(jìn)文檔更新:能看到log和每次更改的記錄,就像一個成績肯定,會建立作者的成就感,越是不斷更新文檔的人,看著自己的更新log,越是更充滿再更新一下、再完美一點(diǎn)的沖動。
-
對開發(fā)工程師沒抵觸:當(dāng)前的開發(fā)工程師99%都已經(jīng)熟練的掌握了svn或git的使用,剩下1%可能還在使用cvs或clearcase。所以問題是如何讓系統(tǒng)工程師、測試工程師等其他人員也掌握svn或git這種可以1h入門速成的好工具(git的精通還是需要更多的時(shí)間和實(shí)踐,svn則基本沒有精通的必要了)。
-
配置HttpServer完成編輯角色:Markdown撰寫的文檔當(dāng)然也可以在本地靜態(tài)編譯成html,自己查看,或分發(fā)給朋友,但這樣做的缺點(diǎn)是把編輯工作自己承擔(dān)了,后果就是模版不統(tǒng)一,這種團(tuán)隊(duì)中不可取。由HttpServer中加Markdown渲染插件:把編輯工作交給服務(wù)器是更好的選擇。
-
加入權(quán)限控制:svn、httpserer都可以進(jìn)行權(quán)限控制,控制某些人不能提交或閱讀。
總結(jié)一下:回頭一看,你會發(fā)現(xiàn),這不就是寫代碼么?做軟件的都懂這個?!?就是,就是,就像寫代碼一樣來寫文檔,對軟件工程師簡直是零門檻,呵呵。
文檔的代碼化
這里需要首先分辨出兩個概念:
-
代碼的文檔化:是對工程師的期望,期望軟硬件工程師寫出的代碼是盡量不需要外部文檔的,或能夠自動生成文檔的。
-
加強(qiáng)有價(jià)值的注釋:這個對大部分工程師都是不抵觸的
-
書寫更易讀的源碼:有意義的變量/函數(shù)命名、更合理的函數(shù)原子分解、避免奇技淫巧的語法使用……
-
盡量不需要外部文檔:
-
自動生成文檔:按照某種語法書寫注釋,編譯時(shí)使用Doxygen等工具自動生成注釋。對內(nèi)部接口可能作用不大,但對模塊間接口和對外服務(wù)接口,自動生成文檔非常重要和必要,甚至可以說,不是自動生成的文檔都是不能用的文檔。
-
文檔的代碼化:是對所有寫文檔人的期望,期望所有寫文檔的人能夠掌握svn/git等工具,采用簡文本格式書寫文檔,適當(dāng)加入標(biāo)記類語言,克服傳統(tǒng)文檔書寫、合并、發(fā)布、更新過程中的痛點(diǎn),寫出喜聞樂見、快速迭代、有效傳播的文檔。
代碼文檔化是另外一個課題,本文不表。
文檔代碼化是本人提出的新名詞,百度上暫時(shí)還搜不到,提出這樣的名詞主要還是為了促進(jìn)更多的人改進(jìn)原有的文檔編寫方式。
那么文檔代碼化除了個人視野眼界和接受新事物的能力兩點(diǎn)阻力之外,還有沒有其他的困難呢?當(dāng)然有:
-
并不是所有文檔都適合代碼化:正式嚴(yán)肅、需要加密、紅頭文件之類的應(yīng)該更適合使用傳統(tǒng)方式
-
markdown標(biāo)準(zhǔn)在不斷演化中,并且已經(jīng)開始有分支能夠強(qiáng)力到影響創(chuàng)始人的決策
-
markdown的編輯工具雖然好找,但編譯工具并不是很統(tǒng)一
下面開始解決上面的幾個小困難 —— 說實(shí)話這些對軟件工程師不算困難,有N多的開源項(xiàng)目可以拿來主義,但對其他團(tuán)隊(duì)有可能是個不大不小的困難,還是描述一下吧。
實(shí)現(xiàn)篇
Markdown基礎(chǔ)
熟悉、已經(jīng)會使用markdown的同學(xué)請?zhí)^本章節(jié)。
標(biāo)記語言與Markdown
計(jì)算機(jī)的可讀文本記錄有兩種:簡文本方式、富文本方式
特性 |
簡文本方式 |
富文本方式 |
編寫工具 |
普通文本編輯軟件 如:記事本、vi/vim、sublime等 |
各自特定的編輯軟件 如:office、WPS等 |
存儲空間 |
小 |
大 |
版本管理 SVN、git |
Server上可壓縮,支持增量存儲 存儲空間極小 Client支持方便的對比等功能 |
Server上不支持增量存儲,占空間 Client大部分不支持對比 |
舉例 |
.txt/.c/.sh/.xml/.html/…… |
.doc/.ppt/.xls/.rtf/…… |
兩者各有優(yōu)缺點(diǎn),長期以來互補(bǔ)而不能互相替代。
但是到了網(wǎng)絡(luò)時(shí)代,移動閱讀日漸成風(fēng),追求簡潔閱讀,隨之也帶動桌面閱讀一起,都在向“扁平化、去擬物、沉浸式”發(fā)展,富文本的豐富似乎變得可有可無(其實(shí)本來word的豐富表現(xiàn)力又有幾人會用?80%的人群只用了富文本編輯工具的20%功能,其實(shí)是另外80%的功能變得可有可無)。
有沒有結(jié)合兩者優(yōu)點(diǎn):簡文本書寫、(?。└晃谋颈憩F(xiàn)的產(chǎn)物呢?—— 有:標(biāo)記語言(markup language),在文本中插入格式描述。
其實(shí)并不是近幾年才開始有人關(guān)注兩種文本的融合,標(biāo)記語言也已經(jīng)發(fā)展了很多年,也不止一種:
都是在文本中插入格式描述,孰優(yōu)孰劣暫且不表,這里只說一個:隨著github的風(fēng)靡而在廣大程序直男中迅速普及的:markdown。
markdown的細(xì)節(jié)本文不表,可參考:
-
了解:
-
創(chuàng)始人:John Gruber
-
語法:
Markdwon工具軟件
我本人對比試用過的幾款如下表。列出來只是想給大家多一些選擇,如果有選擇恐懼癥的同學(xué),跳過本節(jié),參考附錄1,使用 sublime + MarkdownEditor + MarkdownPreview 即可。
Name |
OS |
LivePreview |
TOC |
VI |
OpenSource |
Haroopad |
Mac Win Linux |
Yes |
Yes |
Yes |
No |
Mou |
Mac |
Yes |
No |
No |
No |
MarkdwonPad |
Win |
Yes |
No |
No |
No |
CuteMarkEd |
Win Linux |
Yes |
No |
No |
Github |
SublimeText+plugin |
Mac Win Linux |
No |
Yes |
Yes |
No |
Cmd |
Web |
Yes |
Yes |
Yes |
No |
stackedit |
Web |
Yes |
Yes |
No |
Github |
MaHua |
Web |
Yes |
No |
Yes |
No |
點(diǎn)評
-
Haroopad:偶然發(fā)現(xiàn)的通吃、美觀、功能強(qiáng)悍的全能型選手
-
Mou:好久沒升級了,又聽說作者正在考慮出售,看來已經(jīng)日落西山了。
-
MarkdownPad:基于.NET Framework4.0,啟動稍顯慢,其他都挺好。
-
Sublime Text + Plugin:強(qiáng)烈推薦,取代了我Windows上的Notepad++,F(xiàn)edora上的gedit,和Mac上的TextEdit,以1抵3。其實(shí)VI也能做到以1抵3的,VI也有Markdown插件,但Sublime有VI模式,但VI沒有Sublime的很多特性,只能說:VI加油!
工作流
工作流1:本地靜態(tài)生成HTML
-
書寫markdown文檔
-
本地編譯為HTML
-
markdown文檔和HTML同時(shí)上傳到svn/git服務(wù)器
-
讀者通過權(quán)限受控的http訪問svn服務(wù)器上的html文件
工作流2:HttpServer動態(tài)生成HTML
-
HttpServer管理員配置好服務(wù)器
-
書寫markdown文檔
-
僅上傳markdown文件到svn/git服務(wù)器
-
讀者受權(quán)限控制的通過http訪問svn服務(wù)器上的markdown文件,動態(tài)轉(zhuǎn)換為html
對比兩種工作流,由于每個人轉(zhuǎn)換markdown的方式可能有所不同,甚至markdown轉(zhuǎn)換html可能對某些同學(xué)是個麻煩。我建議采用工作流2,只需管理員做一次配置,后續(xù)的轉(zhuǎn)換都不成問題,只需要規(guī)范大家的書寫。
最后,上幾幅高清無碼大圖來賞析一下。
sublime中暢快的書寫和預(yù)覽markdown

通過SVN來合并、更新文檔,并查看修改記錄,快捷追溯

配置Apache識別.md文件

通過瀏覽器訪問.md后綴的Markdown文件(截圖中為本文的網(wǎng)絡(luò)地址)

一些技術(shù)細(xì)節(jié)
附錄
SublimeText的基本使用
一定要分清標(biāo)記類語言的:編輯器和編譯器。Sublime只是編輯器,MarkdownEditor和MarkdownTOC是編輯器輔助插件,MarkdownPreview是編譯插件。
安裝
基本操作
配置
Plugin
-
Package Control: https://sublime./ 下面各種插件的基礎(chǔ)、管家
-
Markdown類
-
Markdown Preview:https://sublime./packages/Markdown%20Preview
-
Markdown Edit
(1)Provides a decent Markdown color scheme
(2)加快文件的操作
-
MarkdownTOC:安裝后操作: 菜單Tools -- MarkdownTOC -- insert
-
字符編碼類:SublimeText 新建、保存默認(rèn)都是 UTF-8,所以只存在這樣兩種動作:其他編碼格式的文件打開時(shí)沒有被正確識別——需要repon或reload;無論當(dāng)前打開的文件是什么編碼,我想保存為一種我指定的格式——save with或set file encoding to。
|