Program Comprehension: Identifying Learning Trajectories for Novice Programmers