文学编程

文學式程式設計（英語：Literate programming）是由高德納提出的程式設計方法，希望能用來取代結構化程式設計範型。 
正如高德納所構想的那樣，文學程式設計範型不同於傳統的由電腦強加的編寫程式的方式和順序，而代之以讓程式設計師用他們自己思維內在的邏輯和流程所要求的順序開發程式。文學程式設計自由地表達邏輯，而且它用人類日常使用的語言寫出來，就好像一篇文章一樣，文章里包括用來隱藏抽象的巨集和傳統的原始碼。文學程式設計工具用來從文學原始檔中獲得兩種表達方式，一種用於電腦進一步的編譯和執行，稱作「繞出」（tangled）的程式碼，一種用于格式化文件，稱作從文學原始碼中「織出」（woven）。。雖然第一代文學程式設計工具特定於電腦語言，但後來的工具可以不依賴具體語言，並且存在於比程式語言更高的層次中。

概念

文學程式是用自然語言（比如英語）寫出來的對程式邏輯的解釋，程式中交織點綴著巨集和傳統原始碼段。在文學程式設計的原始檔中，巨集很簡單，它或與標題類似，或是解決程式設計問題時用人類語言描述抽象的解釋性短語。它把程式碼段或更低層次的巨集隱藏了起來，且與電腦科學教學時經常用到的，用虛擬碼寫的演算法相似。這些任意解釋的短語成為新的精確的操作符，操作符由程式設計師在執行過程中建立，組成了在基本程式語言之上的「元語言」。
預處理器用於替換任意層級，說得更準確些是「在'網'和巨集之間建立聯絡」，用命令"tangle"產生可編譯原始碼，用命令"weave"產生文件。預處理器還提供了寫出巨集的內容的能力和在文學程式原始檔中的任何地方增加已建立的巨集的能力，由此不必受傳統程式語言強加的那些限制或是打斷自己的思路。

優點

根據高德納本人所說,文學程式設計為高品質程式而生，因為它強迫程式設計師顯式描述程式背後的思路，讓不充分的設計決策無所遁形。高德納還聲稱文學程式設計提供了一流的文件系統，它並非外掛程式，而是隨著程式設計思路的慢慢展現而不斷自然發展的過程。產生出來的文件使作者能在以後的任何時間重新找到自己的思路，也能使其他程式設計師更容易理解程式的建構過程。這與傳統文件不同，那裡程式設計師必須和編譯器規定的程式碼順序寫在一起，還必須從程式碼和注釋中重現當時的思路。文學程式設計的元語言能力也據稱普遍利于思考，能從更高的層次統觀程式碼，也能增加人的智慧型可成功保持和處理的概念數量。Applicability of the concept to programming on a large scale, that of commercial-grade programs is proven by an edition of TeX code as a literate program.

誤解

文學程式設計常常被誤解為不過是從有原始碼和注釋的檔案中產生格式化文件，或是在程式碼里寫大量的注釋。這一誤解導致那些文件析出工具，如Perl的Plain Old Documentation系統也被稱為「文學程式設計工具」。儘管如此，因為這些工具沒有實現隱藏在自然語言巨集系統背後的「抽象概念網」，或是提供把機器規定的原始碼順序變為人類思維更容易理解的順序的能力，它們不能在高德納提出的意義下被稱作文學程式設計工具。

文學程式設計工具

第一個發布的文學程式設計環境是WEB，由高德納於1981年為他的TeX排版系統而引入。它使用Pascal作為其基礎程式語言，使用TeX作為文件排版工具。The complete commented TeX source code was published in Knuth's TeX: The program, volume B of his 5-volume Computers and Typesetting. Knuth had privately used a literate programming system called DOC as early as 1979. He was inspired by the ideas of Pierre-Arnoul de Marneffe. The free CWEB, written by Knuth and Silvio Levy, is WEB adapted for C and  C++, runs on most operating systems and can produce TeX and PDF documentation. 
其它的文學程式設計概念的實現有noweb和FunnelWeb，它們都是原始碼獨立的。Noweb以其簡單而知名：just 2 text markup conventions and 2 tool invocations are needed to use it, and it allows for text formatting in HTML rather than going through the TeX system. FunnelWeb is another program without dependency on TeX which can produce HTML documentation output. It has more complicated markup (with "@" escaping any FunnelWeb command), but has many more flexible options. 
The Leo text editor is an outlining editor which supports optional noweb and CWEB markup. The author of Leo actually mixes two different approaches: first, Leo is an outlining editor, which helps with management of large texts, second, Leo incorporates some of the ideas of literate programming, which in its pure form (i.e. the way it is used by Knuth Web tool and/or tools like "noweb") is possible only with some degree of inventiveness and the use of the editor in a way not exactly envisioned by its author (in modified @root nodes). However this and other extensions (@file nodes) make outline programming and text management successful and easy and in some ways similar to literate programming.
Haskell程式語言對半文學程式設計有原生支援，其來源於CWEB但用了較簡單的實現。如果想要TeX輸出，你可以寫 a plain LaTeX file where source code is marked by a given surrounding environment; LaTeX can be set up to handle that environment, while the Haskell compiler looks for the right markers to identify Haskell statements to compile, removing the TeX documentation as if they were comments. However, as described above, this is not literate programming in the sense intended by Knuth. Haskell's functional, modular nature makes literate programming directly in the language somewhat easier, but it is not nearly as powerful as one of the a WEB tools where "tangle" can reorganize in arbitrary ways.