Using Apprenticeship and Product Based Learning to Improve Programming Outcomes in Introductory Computer Science Courses
Skip to main content
eScholarship
Open Access Publications from the University of California

UC Merced

UC Merced Electronic Theses and Dissertations bannerUC Merced

Using Apprenticeship and Product Based Learning to Improve Programming Outcomes in Introductory Computer Science Courses

Abstract

This dissertation presents the results and outcomes of an effort to design educational tools and curriculum to improve student learning in introductory programming courses. The work was conducted at the University of California, Merced (UC Merced), situated in the Central Valley of California, and home to a diverse student population. The findings of this research are applicable to courses in other universities, where instructors face similar challenges with high enrollments in courses, and students come from traditionally underserved communities, or are members of under-represented minorities.

A significant portion of the work in this dissertation was the development of educational technology to support students and instructors in Computer Science courses, as well as researchers in the field. The tools contributed include a plagiarism detection tool based on fine-grained interaction data from students using an online Integrated Development Environment, allowing instructors to observe and detect behavioral patterns consistent with plagiarism. This tool was used in a case study at UC Merced to discover unexpectedly high plagiarism rates in programming courses. In addition, we found students were spending less time than expected on their programming assignments, which is thought to limit their learning opportunities. Finally, the correlations between laboratory assignment and midterm examination grades were very weak. Many students were demonstrating high proficiency with programming during laboratory sessions, but in midterm examinations they exhibited a lack of understanding of programming concepts.

We attempted to create a curriculum and instructional methodology that would motivate students to work more on their programming assignments, providing them with more opportunities to practice and master the skill. We created a flavor of the popular Project Based Learning philosophy, that we call Product Based Learning, where students were asked to work on projects that resemble real-life software products, with Graphical User Interfaces (GUI), and a lot of room for creativity on their part. Unlike traditional lower-division programming assignments, the Product Based exercises are always graded by a human grader. We believe this additionally motivates students to put in more effort, as they know their products will be seen (and used) by other people.

To support the increased grading workload, we developed an online system to streamline the grading process for instructors, by automating as many of the mundane tasks as possible. It has the plagiarism detection tool we developed built in, allowing instructors to not only see the final state of the product, but also replay the creative process the student employed while building it.

The teaching workload also increases, as there is additional material related to GUI development that needs to be covered by instructors. We adopted an Active Learning methodology inspired by the Apprenticeship Learning Model, where the instructor demonstrates how to build the software products. Apprenticeship learning is often more successful in lower apprentice to expert ratios. Too support the process at larger scales, we created an Interactive Code Rewind tool, where the instructor encodes some of their knowledge and thought process in a version controlled Git repository, that the students can then review efficiently, and get help directly from the tool when needed.

The curriculum and teaching methods described above were deployed in the same introductory programming course at UC Merced, where incoming students had the same experience as before. We repeated the experiments from the previous case study, and found that students were spending an average of 357 minutes a week on their programming assignments, up from 89 minutes a week. We found programming behaviors indicative of plagiarism for 6% of students submissions, down from 48%. Finally, the midterm exam grades went from an average of 68% to 75%, while average laboratory assignment grades dropped from 96% to 80%, which is a better correlation between practical and formal exam grades. The three observations taken together can be interpreted as improved learning rates for students in the course.

This work reported in this dissertation lays the foundations for promising research directions that can improve student learning of computer programming, especially for underserved populations with limited resources.

Main Content
For improved accessibility of PDF content, download the file to your device.
Current View