Table of Links
2 Course Structure and Conditions
4 Practical Part
4.2 Technical Setup and Automated Assessment
4.3 Selected Exercises and Tools
8 Conclusion, Acknowledgements, and References
7 Related Work
The literature on student engagement in higher-education is vast, and we are not in the position to give a thorough account of it. Some general accounts of and suggestions for student engagement can be found in [5, 40] while work specifically focusing on online courses can be found in [10, 23, 26, 30, 38]. Many of the mechanisms described there were employed in our course. As such, our work can be seen as a case study, testing the hypotheses framed in these works.
Much work has been spent on the automated assessment of programming exercises. A recent overview can be found in [29]. We do not to provide another such software package but describe how various existing solutions can be put together to address the challenges laid out in Section 1.
To the best of our knowledge, there are only few papers about converting physical computer science classes to virtual ones and none that deal with all the challenges outlined by us. Two experience reports using imperative languages can be found in [24, 35]. While they use a project-based learning approach, that is students work in teams on graded projects, our students had to submit their homework individually. We fostered social interaction and team-based learning in the context of the tutorials, workshops, and programming contests instead. We believe that this strikes a good balance between individual work and team work.
There are several studies and experience reports that corroborate some of our findings, for example
• increasing engagement using live programming [6, 33, 31], pair-programming [8, 19], and gamification [2, 3, 37],
• letting students ask questions during the lecture via chat [13],
• using automated grading for prompt feedback [3, 15, 37], and
• introducing I/O early (without explaining monads) [6, 16, 17] and establishing connections to industry by organising events [17] to demonstrate “real-world” applicability.
Various articles have been published about specific tools to teach functional programming, such as I/O testing [39] and visualisation of program evaluation [14]. While our work contributes to this realm, it also describes more general strategies to run engaging (functional) programming courses.
Finally, [4] introduces a previous iteration of our course, focusing on the lecture material, specific exercises, and a custom-made testing infrastructure. Our objective, instead, is to provide strategies and resources to address the challenges laid out in Section 1, i.e. the drastic increase in student enrolments, the challenges of online teaching, and the difficulty of demonstrating the practicality of functional programming.
Authors:
(1) Kevin Kappelmann, Department of Informatics, Technical University of Munich, Germany ([email protected]);
(2) Jonas Radle, Department of Informatics, Technical University of Munich, Germany ([email protected]);
(3) Lukas Stevens, Department of Informatics, Technical University of Munich, Germany ([email protected]).
This paper is