為什麼你該學習Markdown怎麼寫
最近和其他開發團隊合作,討論到文件怎麼寫時,我推薦寫Markdown,但他們有的人聽過沒看過,有的人看過沒寫過,我有點訝異(可是我為什麼要這麼訝異…😑),這明明已是開源社群的業界標準了,但我們的軟體開發人員卻搞得自己很不像業內人士一樣,因此想說來寫一篇好了,以後可請不熟悉的人自己來看。😜
要解決什麼問題
「文件」一直是一個亂了很久的問題。從DOS時期開始,大家會用「PE2」或「漢書」寫一些標準/制式的表格,透過一些控制字元,來控制最終透過列表機印出來的文件。當時,大家並沒有很認真的去思考「數位文件」或是「辦公室無紙化」是什麼意思,電腦對於輸出文件的角色,很像是一個"全能標籤機"一樣的角色。
若要列印出這份文件...
要在本文內寫上「~T24H」這些控制字元
後來,進入了視窗化的作業系統,進入了「所視即所得(WYSIWYG)」的時代,大家都用M$ Word來解決這個問題了,但解決了一個問題卻造成了另一個更嚴重的問題:M$ Word從此變成文件的"標準格式"。但其實同時期也有別的排版工具,像是我以前會用「新人類 莎士比亞」這個工具:
現在想來有點好笑,我怎麼會用這麼奇葩的工具啊…
所以,我用「莎士比亞」排出來的文件,僅管印出來不輸給Word,但它的檔案並不能丟給Word去讀取/編輯。
還在「文件 = 檔案」為主的時代,不管是Word還是PDF,都算是業界標準,只不過它們都是「列印」的標準。
到了網際網路時代後,從純文字的BBS到HTML為主的網頁,正式開啟了另一個「文件」的可能性。因為這上面的資訊,基本上不是為了「列印」而生的,而是為了 在螢幕上顯示 為主的,所以它們能做到的格式就更為複雜:
到底是誰搞出這麼沒人性的效果碼…
HTML基本上算是半個程式碼了…
由於行動裝置的普及,找到螢幕,手機或平板,可能比找一張白紙還容易,網路的普及也讓我們習慣內容是隨時可以更新的,這就改變了我們對「文件」的新定義(需求):它是一個需要跨裝置不跑版,有記錄會更新,跨工具容易寫的「內容」。
以前那個需要被列印在紙上的文件,它沒有記錄,也不會更新;一個.doc的文件,不是用M$ Word打開它的話,不僅容易跑版,也無法換成別的工具開啟;寫網頁很好,只是不容易。在2004年John Gruber發明了Markdown,總算為這個問題開出一條新的可能。
Markdown怎麼解決問題
說穿了很簡單,就是回到文件的本質:純文字可讀。 別小看了這5個字,背後其實有著很深的經驗積累。
不管是PDF, doc(x)或是其他排版軟體輸出的檔案,雖然他們很普遍被用於文件,但卻並不是面向現在21世紀的文件。PDF被設計出來是要跨裝置不跑版,列印出來所視即所得,doc(x)的目標是為了能排版出雜誌等級的文件的,它們都不是純文字,因為它們的"讀者"是對應的Reader,而不是任何一個文字編輯器。「文件」的本質是要記錄資料,使其容易被存取,因此純文字是唯一的選擇。
網頁是純文字,可是它的"可讀性"在現代瀏覽器變成一個系統之後,網頁也從文字變成一份程式碼了。任何的格式或排版,都需要大量的標籤(tag),按照DOM(Document Object Model)的規定置放,才能變成你想要的樣子。而且,網頁的目的也不再只是「文件」,它更像是一個「介面」。我們幾乎可以理解為像「哈利波特」那樣,當報紙裡的圖像會動之後,你就再也無法把它視為一份拿來閱讀的內容。網頁加入了各種互動要素之後,有了UI/UX的要求,它基本上是一個App,不是一份文件。
因為回到文件「純文字」的本質,因此就不可能,也沒必要,在格式/樣式上支援那些花裡胡哨的需求。文件該有的是"強調重點"的需求,是"說明引用"的需求,或是貼上附圖,置入連結的需求。文件裡不需要會"動"的東西,什麼互動的按鈕,還是可播放的影片等,因此這些東西都不會是Markdown應該照顧的需求。
因此Markdown在設計的語法上,就採用了一些簡單的符號,來盡可能滿足「純文字」及「可讀」兩邊的需求:
Markdown文件,基本上就是個純文字檔,裡面儘管加入了一些如「#」,「*」,「、」這類的符號標記內容,使其在轉換為HTML時有著簡單的格式,但就算直接對著這份"源碼"看,也不會覺得很刺眼(相較於HTML),這就是所謂的純文字可讀。
在Wiki上揭露了另一個Markdown很重要的特性,也就是上圖中的中間那格:它生來就是要被轉換成別的型式呈現的,尤其是網頁。
Markdown就是所有文件的「最小公倍數」
為什麼Markdown很快的在軟體開發領域中流行使用起來?因為它基本上可被視為是 「文件」的最小公倍數 。
我們以前聽過許多文件格式互轉的慘劇,因為被其本身的設計,或是Reader的限制而造成的。有了網頁之後,很大程度的打破了這些限制,因為網頁本身是純文字,網頁的本身和瀏覽器都有業界標準,所以網頁一度成為文件很好的格式及歸宿。但剛剛就有提到,網頁可以當文件,但已越來越不適合成為文件,因為它承載的任務越來越多,它是個介面,是個App,很難單純"只是"個文件。即便我們可以用純HTML標記來寫,它仍然不是個容易寫,也不是個容易讀的格式,它從Day1就是一份程式碼。
當Markdown回歸以文件本質為主時,「可以輸出成網頁」這件事就造就了它擁有最大流通性的優勢。也就是說,一但文件是以Markdown寫作的,本質是純文字,簡單的標記和格式,就讓它可輕鬆的轉成不同的文件格式而不跑版(因為沒有什麼"版"可以跑),轉換前是可讀的,轉換後更是易讀的;而這個本質,也讓它可以跟程式碼一併進入版控系統(Revision Control System)一併管理,有完整的變更記錄可供參考。
最終的文件易讀性很足夠,而且可以跟著版控
「源碼」也是可讀的
Markdown是「文件」的完成型態
如果去搜尋一下就知道,Markdown已有各式各樣的應用,拿來寫書是基本的,拿來放數學方程式,畫流程圖,甚至是做投影片都沒有問題。僅管有些應用不是Markdown自身完成的,但這正式彰顯了Markdown這個角色的重要意義:純文字資訊的記錄存取才是重點。在沒有Reader/Renderer的情況下,它仍然是一份文件,就像沒有畫面或影片的小說,都可以讓讀者心領神會一樣。