A survey of literature on the teaching of introductory programming

Three decades of active research on the teaching of introductory programming has had limited effect on classroom practice. Although relevant research exists across several disciplines including education and cognitive science, disciplinary differences have made this material inaccessible to many computing educators. Furthermore, computer science instructors have not had access to a comprehensive survey of research in this area. This paper collects and classifies this literature, identifies important work and mediates it to computing educators and professional bodies. We identify research that gives well-supported advice to computing academics teaching introductory programming. Limitations and areas of incomplete coverage of existing research efforts are also identified. The analysis applies publication and research quality metrics developed by a previous ITiCSE working group [74].

[1]  Stephen H. Edwards,et al.  Improving student performance by evaluating how well students test their own programs , 2003, JERC.

[2]  Thomas Green Instructions and descriptions: some cognitive aspects of programming and similar activities , 2000, AVI '00.

[3]  Anthony Ralston,et al.  Fortran and the first course in computer science , 1971, SGCS.

[4]  K. Trigwell,et al.  Relations between teachers' approaches to teaching and students' approaches to learning , 1999 .

[5]  Susan S. Brilliant,et al.  The first programming paradigm and language dilemma , 1996, SIGCSE '96.

[6]  Karina Valdivia Delgado,et al.  A tool for programming learning with pedagogical patterns , 2005, eclipse '05.

[7]  Lauri Malmi,et al.  Constructing a core literature for computing education research , 2005, SGCS.

[8]  Lauri Malmi,et al.  Visual Algorithm Simulation Exercise System with Automatic Assessment: TRAKLA2 , 2004, Informatics Educ..

[9]  C. A. R. Hoare,et al.  An axiomatic basis for computer programming , 1969, CACM.

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

[11]  Richard E. Pattis,et al.  Karel ++ A Gentle Introduction to the Art of Object-Oriented Programming , 1996 .

[12]  Marja Kuittinen,et al.  Teaching roles of variables in elementary programming courses , 2004, ITiCSE '04.

[13]  Peter J. Denning A debate on teaching computing science , 1989, CACM.

[14]  Christopher D. Hundhausen,et al.  SALSA and ALVIS: a language and system for constructing and presenting low fidelity algorithm visualizations , 2000, Proceeding 2000 IEEE International Symposium on Visual Languages.

[15]  Edsger W. Dijkstra,et al.  Letters to the editor: go to statement considered harmful , 1968, CACM.

[16]  Elaine Martin,et al.  What university teachers teach and how they teach it , 2000 .

[17]  K. Trigwell,et al.  Development and Use of the Approaches to Teaching Inventory , 2004 .

[18]  Kirsti Ala-Mutka,et al.  A Survey of Automated Assessment Approaches for Programming Assignments , 2005, Comput. Sci. Educ..

[19]  Tapio Salakoski,et al.  What about a simple language? Analyzing the difficulties in learning to program , 2006, Comput. Sci. Educ..

[20]  David Gries,et al.  What should we teach in an introductory programming course? , 1974, SIGCSE '74.

[21]  Nathan Griffiths,et al.  The boss online submission and assessment system , 2005, JERC.

[22]  Jr. E. Giangrande CS1 programming language options , 2007 .

[23]  Kris Powers,et al.  Evaluating assessments of novice programming environments , 2005, ICER '05.

[24]  John English Automated assessment of GUI programs using JEWL , 2004, ITiCSE '04.

[25]  Elliot Soloway,et al.  Learning to program = learning to construct mechanisms and explanations , 1986, CACM.

[26]  Marcia C. Linn,et al.  The case for case studies of programming problems , 1992, CACM.

[27]  J. Biggs What the student does: teaching for enhanced learning , 1999 .

[28]  Stelios Xinogalos,et al.  An introduction to object-oriented programming with a didactic microworld: objectKarel , 2006, Comput. Educ..

[29]  Tommi Reinikainen,et al.  ALOHA - a grading tool for semi-automatic assessment of mass programming courses , 2006, Baltic Sea '06.

[30]  John T. Stasko Tango: A Framework and System for Algorithm Animation , 1990, Computer.

[31]  Blaine A. Price,et al.  A Principled Taxonomy of Software Visualization , 1993, J. Vis. Lang. Comput..

[32]  Carl Alphonce,et al.  Green: a customizable UML class diagram plug-in for eclipse , 2005, OOPSLA '05.

[33]  Hamzeh Roumani Practice what you preach: full separation of concerns in CS1/CS2 , 2006, SIGCSE '06.

