This document discusses program understanding and how program analysis can help programmers understand code. It describes various program analysis techniques like call graph construction, program slicing, concept analysis, change impact analysis, and metrics that can help with understanding. However, it also notes limitations in how these analyses integrate with a programmer's workflow and that the goal should be just-in-time understanding for specific tasks rather than complete understanding. It advocates using visualizations to present analysis results in a compact way and argues understanding is needed to implement features, fix bugs, or improve performance when changes are needed.