<?xml version="1.0" encoding="UTF-8"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcq="http://purl.org/dc/terms/"><records count="1" morepages="false" start="1" end="1"><record rownumber="1"><dc:product_type>Conference Paper</dc:product_type><dc:title>Evaluating How Novices Utilize Debuggers and Code Execution to Understand Code</dc:title><dc:creator>Hassan, Mohammed (ORCID:0000000234739730); Zeng, Grace (ORCID:0009000300435434); Zilles, Craig (ORCID:0000000346014398)</dc:creator><dc:corporate_author/><dc:editor/><dc:description>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 (&#119873; = 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 (&#119873; = 18)
where students were presented with a range of 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 to test a larger set of inputs than the debugger.
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.</dc:description><dc:publisher>ACM</dc:publisher><dc:date>2024-08-12</dc:date><dc:nsf_par_id>10644126</dc:nsf_par_id><dc:journal_name/><dc:journal_volume/><dc:journal_issue/><dc:page_range_or_elocation>65 to 83</dc:page_range_or_elocation><dc:issn/><dc:isbn/><dc:doi>https://doi.org/10.1145/3632620.3671126</dc:doi><dcq:identifierAwardId>2121424</dcq:identifierAwardId><dc:subject>code comprehension</dc:subject><dc:subject>debuggers</dc:subject><dc:subject>execution</dc:subject><dc:version_number/><dc:location/><dc:rights/><dc:institution/><dc:sponsoring_org>National Science Foundation</dc:sponsoring_org></record></records></rdf:RDF>