Prior studies suggest that novice programmers approach problems by retrieving previously-learned plans. These plans can be high-level (encompassing decomposition and composition of tasks) or low-level (focused mainly on code). What happens when novices face programming problems that compose tasks in new ways or that involve tasks they haven't seen before? How do they move between high-level tasks and low-level code? What does this suggest about how to teach programming? To explore these questions, we interviewed and conducted think-alouds with CS1 students at two universities as they solved multi-task programming problems (e.g. Rainfall). Our initial analyses point to a theory describing the interaction between students' high-level, task-oriented thinking, and low-level, code-oriented thinking. Students who strike a balance between these two types of thinking tend to successfully solve our programming problems. Students who fail tilt this balance in some way: students may retrieve low-level code for familiar tasks, but fail to compose these without the high-level insight about the tasks' compositions. Others may articulate high-level tasks and even task-compositions, but lack concrete patterns to actualize the tasks.
F.E.V.G. Castro and K. Fisler. Balancing Act: A Theory on the Interactions Between High-Level Task-thinking and Low-Level Implementation-thinking of Novice Programmers. International Computing Education Research (Toronto, Ontario, Canada. 12-24 August 2019)