Skip to main content
A common problem in introductory programming courses is the expert-novice gap between instructors and students. Instructor are experts in the field of computer science, and they have automated much of the programming skills that students are just starting to learn. This automation makes it very difficult for experts to explain their processes and decisions to novices because they execute them without conscious processing, making them feel like its common knowledge, intuition, or “just the way you do it.”

To help instructors verbalize this information, we have used a task analysis procedure with introductory programming instructors to identify subgoals of basic programming procedures. Subgoals are functional pieces of the problem-solving procedures, like defining ​continuation or termination conditions for while loops. 

Using these subgoals, we developed a series of worked example and practice problem pairs for learning to evaluate and write expression statements, selection statements, loops, methods, arrays, and classes (using objects and writing classes).

Based on our research, students solve novel problems better when they understand the subgoals of the problem solving procedure. This research started with problem solving in block-based languages and in laboratory settings to determine the size of the effect. In these settings, learners performed 7-8% better on assessments when they received subgoal-oriented learning materials. Recent work has applied subgoal-oriented materials to a Java-based introductory programming course, with data collected from class assignments and tests. We found that the subgoal-oriented materials help students to perform better in this learning environment as well, especially early in the learning process and for students who are struggling in the course.