From Principles to Practice with Class in the First Year

We propose a bridge between functional and object-oriented programming in the first-year curriculum. Traditionally, curricula that begin with functional programming transition to a professional, usually object-oriented, language in the second course. This transition poses obstacles for students, and often results in confusing the details of development environments, syntax, and libraries with the fundamentals of OO programming that the course should focus on. Instead, we propose to begin the second course with a sequence of custom teaching languages which minimize the transition from the first course, and allow students to focus on core ideas. After working through the sequence of pedagogical languages, we then transition to Java, at which point students have a strong command of the basic principles. We have 3 years of experience with this course, with notable success.

[1]  Robert Cartwright,et al.  DrJava: a lightweight pedagogic environment for Java , 2002, SIGCSE '02.

[2]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .

[3]  Carl Alphonce,et al.  Using graphics to support the teaching of fundamental object-oriented principles in CS1 , 2003, OOPSLA '03.

[4]  MANUEL M. T. CHAKRAVARTY,et al.  The risks and benefits of teaching purely functional programming in first year , 2004, Journal of Functional Programming.

[5]  Viera K. Proulx,et al.  Design of class hierarchies: an introduction to OO program design , 2006, SIGCSE '06.

[6]  Matthew Flatt,et al.  ProfessorJ: a gradual introduction to Java through language levels , 2003, OOPSLA '03.

[7]  Michael Kölling,et al.  The BlueJ System and its Pedagogy , 2003, Comput. Sci. Educ..

[8]  Matthias Felleisen,et al.  The structure and interpretation of the computer science curriculum , 2004, J. Funct. Program..

[9]  Matthias Felleisen,et al.  DrScheme: a programming environment for Scheme , 2002, J. Funct. Program..

[10]  Matthias Felleisen,et al.  A functional I/O system or, fun for freshman kids , 2009, ICFP.

[11]  Kim B. Bruce,et al.  A library to support a graphics-based object-first approach to CS 1 , 2001, SIGCSE '01.

[12]  Prabhakar Ragde,et al.  The chilling descent: making the transition to a conventional curriculum , 2008, FDPE '08.

[13]  Matthias Felleisen,et al.  How to design programs: an introduction to programming and computing , 2001 .

[14]  Stephen A. Bloch,et al.  Scheme and Java in the first year , 2000 .

[15]  Gerald J. Sussman,et al.  Structure and interpretation of computer programs , 1985, Proceedings of the IEEE.

[16]  Panagiotis Manolios,et al.  Computer-Aided Reasoning: An Approach , 2011 .

[17]  Robert Cartwright,et al.  Taming Java for the classroom , 2005, SIGCSE '05.