Constructivist Apprenticeship through Antagonistic Programming Activities

Constructivist Apprenticeship through Antagonistic Programming Activities

Alessio Gaspar, Sarah Langevin, Naomi Boyer
DOI: 10.4018/978-1-60566-026-4.ch115
OnDemand:
(Individual Chapters)
Available
$37.50
No Current Special Offers
TOTAL SAVINGS: $37.50

Abstract

Computer programming involves more than thinking of a design and typing the code to implement it. While coding, professional programmers are actively on the lookout for syntactical glitches, logic flaws, and potential interactions of their code with the rest of the project. Debugging and programming are therefore not to be seen (and taught) as two distinct skills, but rather as two intimately entwined cognitive processes. From this perspective, teaching programming requires instructors to also teach students how to read code rigorously and critically, how to reflect on its correctness appropriately, and how to identify errors and fix them. Recent studies indicate that those students who have difficulties in programming courses often end up coding without intention (Gaspar & Langevin, 2007). They search for solved exercises whose descriptions are similar to that of the new problem at hand, cut and paste their solutions, and randomly modify the code until it compiles and passes the instructor’s test harness. This behavior is further exacerbated by textbooks, which only require students to modify existing code, thus ignoring the creative side of programming. Breaking this cognitive pattern means engaging students in activities that develop their critical thinking along with their understanding of code and its meaning. This article discusses constructivist programming activities that can be used in undergraduate programming courses at both the introductory and intermediate levels in order to help students acquire the necessary skills to read, write, debug, and evaluate code for correctness. Our constructivist apprenticeship approach builds on earlier field-tested apprenticeship models of programming instruction that successfully address the learning barriers of the new generations of novice programmers. We go one step further by realigning such approaches to the genuine difficulty encountered by students in a given course, while also addressing some pedagogical shortcomings of the traditional apprenticeship instructional practice. This is achieved by introducing a strong pedagogical constructivist component at the instructional level through so called antagonistic programming activities (APA). We conclude with a manifesto for a new multidisciplinary research agenda that merges the perspectives on learning found in both the computing education and evolutionary computation research communities.
Chapter Preview
Top

Introduction

Computer programming involves more than thinking of a design and typing the code to implement it. While coding, professional programmers are actively on the lookout for syntactical glitches, logic flaws, and potential interactions of their code with the rest of the project. Debugging and programming are therefore not to be seen (and taught) as two distinct skills, but rather as two intimately entwined cognitive processes. From this perspective, teaching programming requires instructors to also teach students how to read code rigorously and critically, how to reflect on its correctness appropriately, and how to identify errors and fix them.

Recent studies indicate that those students who have difficulties in programming courses often end up coding without intention (Gaspar & Langevin, 2007). They search for solved exercises whose descriptions are similar to that of the new problem at hand, cut and paste their solutions, and randomly modify the code until it compiles and passes the instructor’s test harness. This behavior is further exacerbated by textbooks, which only require students to modify existing code, thus ignoring the creative side of programming. Breaking this cognitive pattern means engaging students in activities that develop their critical thinking along with their understanding of code and its meaning.

This article discusses constructivist programming activities that can be used in undergraduate programming courses at both the introductory and intermediate levels in order to help students acquire the necessary skills to read, write, debug, and evaluate code for correctness. Our constructivist apprenticeship approach builds on earlier field-tested apprenticeship models of programming instruction that successfully address the learning barriers of the new generations of novice programmers. We go one step further by realigning such approaches to the genuine difficulty encountered by students in a given course, while also addressing some pedagogical shortcomings of the traditional apprenticeship instructional practice. This is achieved by introducing a strong pedagogical constructivist component at the instructional level through so called antagonistic programming activities (APA). We conclude with a manifesto for a new multidisciplinary research agenda that merges the perspectives on learning found in both the computing education and evolutionary computation research communities.

Key Terms in this Chapter

Student-Led Live Coding: It is an antagonistic programming activity in which a student’s programming thought process is made visible to all in order to enable an apprenticeship learning based on the authentic learning barriers encountered by students (as opposed to the assumed ones).

Evolutionary Computation: It is the field of research that deals with the design, and application to engineering problems (e.g., optimization, learning), of bio-inspired algorithms that embody the quintessential characteristics of natural evolutionary systems.

Test-Driven Peer Code Review: It is an antagonistic programming activity that pairs students to work on a given exercise, yet allows them to develop their own solutions independently, thus ensuring the symmetrical involvement of both peers. Solutions are then exchanged and test harnesses developed to fail the peer’s code. These test cases are the only instructive information exchanged between peers, thus ensuring a constructivist learning dynamic.

Antagonistic Programming Activities: These are programming learning activities meant to motivate students by leveraging competitive dynamics focused on scrutinizing, critiquing, improving, and troubleshooting classmates’ code. These activities embody the constructivist apprenticeship principles as applied in both instructor-supervised and peer-learning contexts.

Constructive Alignment Theory: It is an alignment of learning and teaching activities with the course outcomes and constructivist principles. It was introduced by Professor John Biggs (2003)

Apprenticeship: An apprenticeship is an educational approach historically employed to train crafts practitioners adapted to computing education as a way to teach programming skills through instructor-led demonstrations of from-scratch problem solving (instructor-led live coding).

Constructivist Apprenticeship: This is a variant of the apprenticeship model of teaching that realigns the teaching practice to incorporate constructivist educational practices. It is applied to programming courses through antagonistic programming activities.

Complete Chapter List

Search this Book:
Reset