The topic of 2021’s special issue is The Role(s) of Abstraction in CS Education. Abstraction is a pillar of computational thinking and plays a key role in many CS related areas. In computational thinking abstraction is used to understand a problem, manage its complexity and select an appropriate level of detail and degree of generality when solving it. Procedural and data abstractions allow algorithms to be used without knowledge of their details. Besides, the ability to abstract facilitates generalization and knowledge transfer.
Abstraction has been considered, either implicitly or explicitly, in the literature that covers top-down design of programs, system modelling and problem solving. However, teaching students to abstract when reading, designing or implementing code remains a challenge at both k-12 and tertiary level. Hence, our goal when proposing this special issue was to provide a range of papers that could help instructors to understand abstraction in more depth and to find approaches or insights on how to foster abstraction in the classroom. We have achieved that goal by collating eight papers that describe the multiple roles of abstraction in CS education.
Three papers focus on programming skills, as teaching them is a core and challenging task for educators. Fowler et al. explore the abstraction skills needed to reason analytically about source code. Haglund, Strömbäck and Mannila focus on the challenges posed to students by functional abstraction, while Sbaraglia, Lodi and Martini discuss the abstraction mechanisms of programming languages and the rollercoaster of abstraction that students face at introductory level.
Four papers present different perspectives of abstraction in specific CS fields. Dorodchi et al. discuss abstraction in modelling and its role in teaching software engineering; Strömbäck, Mannila and Kamkar investigate how students abstract the behaviour of concurrent programs; Ginat illustrates the use of abstraction to solve algorithmic tasks, and Vaníček, Šimandl and Klofáč identify computational tasks from the Bebras Challenge that would help to develop abstract thinking. Finally, Mirolo et al. provide an overview of abstraction in CS education literature that binds the different perspectives within computer science and computational thinking.
We are thankful to the authors of this special issue for sharing their perspectives and their experiences on the use of abstraction in their fields.