skip to main content


Title: Program Comprehension with Physical Computing: A Structure, Function, and Behavior Analysis of Think-Alouds with High School Students.
Comprehending programs is key to learning programming. Previous studies highlight novices’ naive approaches to comprehend ing the structural, functional, and behavioral aspects of programs. And yet, with the majority of them examining on-screen program ming environments, we barely know about program comprehension within physical computing—a common K-12 programming context. In this study, we qualitatively analyzed think-aloud inter view videos of 22 high school students individually comprehending a given text-based Arduino program while interacting with its corresponding functional physical artifact to answer two questions: 1) How do novices comprehend the given text-based Arduino pro gram? And, 2) What role does the physical artifact play in program comprehension? We found that novices mostly approached the program bottom-up, initially comprehending structural and later functional aspects, along different granularities. The artifact provided two distinct modes of engagement, active and interactive, that supported the program’s structural and functional comprehension. However, behavioral comprehension i.e. understanding program execution leading to the observed outcome was inaccessible to many. Our findings extend program comprehension literature in two ways: (a) it provides one of the very few accounts of high school students’ code comprehension in a physical computing con text, and, (b) it highlights the mediating role of physical artifacts in program comprehension. Further, they point directions for future pedagogical and tool designs within physical computing to better support students’ distributed program comprehension.  more » « less
Award ID(s):
1742140
NSF-PAR ID:
10309426
Author(s) / Creator(s):
;
Date Published:
Journal Name:
Proceedings of the 26th ACM Conference on Innovation and Technology in Computer Science Education
Volume:
1
Format(s):
Medium: X
Sponsoring Org:
National Science Foundation
More Like this
  1. Background and context. “Explain in Plain English” (EiPE) questions ask students to explain the high-level purpose of code, requiring them to understand the macrostructure of the program’s intent. A lot is known about techniques that experts use to comprehend code, but less is known about how we should teach novices to develop this capability. Objective. Identify techniques that can be taught to students to assist them in developing their ability to comprehend code and contribute to the body of knowledge of how novices develop their code comprehension skills. Method. We developed interventions that could be taught to novices motivated by previous research about how experts comprehend code: prompting students to identify beacons, identify the role of variables, tracing, and abstract tracing. We conducted think-aloud interviews of introductory programming students solving EiPE questions, varying which interventions each student was taught. Some participants were interviewed multiple times throughout the semester to observe any changes in behavior over time. Findings. Identifying beacons and the name of variable roles were rarely helpful, as they did not encourage students to integrate their understanding of that piece in relation to other lines of code. However, prompting students to explain each variable’s purpose helped them focus on useful subsets of the code, which helped manage cognitive load. Tracing was helpful when students incorrectly recognized common programming patterns or made mistakes comprehending syntax (text-surface). Prompting students to pick inputs that potentially contradicted their current understanding of the code was found to be a simple approach to them effectively selecting inputs to trace. Abstract tracing helped students see high-level, functional relationships between variables. In addition, we observed student spontaneously sketching algorithmic visualizations that similarly helped them see relationships between variables. Implications. Because students can get stuck at many points in the process of code comprehension, there seems to be no silver bullet technique that helps in every circumstance. Instead, effective instruction for code comprehension will likely involve teaching a collection of techniques. In addition to these techniques, meta-knowledge about when to apply each technique will need to be learned, but that is left for future research. At present, we recommend teaching a bottom-up, concrete-to-abstract approach. 
    more » « less
  2. de Vries, E. ; Hod, Y. ; Ahn, J. (Ed.)
    While making physical computational artifacts such as robots or electronic textiles is growing in popularity in CS education, little is known about student informal conceptions of these systems. To study this, we video-recorded think-aloud sessions (~10 minutes each) of 22 novice CS high school students explaining their understanding of everyday physical computing systems and qualitatively analyzed transcripts and student drawings for their structural, behavioral, and functional understanding of these systems. Most students identified the presence of programs in making these systems functional but struggled to account them structurally and behaviorally. A few students pointed out probable programming constructs in shaping underlying mechanisms, drawing from their prior programming experiences. To integrate these systems in computing education, we call for pedagogical designs to address the invisibility of computation—both of structural interconnections and of program execution. 
    more » « less
  3. Robotics has emerged as one of the most popular subjects in STEM (Science, Technology, Engineering, and Mathematics) education for students in elementary, middle, and high schools, providing them with an opportunity to gain knowledge of engineering and technology. In recent years, flying robots (or drones) have also gained popularity as teaching tool to impart the fundamentals of computer programming to high school students. However, despite completing the programming course, students may still lack an understanding of the working principle of drones. This paper proposes an approach to teach students the basic principles of drone aeronautics through laboratory programming. This course was designed by professors from Vaughn College of Aeronautics and Technology for high school students who work on after-school and weekend programs during the school year or summer. In early 2021, the college applied for and was approved to offer a certificate program in UAS (Unmanned Aerial Systems) Designs, Applications, and Operations to college students by the Education Department of New York State. Later that year, the college also received a grant from the Federal Aviation Administration (FAA) to provide tuition-free early higher education for high school students, allowing them to complete the majority of the credits in the UAS certificate program while still enrolled in high school. The program aims to equip students with the hands-on skills necessary for successful careers as versatile engineers and technicians. Most of the courses in the certificate program are introductory or application-oriented, such as Introduction to Drones, Drone Law, Part 107 License, or Fundamentals of Land Surveying and Photogrammetry. However, one of the courses, Introduction to Drone Aeronautics, is more focused on the theory of drone flight and control. Organizing the lectures and laboratory of the course for high school students who are interested in pursuing the certificate can be a challenge. To create the Introduction to Drone Aeronautics course, a variety of school courses and online resources were examined. After careful consideration, the Robolink Co-drone [1] was chosen as the experimental platform for students to study drone flight, and control and stabilize a drone. However, developing a set of comprehensible lectures proved to be a difficult task. Based on the requirements of the certificate program, the lectures were designed to cover the following topics: (a) an overview of fundamentals of drone flight principles, including the forces acting on a drone such as lift, weight, drag, and thrust, as well as the selection of on-board components and trade-offs for proper payload and force balance; (b) an introduction to the proportional-integral-directive (PID) controller and its role in stabilizing a drone and reducing steady-state errors; (c) an explanation of the forces acting on a drone in different coordinates, along with coordinate transformations; and (d) an opportunity for students to examine the dynamic model of a 3D quadcopter with control parameters, but do not require them to derive the 3D drone dynamic equations. In the future, the course can be improved to cater to the diverse learning needs of the students. More interactive and accessible tools can be developed to help different types of students understand drone aeronautics. For instance, some students may prefer to apply mathematical skills to derive results, while others may find it easier to comprehend the stable flight of a drone by visualizing the continuous changes in forces and balances resulting from the control of DC motor speeds. Despite the differences in students’ mathematical abilities, the course has helped high school students appreciate that mathematics is a powerful tool for solving complex problems in the real world, rather than just a subject of abstract numbers. 
    more » « less
  4. Today’s STEM classrooms have expanded the domain of computer science education from a basic two-toned terminal screen to now include helpful Integrated Development Environments(IDE) (BlueJ, Eclipse), block-based programming (MIT Scratch, Greenfoot), and even physical computing with embedded systems (Arduino, LEGO Mindstorm). But no matter which environment a student starts programming in, all students will eventually need help in finding and fixing bugs in their code. While the helpful IDE’s have debugger tools built in (breakpoints for pausing your program, ways to view/modify variable values, and "stepping" through code execution), in many of the other programming environments, students are limited to using print statements to try and "see" what is happening inside their program. Most students who learn to write code for Arduino microcontrollers will start within the Arduino IDE, but the official Arduino IDE does not currently provide any debugging tools. Instead, a student would have to move on to a professional IDE such as Atmel Studio or acquire a hardware debugger in order to add breakpoints or view their program’s variables. But each of these options has a steep learning curve, additional costs, and can require complex configurations. Based on research of student debugging practices[3, 7] and our own classroom observations, we have developed an Arduino software library, called Arduino Debugger, which provides some of these debugging tools (ex. breakpoints) while staying within the official Arduino IDE. This work continues a previous library, (redacted), which focused on features specific to e-textiles development boards. The Arduino Debugger library has been modified to support not only e-textile boards (Lilypad, Adafruit Circuit Playground) but most AVR and ARM based Arduino boards.We are also in the process of testing a set of Debugging Code Templates to see how they might increase student adoption of debugging tools. 
    more » « less
  5. What knowledge does learning programming require? Prior work has focused on theorizing program writing and problem solving skills. We examine program comprehension and propose a formal theory of program tracing knowledge based on control flow paths through an interpreter program's source code. Because novices cannot understand the interpreter's programming language notation, we transform it into causal relationships from code tokens to instructions to machine state changes. To teach this knowledge, we propose a comprehension-first pedagogy based on causal inference, by showing, explaining, and assessing each path by stepping through concrete examples within many example programs. To assess this pedagogy, we built PLTutor, a tutorial system with a fixed curriculum of example programs. We evaluate learning gains among self-selected CS1 students using a block randomized lab study comparing PLTutor with Codecademy, a writing tutorial. In our small study, we find some evidence of improved learning gains on the SCS1, with average learning gains of PLTutor 60% higher than Codecademy (gain of 3.89 vs. 2.42 out of 27 questions). These gains strongly predicted midterms (R2=.64) only for PLTutor participants, whose grades showed less variation and no failures. 
    more » « less