Teaching Program Decomposition in CS1: A Conceptual Framework for Improved Code Quality
Open Access
- 12 February 2025
- conference paper
- Published by Association for Computing Machinery (ACM)
- p. 443-449
Abstract
Program decomposition is essential for developing maintainable and efficient software, yet it remains a challenging skill to teach and learn in introductory programming courses. What does program decomposition for procedural CS1 programs entail? How can CS1 students improve the decomposition of their programs? What scaffolded exercises can instructors use to teach program decomposition skills? We aim to answer all these questions by presenting a conceptual framework that (1) is grounded in the established code style principles, (2) provides a systematic approach that can be taught to students as an actionable strategy to improve the program decomposition of their programs, and (3) includes scaffolded exercises to be used in classroom activities. In addition, this systematic approach is automatable and can further be used to implement visualizers, automated feedback generators and digital tutors.Keywords
All Related Versions
This publication has 28 references indexed in Scilit:
- Software Quality as a Subsidy for Teaching Programming2021
- Threshold concepts, conceptions and skills: Teachers' experiences with students' engagement in functionsJournal of Computer Assisted Learning, 2020
- Theoretical Evaluation of Software Coupling Metrics2020
- How to learn and how to teach computational thinking: Suggestions based on a review of the literatureComputers & Education, 2018
- Towards an empirically validated model for assessment of code quality2014
- A visualization method of program dependency graph for identifying extract method opportunity2011
- Interleaved pattern composition and scaffolded learning2009
- Fundamental concepts of CS12007
- A unified framework for coupling measurement in object-oriented systemsIEEE Transactions on Software Engineering, 1999
- A metrics suite for object oriented designIEEE Transactions on Software Engineering, 1994