一句话:扩展 Learn-OCaml 自动评分,使其评价测试质量与代码风格,并分享函数式编程教学经验。
在线编程平台无需安装即可编程,自动评分还能即时反馈,但其评分器往往只检查输入输出正确性,忽略代码的其他方面,使学生错失大量有价值的反馈。作者在二年级「编程语言与范式」课程中使用 Learn-OCaml 平台教授函数式编程,并利用其自动评分基础设施加以扩展,使教师能方便地编写更具表达力的评分器,除正确性外还评价学生的测试质量与代码风格,从而有效传授函数式编程风格要素。文中报告了课程教学经验,描述了平台扩展的设计与使用,并提供一套自编作业题及配套评分器,希望推动函数式编程教育、改善学习体验,让类型化函数式编程的教学对师生都更易上手。
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.
@article{paperbot602,
title = {Teaching the art of functional programming using automated grading (experience report)},
author = {Aliya Hameer and Brigitte Pientka},
journal = {Proceedings of the ACM on Programming Languages},
volume = {3},
number = {ICFP},
year = {2019},
doi = {10.1145/3341719}
}