Foundations First: Improving C’s Viability in Introductory Programming Courses with the Debugging C Compiler
We present The Debugging C Compiler (DCC), a system that composes a suite of compilers with static and dynamic analysis tools to support introductory C programming students. Using C in our introductory computing courses exposes students to low-level mechanics of the operating system, such as pointers and manual memory management — concepts critical in establishing a solid foundation of computing. Unlike typical C implementations, DCC provides programmers with enhanced, approachable run- and compile-time checking and messages. DCC clarifies C’s cryptic operating system errors such as segmentation faults and alleviates the need for students to analyse memory dumps and tackle undefined behaviours. This paper describes DCC’s implementation and features and measures the tool’s efficacy in aiding novice C programmers. We further present our deep reflections on how DCC has successfully allowed us to use C in our large introductory programming courses, with an estimated five million compilations to date. Our research also outlines avenues for future work, which we hope will support others in delivering a foundations-first approach to introductory programming.
Jake is a Lecturer (Asst. Professor) and Co-Head of the Computing and Education research group in the School of Computer Science Engineering at the University of New South Wales, Sydney.
Jake’s research is at the intersection of software and artificial intelligence-based systems to support computing education. Jake’s work has been published in premier conferences and journals such as SIGCSE-TS, and the International Conference on Software Engineering. More importantly, it is embedded in open-source education projects such as DCC, SplashKit, and notably, Formatif, used at several Australian and New Zealand universities with over 230,000 users.
Jake is an Associate Fellow of the Higher Education Academy, an Early Career Academic member of the Australasian Association for Engineering Education, and was a recipient of a 2022 UNSW Teaching Excellence award.
Sasha's background spans multiple disciplines, including Computer Engineering, Biomedical Engineering, and a Ph.D. in Education from UNSW. Prior to joining the School of Computer Science and Engineering as a Lecturer (Asst. Prof), she worked in the engineering industry, focusing on improving problem-solving and design processes. Sasha's passion for education and teaching drew her back to the university, where she now specializes in CS1 education, the role of design thinking in engineering problem-solving, and the application of cognitive load theory concepts to improve pedagogy across the degree.
Sasha is an Associate Fellow of the Higher Education Academy, and her dedication to teaching excellence was recognized with the 2022 UNSW Teaching Excellence Award.