Introducing a High School Student to Systems Programming Via Bare Machine Computing
摘要
In this paper, we describe the use of bare machine software that runs without an operating system or kernel to introduce a high school student familiar with Java and Python to system internals and the fundamentals of systems programming. The motivation was the ability of bare machine computing applications to directly communicate to device hardware and allow easy access to low-level computing elements. The student first worked together with the faculty mentor to understand the basic principles underlying the design and implementation of the bare machine web server. Specifically, the student learned about bare machine computing and key system elements including CPU, main memory, addressing, program counter, general-purpose registers, tasking, BIOS, and interrupts. The student also became proficient in C and C++, gained familiarity with the bare machine application development environment, and studied networking aspects of the server such as the basics of Ethernet, IP, and TCP. Next, the student designed simple user interfaces that enabled peer students to visualize and manipulate several key components of the server. This required modifying the web server code so that students could access it using their smartphones. Finally, the student designed and administered a survey to the peer students to understand their initial impressions about bare machine computing and low-level systems elements in general. For comparison, a survey was also administered to beginning college students. At the end of the paper, we discuss the many challenges involved, the knowledge gained, and the lessons learned.