Investigating the Use of Productive Failure as a Design Paradigm for Learning Introductory Python Programming
Productive Failure (PF) is a learning approach where students initially tackle novel problems targeting concepts they have not yet learned, followed by a consolidation phase where these concepts are taught. Recent application in other discipline areas and theoretical work in computing education suggests that PF can help learners develop more robust conceptual knowledge. However, empirical validation of PF within the programming education domain remains under-explored. In this paper, we investigate the use of PF to teach Python lists and dictionaries to undergraduate students with limited prior programming experience. We designed a novel PF-based learning activity that incorporated the unobtrusive collection of real-time heart-rate data from consumer-grade wearable sensors. This sensor data was used both to make learning engaging and to understand learning processes by inferring cognitive load. We evaluated our approach with 20 participants, half of whom were taught Python concepts using direct instruction, and the other half with PF. We found that although there was no difference in initial learning outcomes between the groups, students who followed the PF approach showed better knowledge retention and performance on delayed but similar tasks. In addition, physiological measurements indicated that these students also exhibited a larger decrease in cognitive load during their tasks after instruction. Our findings suggest that PF-based approaches may lead to more robust and sustained learning, and that future work should look to design similar activities for a range of concepts and scale this approach to a larger number of learners.