文學編程與Emacs

文學編程

文學編程,和絕大多數的計算機理論一樣,是一個舶來品。它的英文原名是Literate Programming。“把文學和編程兩個風馬牛不相及的東西揉到一起,也是一個夠奇葩的說法了吧!”。第一次看到這個概念的人,包括我,一定都是這個想法。確實,文學需要我們充分的展開感性的翅膀,感受生活中的遐思;編程需要我們具有嚴謹的理性思維,務必做到事無巨細,事必躬親。這兩樣完全不一樣的東西要聯系在一起,確實需要“一定”的想象力啊!

然而,文學編程的想法是由計算機大師高德納提出來的,那一定是有不同尋常的地方。讓我們來看看感性和理性的碰撞會產生出什么樣的火花。

關于高大師,維基百科是這樣介紹老人家的:

唐納德·爾文·克努斯(英語:Donald Ervin Knuth,漢名:高德納,1938年1月10日-),出生於美國密爾沃基,著名計算機科學家,斯坦福大學計算機系榮譽退休教授。高德納教授為現代計算機科學的先驅人物,創造了演算法分析的領域,在數個理論計算機科學的分支做出基石一般的貢獻。在計算機科學及數學領域發表了多部具廣泛影響的論文和著作。1974年圖靈獎得主。

高德納最為人知的事蹟是,他是《計算機程序設計藝術》(The Art of Computer Programming)的作者。此書是計算機科學界最受高度敬重的參考書籍之一。此外還是排版軟件TeX和字型設計系統Metafont的發明人。提出文學編程的概念,並創造了WEB與CWEB軟體,作為文學編程開發工具。

什么是文學編程

首先我們來看看文學編程在維基百科中的定義:

文學編程(英語:Literate programming)是由高德納提出的編程方法,希望能用來取代結構化編程范型。

正如高德納所構想的那樣,文學編程范型不同于傳統的由計算機強加的編寫程序的方式和順序,而代之以讓程序員用他們自己思維內在的邏輯和流程所要求的順序開發程序。文學編程自由地表達邏輯,而且它用人類日常使用的語言寫出來,就好像一篇文章一樣,文章里包括用來隱藏抽象的宏和傳統的源代碼。文學編程工具用來從文學源文件中獲得兩種表達方式,一種用于計算機進一步的編譯和執行,稱作“繞出”(tangled)的代碼,一種用于格式化文檔,稱作從文學源代碼中“織出”(woven)。

雖然第一代文學編程工具特定于計算機語言,但后來的工具可以不依賴具體語言,并且存在于比編程語言更高的層次中。

文學編程的特點

文學編程講究的是文檔與計算機程序的統一。需要按照某種邏輯組織起來的計算機程序,成為了一篇文檔的組成部分。通過一些計算機軟件的支持,使得計算機可以調去其中的代碼以便執行,人類讀取文檔方便進行代碼的維護。因此

  • 文學編程里,文檔和計算機程序是合并在一起的。開發文檔和計算機代碼不再獨立存儲
  • 文學編程需要具有一定的組織邏輯,這個邏輯更多的是符合人們閱讀文檔的邏輯。
  • 支持文學編程的開發環境會自動提取用于計算機執行的代碼,交由計算機執行
  • 文學編程是比計算機編程更高級的一種開發方式。對于開發IDE的依賴更多
  • 目前文學編程還沒有成為主流的編程方式。文學編程還需要更多推廣和計算機開發環境的支持。

Emacs對文學編程的支持

通過org mode里的babel模塊,可以實現對五十余種語言按文學編程的方式進行代碼開發。同時由于Emacs的開放性,開發者還可以根據自己的需求方便的定義新的語言支持。Org mode的文檔中甚至為此而提供了一個template(ob-template.el)。

這里是一個我的Emacs的啟動配置文件。我采用的文學編程的方式對代碼進行組織。有圖有真相:

按文學編程方式組織的Emacs配置文件
按文學編程方式組織的Emacs配置文件

這種編程方式解決了幾個我的痛點:

  1. Emacs 配置文件中的代碼很多,用處也各有千秋。
    修改代碼的時候我希望能有一種快速定位的方法。顯然,符合自然語言的文檔組織方式是最簡單的
  2. Emacs 配置文件中的代碼有一些我已經不再使用了,但舍不得刪除。
    為了供將來參考,我保留不再使用的配置代碼在我的Emacs配置文件中。這時,只需要調整代碼塊的參數即可。
  3. 對于一部分邏輯比較復雜的代碼片段,可以進行詳細的描述
    在描述代碼的時候,甚至可以吧代碼設計的想法和過程寫進去。這個和寫代碼的時候添加注釋的感覺完全不一樣啊
  4. 有了上面的這些自然語言的文檔,代碼的可維護性得到了提升
    說實話,我也不是每天都會吧自己的Emacs配置文件打開來看看。時間長了,自己的代碼,自己都不認識了。在我使用Vim的時候,我自認vim的配置文件我已經寫的很好了,但是現在我回去看,代碼的組織方式已經被我遺忘了。要重新撿起來,還需要一些時間恢復記憶。:P

我應該使用文學編程嗎?

說實話,這個問題應該問你自己哦。我覺得使用文學編程在管理我自己的Emacs配置文件上是有效的、簡便的。當然也有國外的大牛在使用文學編程的方式進行科學研究。對于他們來說,研究的數據執行結果也不過是文檔中的一個代碼塊而以。也將不同類型的編程語言按照一種統一的方式組合在了一起,共同為研究報告的編寫貢獻數據。

說實話,我認為對于這種新的編程方式,了解了解是有好處的。你說呢?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容