I love this article on code comprehension; people don't read code unless they are trying to do something with it, usually to change it. Papert's theory of constructionism claims that meaningful learning happens when the learner constructs something new to achieve a goal they already have.
Makes me wonder if there's any way to really understand code *apart* from trying to make it do new things.