Literate programming, a technique for coding software systems that promotes readability and comprehension, is examined in detail. The current literate-programming paradigm is reviewed by looking at two sample literate programs. A critique of literate programming as it is currently used is presented, and methods for enhancing the process are explored. A number of new facilities are proposed, and restrictions on current literate-programming practices are suggested.