Evaluating How Novices Utilize Debuggers and Code Execution to Understand Code
Background: Previous work has shown that students can understand more complicated pieces of code through the use of common software development tools (code execution, debuggers) than they can without them.
Objectives: Given that tools can enable novice programmers to understand more complex code, we believe that students should be explicitly taught to do so, to facilitate their plan acquisition and development as independent programmers. In order to do so, this paper seeks to understand: (1) the relative utility of these tools, (2) the thought process students use to choose a tool, and (3) the degree to which students can choose an appropriate tool to understand a given piece of code.
Method: We used a mixed-methods approach. To explore the relative effectiveness of the tools, we used a randomized control trial study (𝑁 = 421) to observe student performance with each tool in understanding a range of different code snippets. To explore tool selection, we used a series of think-aloud interviews (𝑁 = 18) where students were presented with a range code snippets to understand and were allowed to choose which tool they wanted to use.
Findings: Overall, novices were more often successful comprehending code when provided with access to code execution, perhaps because it was easier than the debugger to test a larger set of inputs. As code complexity increased (as indicated by cyclomatic complexity), students become more successful with the debugger. We found that novices preferred code execution for simpler or familiar code to quickly verify their understanding and used the debugger on more complex or unfamiliar code or when they were confused about a small subset of the code. High-performing novices were adept at switching between tools, alternating from a detail-oriented to a broader perspective of the code and vice versa, when necessary. Novices who were unsuccessful tended to be overconfident in their incorrect understanding or did not display a willingness to double check their answers using a debugger.
Implications: We can likely teach novices to independently understand code they do not recognize by utilizing code execution and debuggers. Instructors should teach students to recognize when code is complex (e.g., large number of nested loops present), and to carefully step through these loops using debuggers. We should additionally teach students to be cautious to double check their understanding of the code and to self-assess whether they are familiar with the code. They can also be encouraged to strategically switch between execution and debuggers to manage cognitive load, thus maximizing their problem-solving capabilities.
Tue 13 AugDisplayed time zone: Brisbane change
11:00 - 12:00 | |||
11:00 20mTalk | Scaffolding Novices: Analyzing When and How Parsons Problems Impact Novice Programming in an Integrated Science Assignment Research Papers Benyamin Tabarsi North Carolina State University, Heidi Reichert North Carolina State University, Nicholas Lytle Georgia Institute of Technology, Veronica Catete North Carolina State University, Tiffany Barnes North Carolina State University | ||
11:20 20mTalk | Evaluating the Effectiveness of a Testing Checklist Intervention in CS2: An Quasi-experimental Replication Study Research Papers Gina Bai Vanderbilt University, Zuoxuan Jiang Vanderbilt University, Thomas Price North Carolina State University, Kathryn Stolee North Carolina State University | ||
11:40 20mTalk | Evaluating How Novices Utilize Debuggers and Code Execution to Understand Code Research Papers Mohammed Hassan University of Illinois at Urbana-Champaign, Grace Zeng University of Illinois at Urbana-Champaign, Craig Zilles University of Illinois at Urbana-Champaign |