title: Code understanding, reverse engineering, best concepts and tools. Java
body: <p>One of most demanding tasks for any programmer, architect is understanding other's code. </p>
  
  <p>For example, I am contractor, hired to rescue some project very quickly. Fix bugs, plan global refactoring and therefore I need most efficient way to understand the code. What is the list of concepts, their priority and best tools for this? </p>
  
  <p>Of what I know: reverse code engineering to create object models (creating of diagram per package is not so convenient), create sequence diagrams (the tool connects in debug mode to the system and generates diagrams from runtime). Some visualizing techniques, using some tools to work not just with <code>.java</code> but also with e.g. <code>JPA</code> implementors like <code>Hibernate</code>. Generate diagram for not all the codebase, but add some class and then classes used by it. </p>
  
  <p>Is Sparx Enterprise Architect state of the art in reverse engineering or far from that? Any other better tools? Ideally would be that tool makes me understand the code as if I wrote it myself :)</p>