Computing education has grown rapidly, with surging enrollments in computer science (CS) classes at higher-education institutions, its growing introduction into K-12 classes, and the proliferation of coding boot camps. Researchers have attempted to revolutionize programming education through learning languages (e.g. blocks-based programming), integrating coding and play (e.g. programmable toys), or augmenting programming tools to make them more novice-friendly (e.g. program visualizations), to name some. Novices, however, continue to find learning to program challenging, and educators are often left without essential information about their students: why do learners struggle, how do they navigate their programming knowledge, and what conceptions about programming (or their tools) do they form? These questions can often be traced back to the lack of models of programmer cognition that could explain how tools and instruction interact with learners’ thinking. If we are to develop tools and interventions for enhancing programming education, these must be built around viable models of how learning actually works.
My research focuses on the cognitive aspect of how novices learn programming. From my studies of novice programmers, I developed models of programmer cognition that captures interactions between aspects of novices’ thinking as they write code: how they choose program structure, how they use programming techniques, and how they navigate different representations of their solutions. These models can be used to inform the design of learner-centered programming tools, curricula, and learning experiences for novices.