Faculty Advisor or Committee Member

Kathryn Fisler, Advisor

Faculty Advisor or Committee Member

Daniel Dougherty, Committee Member

Faculty Advisor or Committee Member

Jacob Whitehill, Committee Member

Faculty Advisor or Committee Member

Brian Dorn, Committee Member




Studies assessing novice programming proficiency have often found that many students coming out of introductory-level programming courses still struggle with programming. To address this, some researchers have attempted to find and develop ways to better help students succeed in learning to program. This dissertation research contributes to this area by studying the programming processes of students trained through a specific program design curriculum, How to Design Programs (HTDP). HTDP is an introductory-level curriculum for teaching program design that teaches a unique systematic process called the design recipe that leverages the structure of input data to design programs. The design recipe explicitly scaffolds learners through the program design process by asking students to produce intermediate artifacts that represent a given problem in different ways up to a program solution to the problem. Although HTDP is used in several higher-education institutions and some K-12 programs, how HTDP-trained students design programs towards problems, particularly ones with multiple task-components, has not been thoroughly studied. The overarching goal of this dissertation is to gain an understanding and insight into how students use the techniques put forth by the design recipe towards designing solutions for programming problems. I conducted a series of exploratory user studies with HTDP-trained student cohorts from HTDP course instances across two different universities to collect and analyze students’ programming process data in situ. I synthesized findings from each study towards an overall conceptual framework, which serves as a data-grounded theory that captures several facets of HTDP-trained students’ program design process. The main contribution of this work is this theory, which describes: (1) the program design-related skills that students used and the levels of complexity at which they applied these skills, (2) how students’ use of design skills evolve during a course, (3) the interactions between program design skills and course contexts that influenced how students applied their skills, and (4) the programming process patterns by which students approached the programming problems we gave and how these approaches relate towards students’ success with the problems. Using insights from the theory, I describe recommendations toward pedagogical practices for teaching HTDP-based courses, as well as broader reflections towards teaching introductory CS.


Worcester Polytechnic Institute

Degree Name



Computer Science

Project Type


Date Accepted





Program design, Planning, Computing education, Cognition, Functional programming, Human-centered computing