Abstraction is one of the most fundamental ideas in computer science (CS), and as such, according to Bruner, it should be taught spirally, starting as early as possible and revisited on every level of education. However, teaching this idea is a challenging task,...
as has been emphasized by many CS and mathematics education experts. Teaching it to young children is even more challenging. This research examined the teaching and learning of CS abstraction to middle-school students, as part of an introductory CS course. It relied on a general framework for teaching CS abstraction to novices, which I incorporated into this introductory course, and studied its effects. To this end, I developed an operational definition of CS abstraction, which I used to measure abstraction abilities. The findings indicate that the new teaching strategy significantly improved students' CS abstraction skills. Specifically, it affected students' tendency to use algorithms and acknowledge an algorithm as a legitimate solution, their tendency to use black-box arguments and initializations, their ability to distinguish between levels of abstraction and to move freely between them, as well as recognize the right level to work at. It also had a positive influence on the students' perception of the nature of CS, the volume and quality of their documentation, and their overall performance in the course. In addition, I compared the CS abstraction abilities of boys and girls taking the introductory CS course and examined the difference in the effects of the teaching strategy on CS abstraction abilities of boys and girls, respectively. The findings show a significant advantage of girls over boys regarding several aspects of CS abstraction. I also found that the framework for teaching CS abstraction had an enhanced effect in this context when it comes to girls. This enhancement was manifested by a better perception of the nature of CS and a better overall performance.