Cognitive theories of how programmers produce code suggest that novices' approaches are primarily driven by the retrieval of previously-learned plans. These plans can be high-level, focusing on task decomposition and composition, or low-level, focusing on code implementations. These theories, however, do not describe *how* novices move between high-level tasks and low-level code, especially when faced with novel problems. Understanding these transitions can help concretely tease out *why and where* novices struggle and *how* they use their knowledge of plans and design techniques when they get stuck. We studied this by conducting think-alouds with CS1 students at two universities as they solved multi-task programming problems with unfamiliar components. Our analysis paid particular attention to a series of design techniques that the students had been explicitly taught in their respective courses. We identified patterns of high- and low-level thinking that relate to students' success on the problems, and propose a concrete framework of high- and low-level work that summarizes the transitions that we observed.
F.E.V.G. Castro and K. Fisler. Qualitative Analyses of Movements Between Task-level and Code-level Thinking of Novice Programmers. 51st ACM Technical Symposium on Computer Science Education (Portland, OR, USA. 11-14 March 2020)