Gradually Learning Programming Supported by a Growable Programming Language

Learning programming is a difficult task. The learning process is particularly disorienting when you are approaching programming for the first time. As a student you are exposed to several new concepts (control flow, variable, etc. but also coding, compiling, etc.) and new ways to think (algorithms). Teachers try to expose the students gradually to the new concepts by presenting them one-by-one but the tools at student’s disposal do not help: they provide support, suggestion, and documentation for the full programming language of choice hampering the teacher’s efforts. On the other side, students need to learn real languages and not didactic languages. In this paper, we propose an approach to gradually teach programming supported by a programming language that grows—together with its implementation—along with the number of concepts presented to the students. The proposed approach can be applied to the teaching of any programming language, and some experiments with Javascript are reported.

[1]  Anne L. Olsen Using pseudocode to teach problem solving , 2005 .

[2]  Susan Wiedenbeck,et al.  Novice comprehension of small programs written in the procedural and object-oriented styles , 1999, Int. J. Hum. Comput. Stud..

[3]  Eric Van Wyk,et al.  Silver: an Extensible Attribute Grammar System , 2008, Electron. Notes Theor. Comput. Sci..

[4]  Sven Apel,et al.  Feature-oriented language families: a case study , 2013, VaMoS.

[5]  Iain Milne,et al.  Difficulties in Learning and Teaching Programming—Views of Students and Tutors , 2002, Education and Information Technologies.

[6]  W. Feurzeig,et al.  Programming-languages as a conceptual framework for teaching mathematics , 1969, SCOU.

[7]  Martin Smith,et al.  JavaScript as a first programming language for multimedia students , 1998, ITiCSE '98.

[8]  Kyo Chul Kang,et al.  Feature-Oriented Domain Analysis (FODA) Feasibility Study , 1990 .

[9]  Walter Cazzola,et al.  DSL evolution through composition , 2010, RAM-SE@ECOOP.

[10]  ApelSven,et al.  Language-Independent and Automated Software Composition , 2013 .

[11]  Benoît Combemale,et al.  Variability Support in Domain-Specific Language Development , 2013, SLE.

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

[13]  Jens Bennedsen,et al.  Model-Driven Programming , 2008, Reflections on the Teaching of Programming.

[14]  Leon E. Winslow,et al.  Programming pedagogy—a psychological overview , 1996, SGCS.

[15]  Katherine Malan,et al.  Examples that can do harm in learning programming , 2004, OOPSLA '04.

[16]  Lawrence Buckingham,et al.  Ways of Experiencing the Act of Learning to Program: A Phenomenographic Study of Introductory Programming Students at University , 2004, J. Inf. Technol. Educ..

[17]  Wallace Feurzeig,et al.  Programming-languages as a conceptual framework for teaching mathematics , 2011, Interact. Learn. Environ..

[18]  Edoardo Vacchi,et al.  Neverlang: A framework for feature-oriented language development , 2015, Comput. Lang. Syst. Struct..

[19]  Dastyni Loksa,et al.  Challenging stereotypes and changing attitudes: the effect of a brief programming encounter on adults' attitudes toward programming , 2014, SIGCSE.

[20]  Richard C. Holt,et al.  SP/k: a system for teaching computer programming , 1977, CACM.

[21]  Jeffrey G. Gray,et al.  Learnable programming , 2017, Commun. ACM.

[22]  Benoît Combemale,et al.  Automating variability model inference for component-based language implementations , 2014, SPLC.

[23]  Iztok Fister,et al.  EasyTime++: A case study of incremental domain-specific language development , 2013, Inf. Technol. Control..

[24]  Edoardo Vacchi,et al.  Neverlang 2 - Componentised Language Development for the JVM , 2013, SC@STAF.

[25]  Walter Cazzola,et al.  Choosy and picky: configuration of language product lines , 2015, SPLC.

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

[27]  Marian Petre A Paradigm, Please — and Heavy on the Culture , 1994 .

[28]  Sven Apel,et al.  FEATUREHOUSE: Language-independent, automated software composition , 2009, 2009 IEEE 31st International Conference on Software Engineering.

[29]  Viljem Zumer,et al.  Incremental programming language development , 2005, Comput. Lang. Syst. Struct..

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

[31]  Richard E. Clark,et al.  Why Minimal Guidance During Instruction Does Not Work: An Analysis of the Failure of Constructivist, Discovery, Problem-Based, Experiential, and Inquiry-Based Teaching , 2006 .

[32]  Edoardo Vacchi,et al.  Neverlang 2: a framework for modular language implementation , 2014, MODULARITY.

[33]  Peter Brusilovsky,et al.  Mini-languages: a way to learn programming principles , 2004, Education and Information Technologies.

[34]  Henry F. Ledgard Ten Mini-Languages: A Study of Topical Issues in Programming Languages , 1971, CSUR.

[35]  Janine Rogalski,et al.  Acquisition of Programming Knowledge and Skills , 1990 .

[36]  Richard F. Paige,et al.  Bad Modelling Teaching Practices , 2014, EduSymp@MoDELS.

[37]  Matthias Felleisen,et al.  DrScheme: A Pedagogic Programming Environment for Scheme , 1997, PLILP.

[38]  Lauri Malmi,et al.  A survey of literature on the teaching of introductory programming , 2007, ITiCSE-WGR '07.

[39]  Walter Cazzola Domain-Specific Languages in Few Steps - The Neverlang Approach , 2012, SC@TOOLS.

[40]  Eelco Visser,et al.  The spoofax language workbench: rules for declarative specification of languages and IDEs , 2010, OOPSLA.

[41]  Raina Mason,et al.  Why the bottom 10% just can't do it: mental effort measures and implication for introductory programming courses , 2012, ACE 2012.