[34]  Christopher A. Egert,et al.  Motivating OOP by blowing things up: an exercise in cooperation and competition in an introductory java programming course , 2006, SIGCSE '06.

[35]  Danny Kopec,et al.  CS1: perspectives on programming languages and the breadth-first approach , 2000 .

[36]  Katrin Becker Back to Pascal: retro but not backwards , 2002 .

[37]  Lauri Malmi,et al.  Fully automatic assessment of programming exercises , 2001 .

[38]  Eileen Kraemer,et al.  A Methodology for Building Application-Specific Visualizations of Parallel Programs , 1993, J. Parallel Distributed Comput..

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

[40]  Mark Toleman,et al.  Introductory programming: what's happening today and will there be any students to teach tomorrow? , 2004 .

[41]  Thomas L. Naps JHAVE: supporting algorithm visualization , 2005, IEEE Computer Graphics and Applications.

[42]  Benjamin M. Brosgol A comparison of Ada and Java as a foundation teaching language , 1998, ALET.

[43]  G. Michael Schneider,et al.  The introductory programming course in computer science: ten principles , 1978, SIGCSE '78.

[44]  Christopher Douce,et al.  Automatic test-based assessment of programming: A review , 2005, JERC.

[45]  Nelishia Pillay Developing intelligent programming tutors for novice programmers , 2003, SGCS.

[46]  Ewan D. Tempero,et al.  Java pitfalls for beginners , 1998, SGCS.

[47]  Lynn Andrea Stein,et al.  Challenging the Computational Metaphor: Implications for How We Think , 1999, Cybern. Syst..

[48]  Richard E. Pattis,et al.  Karel the Robot: A Gentle Introduction to the Art of Programming , 1994 .

[49]  Yifat Ben-David Kolikant,et al.  Students' alternative standards for correctness , 2005, ICER '05.

[50]  Jeff Kramer,et al.  Is abstraction the key to computing? , 2007, CACM.

[51]  John T. Stasko,et al.  Using student-built algorithm animations as learning aids , 1997, SIGCSE '97.

[52]  Jens Bennedsen,et al.  Programming in context: a model-first approach to CS1 , 2004 .

[53]  Peter Brusilovsky,et al.  ELM-ART: An Adaptive Versatile System for Web-based Instruction , 2001 .

[54]  Jan H. F. Meyer,et al.  Threshold concepts and troublesome knowledge (2): Epistemological considerations and a conceptual framework for teaching and learning , 2005 .

[55]  Said Hadjerrouit Java as first programming language: a critical evaluation , 1998, SGCS.

[56]  Steven M. Hadfield,et al.  RAPTOR: introducing programming to non-majors with flowcharts , 2004 .

[57]  Lynn Andrea Stein What We've Swept Under the Rug: Radically Rethinking CS1 , 1998 .

[58]  Anders Berglund,et al.  What does it take to learn 'programming thinking'? , 2005, ICER '05.

[59]  John T. Stasko,et al.  Please address correspondence to , 2000 .

[60]  Ela Zur,et al.  Fundamental concepts of CS1: procedural vs. object oriented paradigm - a case study , 2007, ITiCSE '07.

[61]  Richard E. Pattis The “procedures early” approach in CS 1: a heresy , 1993, SIGCSE '93.

[62]  Randy F. Pausch,et al.  Using Animated 3D Graphics to Prepare Novices for CS1 , 2003, Comput. Sci. Educ..

[63]  E. Boyer Scholarship Reconsidered: Priorities of the Professoriate , 1990 .

[64]  David G. Kay Bandwagons considered harmful, or the past as prologue in curriculum change , 1996, SGCS.

[65]  Andreas Zeller,et al.  DDD—a free graphical front-end for UNIX debuggers , 1996, SIGP.

[66]  Chris Stephenson,et al.  Language Choice and Key Concepts in Introductory Computer Science Courses , 1998 .

[67]  Mordechai Ben-Ari,et al.  On understanding the statics and dynamics of object-oriented programs , 2005 .

[68]  John R. Anderson,et al.  The automated tutoring of introductory computer programming , 1986, CACM.

[69]  L.A. Stein,et al.  Designing a small-footprint curriculum in computer science , 2006, Proceedings. Frontiers in Education. 36th Annual Conference.

[70]  Duane Buck,et al.  JKarelRobot: a case study in supporting levels of cognitive development in the computer science curriculum , 2001, SIGCSE '01.

