A foundational programming skill is code tracing. It involves simulating how a computer executes programs by tracking variable values and flow of program execution. Learning this skill is challenging and so research is needed to identify effective forms of assistance. This dissertation involves the design and evaluation of a computer tutor, called CT-Tutor.The tutor provided assistance for code tracing through interface scaffolding during code tracing as well as worked examples. The tutor was evaluated in three studies. Study 1 involved four versions of CT-Tutor to evaluate the effect of two levels of instructional scaffolding (high/reduced) and two types of instructional order (example-first/problemfirst). Contrary to my hypothesis, there was no evidence for a learning benefit from high scaffolding. However, the high-scaffolding version improved performance by reducing the number of attempts needed to get an answer correct. Instructional order also influenced performance. The example-first group spent more time per example, less time per problem, and required fewer attempts to produce correct answers.To shed light on student reasoning with CT-Tutor, Study 2 used a think-aloud protocol to analyze students' self-explanations and reading behaviors with the high-and reduced-scaffolding versions of the CT-Tutor; an exit interview was used to obtain data on the tutor's usability. Self-explanation was the main variable of interest, as prior research demonstrated it is beneficial for learning. There was no significant difference in the number of self-explanation between the two scaffolding versions. The exit interviews revealed that the CT-Tutor example design could be improved. i The CT-Tutor was subsequently re-designed to provide either dynamic and static examples. Previous research suggested that domains involving change over time are best presented by dynamic examples; code tracing is one such domain. The effect of example type on learning was not significant. The dynamic-example group spent more time on the examples, had marginally fewer incorrect attempts, and spent less time producing incorrect answers. In sum, ignoring condition, the CT-Tutor improved learning. However, the effect of the experimental manipulations was inconclusive. Performance was significantly affected by the experimental manipulations: the high-scaffolding problem interface, examplefirst instructional order, and dynamic examples improved code-tracing performance. David for your invaluable advice, guidance, and feedback which have been instrumental in shaping this dissertation. I extend my appreciation to my examining committee: my internal examiner, Robert Biddle, and my external examiner, Gord McCalla. Your insightful comments and constructive feedback have significantly enriched my work. This dissertation would not have been possible without my family. My parents, who have always emphasized the importance of education and believed in me throughout the highs and lows of this degree; and my sister, whose reactions to the magnitude of work inv...