Literate Programming Examples

I’ve really become enamored with the idea of literate programming but figured that the best way to re-introduce it to others is the same way Knuth did… with examples.

What does it look like to work this way?


Here are a few screenshots of my Emacs environment showing some of these examples.

Source code with embedded hyperlinks


Auto hiding can show just the headers


Describe diagrams with the source code



Now on to the examples. Keep in mind that each example below has an original “ORG” file as well as derivative files:


<style type=“text/css”> .center { margin-left: auto; margin-right: auto; } .center td { text-align: center; vertical-align: top; } .center a { border: none; text-weight: bold; } .arrow-cell { font-size: 200%; } .box-cell { font-size: 110%; border: 2px solid #545454; padding: 8px; } </style>

Coin Kata

Many people have talked about the Coin Change Kata, as a way to practice our coding craft. I thought it would be fun to try it in a literate way, and this is the results. I suggest viewing the tangled web page first.

<table class=“center”> <tr><td colspan=“3” class=“box-cell”> <a href=“”></a> </td></tr> <tr><td class=“arrow-cell”> ↓ </td><td></td> <td class=“arrow-cell”> ↓ </td></tr> <tr><td class=“box-cell”> <a href=“coin-kata.html”>coin-kata.html</a> </td> <td> </td> <td class=“box-cell”> <a href=“coin-kata.clj”>coin-kata.clj</a> <a href=“coin-kata-tests.clj”>coin-kata-tests.clj</a> </td></tr></table>

Why yes, you can keep your tests next to your code and tangle it out to separate file(s).

Emacs Init File

Being a rabid Emacs user, my .emacs file grows regularly, and sometimes I forget how some of the code I’ve added works… or even why I added it in the first place. LP and Org (with its abilities to have clickable hyperlinks) seem a natural fit.

My Emacs and Shell scripts are uploaded to Github, which now supports automatic weaving of org-mode files, so check out which gets tangled as .emacs in my $HOME directory.

Date: 2013 Jan 14

Created: 2022-12-03 Sat 11:08