Dissertation Defense

Using Program Visualization to Illuminate the Notional Machines

James Juett

Programming is an essential skill in computing and engineering fields, but many students are not competent programmers even after completing initial programming courses. They have difficulty writing correct code, and the skills they develop often turn out to be fragile and do not generalize well to dealing with new problems. A key contributor to this issue is the lack of "hands on" experience with the notional machine – the conceptual computer on which their programs run. For many students, the computer is essentially a black-box, and at best they receive very indirect feedback about what each part of their code actually does at runtime.

We attack this problem using interactive program visualization, which illuminates the notional machine and empowers students to have meaningful, hands-on experiences with what their own code actually does at runtime. In this dissertation, we investigate design choices that go into creating a program visualization tool to best support this approach. In particular, we explore which conceptual models should be presented for expression evaluation and subcall execution, what navigation controls should be offered, and how to provide feedback when problems occur at runtime.

The contributions of this work are novel solutions to these questions and a large-scale empirical study in an authentic educational setting that gives evidence they are effective. We also present Labster, a web-based C++ program visualization system, which brings together our innovations as well as successful techniques from the previous literature into a working ensemble. Labster has proven effective as both an educational tool and a platform for program visualization research.

Sponsored by

Georg Essl