Knuth wrote the seminal work on this subject as well (apart from a variety of other subjects). Literate programming is like embedding code in a free flowing essay describing what your program does and generating both code and documentation from that one document, literally from the source code. It is not well documented code.
Wrote my first literate program today -- a Newton Raphson Solver. What I found interesting is that literate programming slows you down (significantly), but forces you to think about your programming at a more meta level. "Is this making sense and not just for me but for another reader?" While this question might seem irrelevant unless you intend to share code, answering it helps clear up conceptual limitations in thinking about code.
I am using noweb installed using apt on ubuntu.
I have just started reading Jeff Erikson's very engaging book on Algorithms and the following quote struck me, which I am reproducing verbatim
Your primary job as an algorithm designer is teaching other people how and why your algorithms work. If you can’t communicate your ideas to other human beings, they may as well not exist. Producing correct and efficient executable code is an important but secondary goal. Convincing yourself, your professors, your (prospective) employers, your colleagues, or your students that you are smart is at best a distant third.