Many problems exist with using UML style diagramming tools to understand code. They focus on designing tasks; reverse-engineering capabilities often just end up showing convoluted pictures and lots of useless information. In order to best understand code visually, it is important to think about which specific perspectives you need to understand. Is the structure of the codebase in a state of disrepair and needs attention? Or are underlying code concepts, features, and logic the most important? There seem to be three main types of diagrams people use to help visually understand code.