There are different approaches when trying to understand code, a systematic strategy and an ad hoc strategy [#!littman!#,#!pinto!#]. In the systematic approach first the total documentation is studied in a systematic manner. In the ad hoc approach documentation is read at random. The systematic approach can take too much time for large pieces of program and the ad hoc strategy gives poorer results when adapting a program. Therefor documentation has to be in such a way that it is easy to combine both strategies in an intelligent manner. The documentation has also to be in such a way that the limits of the memory are not reached very quickly.
In [#!maiden!#] mental laziness is remarked as one of the problems with reuse. In [#!luchins!#] some experiments are done about how to prevent that the habit masters the individual instead of the individual mastering the habit. It appears that by promoting productive thinking the problem of mental laziness could be overcome. If a solution is actively verbalized transformation to new situations becomes easier [#!mayer!#]. This improves reuse. The active participation in finding a solution improves the recognition of the possibility of applying the solution to other areas [#!mayer!#].
There are two basically different approaches to understanding a program. The first is the systematic strategy, where the programmer traces data flow and control flow throughout the program. The second strategy is the as-needed strategy, where the programmer reads only those part of the documentation or code as (s)he thinks to be of interest [#!pinto!#,#!littman!#].