Improving Engagement in Introductory Programming Through Embedded Systems
This post shares my research work on how physical computing can improve engagement and learning outcomes in introductory programming.
The complete dissertation PDF is available here:
Abstract
Introductory programming students often disengage when early tasks feel abstract and disconnected from real outcomes. This research investigates whether embedded systems can improve engagement by making programming tangible. The work introduces an abstraction API on top of SplashKit for Raspberry Pi tasks (GPIO, ADC, PWM, servo/motor control), then evaluates complexity and learning implications using Halstead metrics and task analysis.
The results show that higher-level abstractions can reduce cognitive load indicators (Volume, Difficulty, Effort, and estimated bugs) compared with low-level hardware code while still exposing students to meaningful real-world problems.
Problem Context
- Introductory programming courses frequently report high attrition and disengagement.
- Low-level embedded workflows can be motivating but often overwhelm beginners.
- A key challenge is preserving authenticity while reducing unnecessary complexity.
This dissertation focuses on that trade-off: keeping physical-computing motivation while lowering the barrier to first success.
What I Built
The project extends SplashKit with a Raspberry Pi abstraction layer so students can write concise, intention-focused code rather than boilerplate-heavy hardware setup.
Core API areas:
- Digital I/O
- ADC reads (via external converter)
- Servo and motor helpers
- Error logging and traceability
The design goal was to help beginners focus on control flow, state, and program structure before deep-diving into low-level hardware details.
Research Design
The study compares matched tasks in two styles:
- Low-level implementations
- Abstraction-based implementations
Complexity was analyzed with Halstead metrics across tasks like motor control, potentiometer reading, and servo control, then discussed in relation to cognitive load and beginner learning.
Key Findings
- Abstraction-based solutions were consistently shorter and less complex.
- Difficulty and effort metrics were substantially lower in equivalent tasks.
- Estimated bug potential was lower across the same hardware scenarios.
- Students still engaged with meaningful embedded contexts without being overloaded by setup friction.
In short: embedded systems can improve engagement in introductory programming, but structured abstraction is critical to keep novice cognitive load manageable.
Conclusion
This work supports a practical teaching direction for early programming courses:
- Use physical computing to increase relevance and motivation.
- Introduce guided abstraction to reduce extraneous complexity.
- Gradually reveal lower-level details as student confidence grows.
This sequence helps maintain engagement while protecting fundamentals.
References
The full scholarly references are preserved in the dissertation PDF.
Selected references cited in the study include:
- Luxton-Reilly et al. Introductory programming: A systematic literature review.
- Deci and Ryan. Self-determination theory.
- Papert. Constructionism and learning by making.
- Sweller and Chandler. Cognitive load theory.
- Freeman et al. Active learning in STEM.