[71]  David B. Palumbo,et al.  Programming Language/Problem-Solving Research: A Review of Relevant Issues , 1990 .

[72]  Lauri Malmi,et al.  MatrixPro - A Tool for On-The-Fly Demonstration of Data Structures and Algorithms , 2004 .

[73]  Lauri Malmi,et al.  Exploring the role of visualization and engagement in computer science education , 2003, ACM SIGCSE Bull..

[74]  Marian Petre,et al.  Usability Analysis of Visual Programming Environments: A 'Cognitive Dimensions' Framework , 1996, J. Vis. Lang. Comput..

[75]  Michael Kölling,et al.  greenfoot: combining object visualisation with interaction , 2004, OOPSLA '04.

[76]  Erkki Sutinen,et al.  Visualizing programs with Jeliot 3 , 2004, AVI.

[77]  Daniel M. Germán,et al.  Improving the usability of Eclipse for novice programmers , 2003, eclipse '03.

[78]  László Böszörményi Why Java is notmy favorite first-course language , 1998, Softw. Concepts Tools.

[79]  Athanasios Tsintsifas,et al.  Automated assessment and experiences of teaching programming , 2005, JERC.

[80]  Bruce W. Weide,et al.  Components-first approaches to CS1/CS2: principles and practice , 2004 .

[81]  Michael B. Feldman,et al.  Ada experience in the undergraduate curriculum , 1992, CACM.

[82]  Jan H. van Driel,et al.  Professional development and reform in science education: The role of teachers' practical knowledge , 2001 .

[83]  Dean Sanders,et al.  Jeroo: a tool for introducing object-oriented programming , 2003, SIGCSE.

[84]  Caitlin Kelleher,et al.  Lowering the barriers to programming: A taxonomy of programming environments and languages for novice programmers , 2005, CSUR.

[85]  Ursula Fuller,et al.  A computing perspective on the Bologna process , 2006, ACM SIGCSE Bull..

[86]  Byron Weber Becker Teaching CS1 with karel the robot in Java , 2001, SIGCSE '01.

[87]  Adair Dingle,et al.  Assessing the ripple effect of CS1 language choice , 2000 .

[88]  John Impagliazzo,et al.  Computing Curricula 2005: The Overview Report , 2006, SIGCSE '06.

[89]  Stephen H. Edwards,et al.  Providing intellectual focus to CS1/CS2 , 1998, SIGCSE '98.

[90]  T. Dean Hendrix,et al.  Experimental evaluation of animated-verifying object viewers for Java , 2006, SoftVis '06.

[91]  Janet Rountree,et al.  Learning and Teaching Programming: A Review and Discussion , 2003, Comput. Sci. Educ..

[92]  Mark Guzdial,et al.  Motivation and nonmajors in computer science: identifying discrete audiences for introductory courses , 2005, IEEE Transactions on Education.

[93]  Edsger W. Dijkstra,et al.  Go to Statement Considered Harmful (Reprint) , 2002, Software Pioneers.

[94]  David Clark,et al.  Java as a teaching language—opportunities, pitfalls and solutions , 1998, ACSE '98.

[95]  Matthias Felleisen,et al.  The TeachScheme! Project: Computing and Programming for Every Student , 2004, Comput. Sci. Educ..

[96]  R. P. Mody C in education and software engineering , 1991, SGCS.

[97]  Stuart Reges,et al.  Back to basics in CS1 and CS2 , 2006, SIGCSE '06.

[98]  Leanne M. Hirshfield,et al.  Through the looking glass: teaching CS0 with Alice , 2007, SIGCSE.

[99]  Michael Kölling,et al.  Introducing unit testing with BlueJ , 2003 .

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

[101]  Kenneth Goldman A concepts-first introduction to computer science , 2004 .

[102]  Mordechai Ben-Ari,et al.  Constructivism in computer science education , 1998, SIGCSE '98.

[103]  Eric S. Roberts,et al.  Using C in CS1: evaluating the Stanford experience , 1993, SIGCSE '93.

[104]  Elliot B. Koffman The case for Modula-2 in CS1 and CS2 , 1988, SIGCSE '88.

[105]  L. McIver,et al.  Seven deadly sins of introductory programming language design , 1996, Proceedings 1996 International Conference Software Engineering: Education and Practice.

[106]  David W. Valentine CS educational research: a meta-analysis of SIGCSE technical symposium proceedings , 2004 .