skip to main content


Title: Subgoals for CS1 in Python
In our previous research we found that teaching novice programmers introductory programming in Java using subgoal labels led to deeper knowledge [2] and increased persistence for students potentially at risk of dropping out or failing their first undergraduate course in CS [3]. Given the increasing number of universities using Python in introductory programming classes, we have begun the process of defining the subgoals to use in Python-based introductory courses. We have repeated the Task Analysis by Problem Solving (TAPS) development process [1] that we used to create Java-based instructional materials. As with the Java-based instructional materials, we have created subgoals for both evaluating programs written in Python and writing programs in Python. The poster will present an overview of the TAPS development process for identifying the Python subgoals and the proposed experimental design for assessing the effectiveness of the instructional materials.  more » « less
Award ID(s):
2143069 2111578
NSF-PAR ID:
10336481
Author(s) / Creator(s):
Date Published:
Journal Name:
Proceedings of the 2022 ACM Conference on International Computing Education Research V.2 (ICER 2022)
Format(s):
Medium: X
Sponsoring Org:
National Science Foundation
More Like this
  1. Subgoal learning has improved student problem-solving performance in programming, but it has been tested for only one-to-two hours of instruction at a time. Our work pioneers implementing subgoal learning throughout an entire introductory programming course. In this paper we discuss the protocol that we used to identify subgoals for core programming procedures, present the subgoal labels created for the course, and outline the subgoal-labeled instructional materials that were designed for a Java-based course. To examine the effect of subgoal labeled materials on student performance in the course, we compared quiz and exam grades between students who learned using subgoal labels and those who learned using conventional materials. Initial results indicate that learning with subgoals improves performance on early applications of concepts. Moreover, variance in performance was lower and persistence in the course was higher for students who learned with subgoals compared to those who learned with conventional materials, suggesting that learning with subgoal labels may uniquely benefit students who would normally receive low grades or dropout of the course. 
    more » « less
  2. There have been many calls recently for computing for all across the nation. While there are many opportunities to study and use computing to advance the fields of computer science, software development, and information technology, computing is also needed in a wide range of other disciplines, including engineering. Most engineering programs require students take a course that teaches them introductory programming, which covers many of the same topics as an introductory course for computing majors (and at times may be the same course). However, statistics about the success of a course that is an introductory programming course are sobering; approximately half the students will fail, forcing them to either repeat the course or leave their chosen field of study if passing the course is required. This NSF IUSE project incorporates instructional techniques identified through educational psychology research as effective ways to improve student learning and retention in introductory programming. The research team has developed worked examples of problems that incorporate subgoal labels, which are explanations that describe the function of steps in the problem solution to the learner and highlight the problem-solving process. Using subgoal labels within worked examples, which has been effective in other STEM fields, students are able to see an expert's problem solving process, which helps students learn to solving problems before they can solve problem themselves. Experts, including instructors, teaching introductory level courses are often unable to explain the process they use in problem solving at a level that learners can grasp because they have automated much of the problem-solving processes after many years of practice. This submission will present the results of the first part of development of subgoals and will explain how to integrate them into classroom lessons in introductory computing classes. 
    more » « less
  3. Subgoal labeling is an instructional design framework for breaking down problems into pieces that are small enough for novices to grasp, and often difficult for instructors (i.e., experts) to articulate. Subgoal labels have been shown to improve student performance during problem solving in many disciplines, including computing. Improved student performance occurs because subgoal labels improve student transfer and retention of knowledge. With support from NSF (DUE-1712025, 1712231, 1927906, 2110156, 2111578), subgoal labels have been previously identified and integrated into a CS1 course (variables, expressions, conditionals, loops, arrays, classes) and an e-book has been created on the Runestone platform to enable students to complete practice problems using the subgoals. The initial implementation focused on Java, but within the past year, the development of subgoals for CS1 courses in Python have been created. Subsequently, course materials have been created as well. This workshop will introduce participants to the new materials (in Python) and demonstrate how the subgoal labels and worked examples are integrated throughout the course. Materials include worked examples and practice problems that increase in complexity and difficulty within each topic. The materials are designed to be integrated into CS1 courses as homework or classroom examples and activities. Assessment of topics using subgoal labels will also be discussed. Participants will also engage in an activity where they create an example for their own course using subgoal labels. 
    more » « less
  4. null (Ed.)
    Subgoal labels are function-based instructional explanations that describe the problem-solving steps to the learner, highlighting the solution process. There is strong evidence that the use of subgoal labels within worked examples improves student learning in other STEM fields. Initial research shows that using subgoal labels within computer science improves student learning, but this has only been tested using a single programming concept (indefinite loops) with text-based programming languages. The proposers are currently expanding subgoal labels to the main programming concepts taught in an introductory programming course using an imperative programming language. In this BOF we seek to uncover tacit knowledge that programming instructors have in order to develop instructional materials that bridge the gap between students, who are CS novices, and instructors, who are CS experts, to improve learning for students who are under-prepared for or struggle in CS1. We will be seeking feedback on the selection of programming topics to be covered, the defined subgoals for those topics and the worked examples created for instructional purposes. 
    more » « less
  5. Nowadays, cyberattack incidents are happening on a daily basis. As a result, the demand for a larger and more challenging workforce is increasing. To handle this demand, academic institutions offer cybersecurity courses and degree programs into their curricula; however, more efforts are needed to address the high demand of the cybersecurity workforce. This work aims to bridge the gap between workforce shortage and the number of qualified graduates to fill the positions. We approach this by introducing cybersecurity concepts at the early stage of undergraduate curricula of computer science and engineering programs. Secure programming is critical as many cybersecurity incidents happen due to software vulnerabilities. However, most UG-level programming courses pay little attention to secure programming practices. As a result, many students graduate with limited knowledge of security vulnerabilities that might plague the developed software. Our goal in this work is to introduce secure programming at introductory level programming courses so that students should be aware of cybersecurity issues and use this security mindset in advanced level courses and projects in their degree programs. To accomplish this goal, we developed intuitive and interactive modules emphasizing secure programming in C++ and Java courses to help students become secure software developers. These modules will be used alongside the coursework to emphasize certain vulnerabilities within the programming environment of a specific language and allow students to learn cybersecurity topics, enforcing a solid foundation and understanding. We developed cybersecurity educational modules for C++ and Java as they are amongst the popular languages and used in introductory programming courses. While designing these modules, we kept in mind that the topics must be relevant to real-world issues in the software industry. We used a variety of resources and benchmarks to ensure the authenticity of our chosen topics, including Common Weakness Enumeration (CWE) and Common Vulnerability and Exposures (CVE). While choosing module topics to develop, we had some restrictions. For example, the topics must be introductory and easy to understand. These modules are geared towards freshman or sophomore-level UG students who have just started programming. The developed security modules have four components: power-point slides, lab description, code template for the lab, and complete solution. The complete solution for each module will be provided to the instructors to check students’ work if they adopt the modules in their courses. The modules developed for a C++ programming course include labs on input validation, integer overflow, random number generation, function call with incorrect argument type, and dangling pointers. In Java, we developed lab modules for input validation, integer overflow, null object reference, random number generator, and data encapsulation. 
    more » « less