It should come as no surprise to anyone who reads this blog that I love to program "by hand." I happen to practice a degree of ascetical programming practices, and I believe that they help me to more deeply internalize and understand problems, ultimately delivering higher quality solutions. One of the ways that I do this is the use of paper programming.
Programming on paper is something of a mystery to many people these days. How do you do it? How to be productive with it? What does it even look like to do your programming on paper instead of doing your work on a computer with a text editor and an interactive feedback loop right at your finger tips ready to provide you with all of the answers to your questions simply by asking the right questions?
Rather than lecture and pontificate on this (you can find plenty of that online), today I'd like to just share a bit of a scan out of my working notebook that contains the work I did for a recent compiler pass. The context here is that I'm in the midst of a compiler rewrite, and part of this rewrite involves restructuring and redesigning some of the passes, both moving them around as well as altering what passes are actually doing what. In this case, a new pass had to be written that I didn't already "know" how to write. It is replacing some of the functionality of passes that appear later, but also doing some other things. I needed to get my head wrapped around this pass and work out how I wanted this pass to look, as well as get a feel for how other similar passes should work.
I did this all in my little, trusty notebook, and I figured I would share this with the wider community to spur on some thought about the media we use in programming and the interaction we have with that media. Hopefully also it will give some people some enjoyment as well.