 
  
  
   |  | 
 
Literate Programming
 There are at least two compelling reasons for taking the trouble to learn and
use one or more literate programming packages. Both involve the development and
maintenance of large sets of code. The first is the desire to create new, large
software projects that will be used, in both the near- and far-term, by a
defined user community; and in the far-term, will experience subsequent maintenance
and further development by other coders. Second the inheritance of
large legacy code packages by a developer/maintainer with the assignment to: 
    | learn the code (well enough to...) |  
    | document it in detail, and |  
    | develop it further. |  
 
The literate programming paradigm, as created by Donald Knuth, is the
availability and use of software tools that allow the programmer to build up
large amounts of code, a piece at a time, and in stream-of-consciousness order. 
  - For example, suppose an engineer is developing a robot arm for use in
    manufacturing. He or she would, in no really predictable order, write code
    to describe a jointed arm as a distributed mass system, assign masses, and
    moment and products of inertia to each of the components, describe the
    linkages in terms of how they can move and how they cannot. Pretty soon the
    engineer realizes that a common reference frame is needed, so describing
    this reference frame is added. Then it is realized that reference frames
    fixed with respect to individual segments of the mechanical assembly are
    naturally assumed in their description, so more code is written to allow
    descriptions of position and velocity in terms of the one meta-reference
    frame, as needed. Suddenly, a new requirement arrives which stipulates a
    certain function for the finished assembly. More code is needed. And then
    more. The power of literate programming is ability to write code, one piece
    at a time, and in the order most natural to the programmer.
 
  - Here is another scenario. Suppose an engineer were to be given a large
    software package that was written years and ago and has been added to and
    ported between various computer platforms since that time. Documentation was
    written, but "by committee," and it hasn't been maintained
    carefully since the software was first released. In spite of that, the code
    is important, is still being used, and it needs to be maintained and
    documented.
 
 
The engineer could dump the entire packages into a "web" file and
he or she could then go to work, learning it piece-by-piece, over time, and
gradually developing an understanding of what the capabilities of the software
are, and what needs to be added, cut, and/or modified. All the power of LaTeX
can be used. (LaTeX is the dominant typesetting software for documentation of
technical material, which can be heavy with math equations, cross-referencing,
and bibliographical citations kept in a database. ) 
Note that the introduction of literate programming practices is more than
just adding copious comment lines to the input files. These comments can be
substantial documentation of both the chunks of code and how they fit together.
In addition, diagrams of whatever complexity is needed can be put directly in
the code, further documentation what is intended and further grounding the code
firmly in theory and in the understanding of the engineer programmer.  |