; The Structural Program Design Recipe
(
("Data Analysis and Definition"
 "to understand what kinds of information are to be processed and how to
 represent the information as data" )

("Contract and Header"
 "to write down the most basic information about the program:
  \\begin{enumerate}
  \\item to specify what class of data the program consumes and produces; 
  \\item to choose a program name and names for its parameters; and 
  \\item to document its purpose in a short comment.
  \\end{enumerate}")

("Program Examples"
 "to formulate examples of the program's input-output behavior (using the
 data definitions)" )

("Template  *optional*"
 "to translate the input data definition(s) into a program template") 

("Body"
 "to produce a complete program by filling the gaps in the template")

("Test"
 "to test the program's behavior on the specified examples")
)
