Teaching the art of functional programming using automated grading (experience report)

Online programming platforms have immense potential to improve students' educational experience. They make programming more accessible, as no installation is required; and automatic grading facilities provide students with immediate feedback on their code, allowing them to to fix bugs and address errors in their understanding right away. However, these graders tend to focus heavily on the functional correctness of a solution, neglecting other aspects of students' code and thereby causing students to miss out on a significant amount of valuable feedback. In this paper, we recount our experience in using the Learn-OCaml online programming platform to teach functional programming in a second-year university course on programming languages and paradigms. Moreover, we explore how to leverage Learn-OCaml's automated grading infrastructure to make it easy to write more expressive graders that give students feedback on properties of their code beyond simple input/output correctness, in order to effectively teach elements of functional programming style. In particular, we describe our extensions to the Learn-OCaml platform that evaluate students on test quality and code style. By providing these tools and a suite of our own homework problems and associated graders, we aim to promote functional programming education, enhance students' educational experience, and make teaching and learning typed functional programming more accessible to instructors and students alike, in our community and beyond.

[1]  Jack Hollingsworth,et al.  Automatic graders for programming classes , 1960, Commun. ACM.

[2]  Kenichi Asai,et al.  Implementing a stepper using delimited continuations , 2016, SCSS.

[3]  Ankush Das,et al.  Towards automatic resource bound analysis for OCaml , 2016, POPL.

[4]  Susan Mengel,et al.  An Empirical Study of Iterative Improvement in Programming Assignments , 2015, SIGCSE.

[5]  Chris Wilcox,et al.  The Role of Automation in Undergraduate Computer Science Education , 2015, SIGCSE.

[6]  Irena Koprinska,et al.  Mining autograding data in computer science education , 2016, ACSW.

[7]  Christopher D. Clack,et al.  Programming With Standard Ml , 1993 .

[8]  Martin Hofmann,et al.  Resource Aware ML , 2012, CAV.

[9]  Richard J. Lipton,et al.  Hints on Test Data Selection: Help for the Practicing Programmer , 1978, Computer.

[10]  Steve Benford,et al.  The Ceilidh system for the automatic grading of students on programming courses , 1995, ACM-SE 33.

[11]  Stephen H. Edwards,et al.  Web-CAT: automatically grading programming assignments , 2008, ITiCSE.

[12]  Fred Martin,et al.  Impact of auto-grading on an introductory computing course , 2013 .

[13]  David Jackson,et al.  Grading student programs using ASSYST , 1997, SIGCSE '97.

[14]  Greg J. Michaelson,et al.  Automatic analysis of functional program style , 1996, Proceedings of 1996 Australian Software Engineering Conference.

[15]  Konstantinos Sagonas,et al.  Automatic refactoring of Erlang programs , 2009, PPDP '09.

[16]  Jonathan Aldrich,et al.  Hazelnut: a bidirectionally typed structure editor calculus , 2016, POPL.

[17]  Roberto Di Cosmo,et al.  Scaling up functional programming education: under the hood of the OCaml MOOC , 2017, Proc. ACM Program. Lang..

[18]  Nathan Griffiths,et al.  The boss online submission and assessment system , 2005, JERC.

[19]  Kirsti Ala-Mutka,et al.  A Survey of Automated Assessment Approaches for Programming Assignments , 2005, Comput. Sci. Educ..

[20]  Johan Jeuring,et al.  Ask-Elle: an Adaptable Programming Tutor for Haskell Giving Automated Feedback , 2017, International Journal of Artificial Intelligence in Education.

[21]  Peter M. Chen An automated feedback system for computer organization projects , 2004, IEEE Transactions on Education.

[22]  Mark Harman,et al.  An Analysis and Survey of the Development of Mutation Testing , 2011, IEEE Transactions on Software Engineering.

[23]  Benjamin Canou,et al.  Learn OCaml, An Online Learning Center for OCaml , 2016 .

[24]  Stephen H. EDWARDS Using Test-Driven Development in the Classroom : Providing Students with Automatic , Concrete Feedback on Performance , 2003 .