I particularly like the iterated development approach to teaching on this site. That is, one starts with some minimal working code, states a goal, and then modifies the code to accomplish that goal --- repeatedly.<p>This is a very powerful way to go through a codebase (when it is possible).