Abstract
Our department has long been an advocate of the functional-first school of programming and has been teaching Haskell as a first language in introductory programming course units for 20 years. Although the functional style is largely beneficial, it needs to be taught in an enthusiastic and captivating way to fight the unusually high computer science drop-out rates and appeal to a heterogeneous population of students.
This paper reports our experience of restructuring, over the last 5 years, an introductory laboratory course unit that trains hands-on functional programming concepts and good software development practices. We have been using game programming to keep students motivated, and following a methodology that hinges on test-driven development and continuous bidirectional feedback.
We summarise successes and missteps, and how we have learned from our experience to arrive at a model for comprehensive and interactive functional game programming assignments and a general functionally-powered automated assessment platform, that together provide a more engaging learning experience for students. In our experience, we have been able to teach increasingly more advanced functional programming concepts while improving student engagement.
Supplemental Material
- Peter Achten. 2008. Teaching functional programming with soccer-fun. In Proceedings of the 2008 international workshop on Functional and declarative programming in education, [email protected] 2008, Victoria, BC, Canada, September 20 - 28, 2008. ACM, 61–72. Google Scholar
Digital Library
- Alex Aiken. 1994. Moss: A System for Detecting Software Similarity. http://theory.stanford.edu/~aiken/moss/ . (1994). Accessed: 2018-03-14.Google Scholar
- Tiffany Barnes, Eve Powell, Amanda Chaffin, and Heather Richter Lipford. 2008. Game2Learn: improving the motivation of CS1 students. In Proceedings of the 3rd International Conference on Game Development in Computer Science Education, GDCSE 2008, Miami, FL, USA, February 28 - March 3, 2008. ACM, 1–5. Google Scholar
Digital Library
- Jessica D. Bayliss and Sean Strout. 2006. Games as a "flavor" of CS1. In Proceedings of the 39th SIGCSE Technical Symposium on Computer Science Education, SIGCSE 2006, Houston, Texas, USA, March 3-5, 2006. ACM, 500–504.Google Scholar
- Susan Bergin and Ronan Reilly. 2005. The influence of motivation and comfort-level on learning to program. In Proceedings of the 26th Annual WorkShop of the Psychology of Programming Interest Group, Vol. 17. PPIG, 293–304.Google Scholar
- Joachim Breitner and Chris Smith. 2017. Lock-step simulation is child’s play (experience report). PACMPL 1, ICFP (2017), 3:1–3:15. Google Scholar
Digital Library
- Manuel M. T. Chakravarty and Gabriele Keller. 2004. The risks and benefits of teaching purely functional programming in first year. J. Funct. Program. 14, 1 (2004), 113–123. Google Scholar
Digital Library
- Carl Chang, Peter J. Denning, James H. Cross II, Gerald Engel, Robert Sloan, Doris Carver, Richard Eckhouse, Willis King, Francis Lau, Susan Mengel, Pradip Srimani, Eric Roberts, Russell Shackelford, Richard Austing, C. Fay Cover, Gordon Davies, Andrew McGettrick, G. Michael Schneider, and Ursula Wolz. 2001. CC2001: Computing Curricula 2001 Computer Science. Technical Report. IEEE & ACM.Google Scholar
- Yufeng Cheng, Meng Wang, Yingfei Xiong, Dan Hao, and Lu Zhang. 2016. Empirical Evaluation of Test Coverage for Functional Programs. In 2016 IEEE International Conference on Software Testing, Verification and Validation, ICST 2016, Chicago, IL, USA, April 11-15, 2016. IEEE Computer Society, 255–265.Google Scholar
- Antony Courtney, Henrik Nilsson, and John Peterson. 2003. The Yampa arcade. In Proceedings of the ACM SIGPLAN Workshop on Haskell, Haskell 2003, Uppsala, Sweden, August 28, 2003. ACM, 7–18. Google Scholar
Digital Library
- Marcus Crestani and Michael Sperber. 2010. Experience report: growing programming languages for beginning students. In Proceeding of the 15th ACM SIGPLAN international conference on Functional programming, ICFP 2010, Baltimore, Maryland, USA, September 27-29, 2010. ACM, 229–234. Google Scholar
Digital Library
- Stephen H. Edwards. 2003a. Improving student performance by evaluating how well students test their own programs. ACM Journal of Educational Resources in Computing 3, 3 (2003), 1:1–1:24. Google Scholar
Digital Library
- Stephen H. Edwards. 2003b. Rethinking computer science education from a test-first perspective. In Companion of the 18th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA 2003, October 26-30, 2003, Anaheim, CA, USA. ACM, 148–155. Google Scholar
Digital Library
- Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurthi. 2009. A functional I/O system or, fun for freshman kids. In Proceeding of the 14th ACM SIGPLAN international conference on Functional programming, ICFP 2009, Edinburgh, Scotland, UK, August 31 - September 2, 2009. ACM, 47–58. Google Scholar
Digital Library
- Patricia Haden. 2006. The incredible rainbow spitting chicken: teaching traditional programming skills through games programming. In Proceedings of the 8th Australasian Conference on Computing Education-Volume 52. Australian Computer Society, Inc., 81–89. Google Scholar
Digital Library
- HaskellWiki. 2018. Haskell as a First Language. https://wiki.haskell.org/Haskell_in_education#Haskell_as_a_first_language . (2018). Accessed: 2018-03-12.Google Scholar
- Petri Ihantola, Tuukka Ahoniemi, Ville Karavirta, and Otto Seppälä. 2010. Review of recent systems for automatic assessment of programming assignments. In 10th Koli Calling International Conference on Computing Education Research, Koli Calling ’10, Koli, Finland, October 28-31, 2010. ACM, 86–93. Google Scholar
Digital Library
- John Impagliazzo, Susan Conry, Joseph L.A. Hughes, Liu Weidong, Lu Junlin, Andrew McGettrick, Victor Nelson, Eric Durant, Herman Lam, Robert Reese, and Lorraine Herger. 2016. CE2016: Computer Engineering Curricula 2016. Technical Report. ACM & IEEE.Google Scholar
- Alexandru Iosup and Dick H. J. Epema. 2014. An experience report on using gamification in technical higher education. In The 45th ACM Technical Symposium on Computer Science Education, SIGCSE ’14, Atlanta, GA, USA - March 05 - 08, 2014. ACM, 27–32. Google Scholar
Digital Library
- Duc Le, Mohammad Amin Alipour, Rahul Gopinath, and Alex Groce. 2014. MuCheck: an extensible tool for mutation testing of haskell programs. In International Symposium on Software Testing and Analysis, ISSTA ’14, San Jose, CA, USA - July 21 -26, 2014. ACM, 429–432. Google Scholar
Digital Library
- José Paulo Leal and Fernando M. A. Silva. 2003. Mooshak: a Web-based multi-site programming contest system. Softw., Pract. Exper. 33, 6 (2003), 567–581. Google Scholar
Digital Library
- Frederick W. B. Li and Christopher Watson. 2011. Game-based concept visualization for learning programming. In Proceedings of the 3rd international ACM workshop on Multimedia technologies for distance learning. ACM, 37–42. Google Scholar
Digital Library
- Ben Lippmeier. 2010. Gloss: Painless 2D vector graphics, animations and simulations. http://gloss.ouroborus.net . (2010). Accessed: 2017-02-18.Google Scholar
- Christoph Lüth. 2003. Haskell in Space. J. Funct. Program. 13, 6 (2003), 1077–1085.Google Scholar
Digital Library
- Marco T. Morazán. 2010. Functional Video Games in the CS1 Classroom. In Trends in Functional Programming - 11th International Symposium, TFP 2010, Norman, OK, USA, May 17-19, 2010. Revised Selected Papers (LNCS), Vol. 6546. Springer, 166–183.Google Scholar
- Nachiappan Nagappan, Laurie A. Williams, Miriam Ferzli, Eric Wiebe, Kai Yang, Carol Miller, and Suzanne Balik. 2003. Improving the CS1 experience with pair programming. (2003), 359–362.Google Scholar
- Ilias O. Pappas, Michail N. Giannakos, and Letizia Jaccheri. 2016. Investigating Factors Influencing Students’ Intention to Dropout Computer Science Studies. In Proceedings of the 2016 ACM Conference on Innovation and Technology in Computer Science Education, ITiCSE 2016, Arequipa, Peru, July 9-13, 2016. ACM, 198–203. Google Scholar
Digital Library
- Arnold Pears, Stephen Seidman, Lauri Malmi, Linda Mannila, Elizabeth S. Adams, Jens Bennedsen, Marie Devlin, and James Paterson. 2007. A survey of literature on the teaching of introductory programming. SIGCSE Bulletin 39, 4 (2007), 204–223. Google Scholar
Digital Library
- Kris Powers, Stacey Ecott, and Leanne M. Hirshfield. 2007. Through the looking glass: teaching CS0 with Alice. In Proceedings of the 38th SIGCSE Technical Symposium on Computer Science Education, SIGCSE 2007, Covington, Kentucky, USA, March 7-11, 2007. ACM, 213–217. Google Scholar
Digital Library
- Ilya Sergey. 2016. Experience report: growing and shrinking polygons for random testing of computational geometry algorithms. In Proceedings of the 21st ACM SIGPLAN International Conference on Functional Programming, ICFP 2016, Nara, Japan, September 18-22, 2016. ACM, 193–199. Google Scholar
Digital Library
- Kelvin Sung, Michael Panitz, Scott A. Wallace, Ruth Anderson, and John Nordlinger. 2008. Game-themed programming assignments: the faculty perspective. (2008), 300–304. Google Scholar
Digital Library
- David Terei, Simon Marlow, Simon L. Peyton Jones, and David Mazières. 2012. Safe Haskell. In Proceedings of the 5th ACM SIGPLAN Symposium on Haskell, Haskell 2012, Copenhagen, Denmark, 13 September 2012. ACM, 137–148. Google Scholar
Digital Library
- Ville Tirronen, Samuel Uusi-Mäkelä, and Ville Isomöttönen. 2015. Understanding beginners’ mistakes with Haskell. J. Funct. Program. 25 (2015).Google Scholar
- Arto Vihavainen, Matti Paksula, and Matti Luukkainen. 2011. Extreme apprenticeship method in teaching programming for beginners. In Proceedings of the 42nd ACM technical symposium on Computer science education, SIGCSE 2011, Dallas, TX, USA, March 9-12, 2011. ACM, 93–98. Google Scholar
Digital Library
- Arto Vihavainen, Thomas Vikberg, Matti Luukkainen, and Martin Pärtel. 2013. Scaffolding students’ learning using test my code. In Innovation and Technology in Computer Science Education conference 2013, ITiCSE ’13, Canterbury, United Kingdom - July 01 - 03, 2013. ACM, 117–122. Google Scholar
Digital Library
Index Terms
Teaching how to program using automated assessment and functional glossy games (experience report)
Recommendations
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 ...
Virtual Summer Camp for High School Students with Disabilities - An Experience Report
SIGCSE 2023: Proceedings of the 54th ACM Technical Symposium on Computer Science Education V. 1In the past years, the authors held computer programming and machine learning summer camp for high-school students with disabilities. Due to the pandemic, the summer camp was offered virtually in 2020 and 2021. This paper reports our experience of ...
Teachers' Experiences of using PRIMM to Teach Programming in School
SIGCSE '19: Proceedings of the 50th ACM Technical Symposium on Computer Science EducationPRIMM is an approach to teaching programming at K-12 that facilitates the structure of lessons in a purposeful way. PRIMM stands for Predict-Run-Investigate-Modify-Make, and draws on recent research in programming education. In particular the PRIMM ...






Comments