Teaching Hardware to Demystify Foundational Software Concepts
Both top-down and bottom-up approaches have been proposed for software and programming education. Motivations can be cited for both approaches, but empirical data for either approach can be difficult to obtain. In this paper, we explore potential benefits of a bottom-up approach which begins at the architecture and machine language level. Abstractions of basic software concepts such as data storage and pointers can lead to misconceptions. Understanding how these abstractions are implemented in the underlying hardware can provide clarity of foundational software concepts.
An introductory course on embedded systems and microcontrollers for electrical and computer engineers was modified in an attempt to strengthen student understanding of foundational software concepts. The material covered in the course primarily remained the same, but the course schedule was modified to move the system architecture and instruction set material to the beginning of the course, rather than the end. Data was collected for common exam questions for offerings both prior to and following the course modification. The data indicates that students who were exposed to the functionality of the underlying architecture prior to high-level programming languages had a better understanding of basic concepts such as storage allocation and referential pointers.
This paper contributes to the fields of education in electrical and computer engineering and computer science by providing data on student outcomes for alternate approaches to content delivery. We hope that this information is useful in curriculum design and development for related fields.
Are you a researcher? Would you like to cite this paper?
Visit the ASEE document repository at
for more tools and easy citations.