Literate programming techniques