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]).
Table of Links
1 Introduction
2 Course Structure and Conditions
2.1 Conditions
2.2 Syllabus
3 Lectures
4 Practical Part
4.1 Engagement Mechanisms
4.2 Technical Setup and Automated Assessment
4.3 Selected Exercises and Tools
5 Check Your Proof by Example
6 Exams
7 Related Work
8 Conclusion, Acknowledgements, and References
Worldwide, computer science departments have experienced a dramatic increase in the number of student enrolments. Moreover, the ongoing COVID-19 pandemic requires institutions to radically replace the traditional way of on-site teaching, moving interaction from physical to virtual space. We report on our strategies and experience tackling these issues as part of a Haskell-based functional programming and verification course, accommodating over 2000 students in the course of two semesters. Among other things, we fostered engagement with weekly programming competitions and creative homework projects, workshops with industry partners, and collaborative pair-programming tutorials. To offer such an extensive programme to hundreds of students, we automated feedback for programming as well as inductive proof exercises. We explain and share our tools and exercises so that they can be reused by other educators.
1 Introduction
This paper reports on strategies and tools employed to run two iterations of a large-scale functional programming and verification course at the Technical University of Munich (TUM). While the first iteration (winter semester 2019, 1057 participants) took place on campus, the second iteration (winter semester 2020, 1031 participants) was affected by the COVID-19 pandemic and took place in virtual space. Previous iterations of the course were introduced in [4]; however, we were facing two novel challenges:
Soaring Enrolments The relatively young field of computer science has become one of the largest study programmes around the globe. The increase of student enrolments is dramatic [27, 25] while employment of new teaching staff often lags behind. At TUM, the number of new enrolments in computer science more than doubled between 2013 and 2021 from 1110 to 2644 (an increase of 138%) while academic staff only increased from 439 to 573 (31%) [1].
This drastic increase not only requires more physical resources – like larger lecture halls and more library spaces – but also academic staff for supervision. Given the discrepancy in growth between student enrolments and staff employment, automation of supervision and feedback mechanisms is inevitable. Automation, however, should not negatively affect the quality of the teaching.
Online Teaching The ongoing COVID-19 pandemic forced a radical transition from on-site teaching to online classes. Lecturers had to rethink the way they present material and interact with students, teaching assistants the way they assist students in tutorial sessions. Students, on the other hand, suffer from a lack of social interaction and communication, leading to higher levels of stress, anxiety, loneliness, symptoms of depression, and diminished affective engagement [12, 38].
In our experience, the disconnect between students and lecturers as well as the lack of on campus interaction between students may also lead to cramming: the practice of showing little participation during the semester while studying extensively just before the exam. Cramming tends to result in poor long-term retention and shallow understanding of material. Indeed, the benefit of spacing learning events apart rather than cramming has been demonstrated in hundreds of experiments [11, 20].
Besides these general challenges, there is a third – subject-specific – challenge we were keen to tackle:
Functional Programming is Practical Feedback by students and personal experience has shown us that many students at TUM question the applicability and usefulness of functional languages beyond academia. They are disappointed by a lack of industrial insight and real world – or at least interactive – applications. Indeed, some even perceive functional programming as an obstacle; after all, they already know how to program imperatively.
Good educators do not just teach but inspire: we have to bring the benefits of functional languages closer to our students’ hearts by showing real-world applicability and making functional programming fun and engaging.
Contributions In this paper, we present our answers to these challenges and provide tools and exercises for other educators. Our contributions are 1) a description of technical tools that enable large-scale (functional) programming courses in physical and virtual space, 2) a toolbox of engagement mechanisms for programming courses and an evaluation thereof, and 3) reusable exercises and tools for other functional programming educators. Our resources can be found in the central repository of this paper.[1]
Outline We begin by describing the underlying conditions of our course and its syllabus in Section 2. The tools and teaching methods employed during lectures are explained in Section 3. Section 4 describes the mechanisms, tools, and technical setup we used to create an engaging experience that is scalable for the practical part of the course. It also includes a framework for I/O testing in Haskell that solves a transparency issue prevalent in traditional approaches. Section 5 introduces “Check Your Proof” – a tool created by our lab to automatically check simple inductive proofs for Haskell programs. Section 6 describes how we adapted our exams to the COVID-19 situation and large number of participants. Finally, Section 7 outlines related work and Section 8 concludes with a summary and aspects to improve.
[1] https://github.com/kappelmann/engaging-large-scale-functional-programming/