Computer science (CS) students are expected to grasp numerous CS concepts during their CS education. Researchers have previously pointed to some concepts that are challenging for many students to conquer during their education. In this study, we investigate how CS students encounter indirection, scope, references, and parameter transfer during their studies. We focus on the first three study years, as previous studies have indicated that students do not significantly improve their grasp of these concepts during that time. We surveyed the teachers of courses in three CS study programs, exploring teachers’ perspectives on students’ knowledge of the concepts and how explicitly the concepts are taught and graded. Our investigation highlights several ways in which curricula diverge from previous recommendations and how an understanding of these study programs can support learning outcomes.
Controlling complexity through the use of abstractions is a critical part of problem solving in programming. Thus, becoming proficient with procedural and data abstraction through the use of user-defined functions is important. Properly using functions for abstraction involves a number of other core concepts, such as parameter passing, scope and references, which are known to be difficult. Therefore, this paper aims to study students’ proficiency with these core concepts, and students’ ability to apply procedural and data abstraction to solve problems. We collected data from two years of an introductory Python course, both from a questionnaire and from two lab assignments. The data shows that students had difficulties with the core concepts, and a number of issues solving problems with abstraction. We also investigate the impact of using a visualization tool when teaching the core concepts.