Applying learning theory principles in the design of program visualization software by