A critique of Abelson and Sussman or why calculating is better than scheming
ACM SIGPLAN Notices
QuickCheck: a lightweight tool for random testing of Haskell programs
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
Structure and Interpretation of Computer Programs
Structure and Interpretation of Computer Programs
Seven Deadly Sins of Introductory Programming Language Design
SEEP '96 Proceedings of the 1996 International Conference on Software Engineering: Education and Practice (SE:EP '96)
Haskell '03 Proceedings of the 2003 ACM SIGPLAN workshop on Haskell
DrScheme: a programming environment for Scheme
Journal of Functional Programming
Proceedings of the 36th SIGCSE technical symposium on Computer science education
Htdp and dmda in the battlefield: a case study in first-year programming instruction
Proceedings of the 2008 international workshop on Functional and declarative programming in education
Mind your language: on novices' interactions with error messages
Proceedings of the 10th SIGPLAN symposium on New ideas, new paradigms, and reflections on programming and software
ESOP'13 Proceedings of the 22nd European conference on Programming Languages and Systems
Hi-index | 0.01 |
A student learning how to program learns best when the programming language and programming environment cater to her specific needs. These needs are different from the requirements of a professional programmer. Consequently, the design of teaching languages poses challenges different from the design of professional languages. Using a functional language by itself gives advantages over more popular, professional languages, but fully exploiting these advantages requires careful adaptation to the needs of the students' as-is, these languages do not support the students nearly as well as they could. This paper describes our experience adopting the didactic approach of How to Design Programs, focussing on the design process for our own set of teaching languages. We have observed students as they try to program as part of our introductory course, and used these observations to significantly improve the design of these languages. This paper describes the changes we have made, and the journey we took to get there.