{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,1,13]],"date-time":"2026-01-13T00:41:14Z","timestamp":1768264874274,"version":"3.49.0"},"reference-count":24,"publisher":"Association for Computing Machinery (ACM)","issue":"ICFP","license":[{"start":{"date-parts":[[2017,8,29]],"date-time":"2017-08-29T00:00:00Z","timestamp":1503964800000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2017,8,29]]},"abstract":"<jats:p>This article describes the key innovations used in the massive open online course ``Introduction to Functional Programming using OCaml'' that has run since the fall semester of 2015. A fully in-browser development environment with an integrated grader provides an exceptional level of feedback to the learners. A functional library of grading combinators greatly simplifies the notoriously complex task of writing test suites for the exercises, and provides static type-safety guarantees on the tested user code. Even the error-prone manual process of importing the course content in the learning platform has been replaced by a functional program that describes the course and statically checks its contents. A detailed statistical analysis of the data collected during and after the course assesses the effectiveness of these innovations.<\/jats:p>","DOI":"10.1145\/3110248","type":"journal-article","created":{"date-parts":[[2017,8,29]],"date-time":"2017-08-29T18:19:41Z","timestamp":1504030781000},"page":"1-25","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":12,"title":["Scaling up functional programming education: under the hood of the OCaml MOOC"],"prefix":"10.1145","volume":"1","author":[{"given":"Benjamin","family":"Canou","sequence":"first","affiliation":[{"name":"OCamlPro, France"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Roberto","family":"Di Cosmo","sequence":"additional","affiliation":[{"name":"Inria, France \/ University of Paris Diderot, France"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Gr\u00e9goire","family":"Henry","sequence":"additional","affiliation":[{"name":"OCamlPro, France"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2017,8,29]]},"reference":[{"key":"e_1_2_1_1_1","doi-asserted-by":"publisher","DOI":"10.1145\/2691352"},{"key":"e_1_2_1_2_1","doi-asserted-by":"publisher","DOI":"10.1145\/2491956"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/351240.351266"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/1538788.1538804"},{"key":"e_1_2_1_6_1","volume-title":"Introduction to functional programming using the OCaml programming language. https:\/\/www.fun-mooc.fr\/courses\/parisdiderot\/56002\/session01\/about . (October","author":"Cosmo Roberto Di","year":"2015"},{"key":"e_1_2_1_7_1","volume-title":"Matthew Flatt, Shriram Krishnamurthi, Eli Barzilay, Jay A. McCarthy, and Sam Tobin-Hochstadt.","author":"Felleisen Matthias","year":"2015"},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/2843043.2843070"},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/2398856.2364569"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/367415.367422"},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.1145\/2691352.2691355"},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1080\/08993400600912426"},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.15388\/infedu.2005.04"},{"key":"e_1_2_1_14_1","doi-asserted-by":"publisher","DOI":"10.1145\/2591062.2591161"},{"key":"e_1_2_1_15_1","doi-asserted-by":"publisher","DOI":"10.1016\/0022-0000(78)90014-4"},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1109\/MIC.2011.2"},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/351240"},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/2493394.2493401"},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/2591708.2591759"},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/2445196.2445370"},{"key":"e_1_2_1_21_1","unstructured":"Christian Queinnec. 2010. Invited Talk : On Automated Grading. In Journ\u00e9es francophones des langages applicatifs (JFLA). http:\/\/www.paracamplus.com\/ .  Christian Queinnec. 2010. Invited Talk : On Automated Grading. In Journ\u00e9es francophones des langages applicatifs (JFLA). http:\/\/www.paracamplus.com\/ ."},{"key":"e_1_2_1_22_1","volume-title":"Proceedings of the 16th Annual SIGCSE Conference on Innovation and Technology in Computer Science Education, ITiCSE 2011","author":"R\u00f6\u00dfling Guido","year":"2011"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/2462156.2462195"},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1002\/spe.2187"},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/1999747.1999795"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3110248","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3110248","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T03:30:10Z","timestamp":1750217410000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3110248"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2017,8,29]]},"references-count":24,"journal-issue":{"issue":"ICFP","published-print":{"date-parts":[[2017,8,29]]}},"alternative-id":["10.1145\/3110248"],"URL":"https:\/\/doi.org\/10.1145\/3110248","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2017,8,29]]},"assertion":[{"value":"2017-08-29","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}