Archive for March 9, 2018
Exploring the question of teaching recursion or iterative control structures first
Someone raised the question on the SIGCSE Members list: Which should we teach first, iteration or recursion?
I offered this response:
The research evidence suggests that one should teach iterative control structures before recursion, IF you’re going to teach both. If you are only going to teach one, recursion is easier for students. If you teach recursion first, the evidence (Kessler & Anderson, 1986; Wiedenbeck, 1989) suggests that it becomes harder to learn the iterative control structures.
The push back I got was, “Surely, we have better data than 30 year old studies?!?” Here was my reply:
I agree that it would be great to do these studies again. Given that we have an experiment and a successful replication, it could be an MS or advanced undergrad project to replicate one of those earlier experiments.
For myself, I don’t expect much difference. As you say, student brains have stayed the same. While the languages have changed, the basic iterative control structures (for, while, repeat) haven’t changed much in modern languages from what they were in C and even Pascal. Curriculum may be a factor, and that would be interesting to explore.
Two directions that I think would be great to explore in this space:
(1) The Role of Block-Based Languages: As you say, the previous research found that iterative control structures are syntactically complicated for novices. But multiple studies have found that block-based iterative structures are much easier for novices than text-based versions. What if we went recursion->block iteration->text iteration? Would that scaffold the transition to the more complicated text-based iterative control structures?
(2) The Role of High-Level Functions: I don’t know of any studies exploring high-level functions (like the ones that Kathi Fisler used to beat the Rainfall Problem, or even map/reduce/filter) in the development of understanding of recursion and iterative control structures. High-level functions have a fixed form, like for/repeat/while, but it’s a simpler, functional form. Could we teach high-level functions first, to lead into recursion or iterative control structures? Or maybe even teach recursion or iterative control structures as two different ways of implementing the high-level functions?
In general, there are too many questions to explore and too few people asking these questions with empirical data. We might rely on our teaching experience to inform our answers to these questions, but as Neil Brown showed us (see CACM Blog post this month that talks about this result), higher-education CS teachers are actually way off when it comes to estimating what students find hard.
SIGCSE-Members, please consider asking some of these questions on your campus with your students. There are well-formed questions here that could be answered in a laboratory study that could be encapsulated in a single semester. The students will get the opportunity to do empirical research with humans, which is a useful skill in many parts of computing.
Recent Comments