Richard wrote: "To program beyond simple set piece exercises requires
a certain mindset."
According to Arzarello, Chiappini, Lemut, Marara, and Pellery (1993),
an important part of learning to program is the "sudden transition
from simple computational attempts to the synthesis of the whole in a
procedure or program" (p. 289). However, a significant percentage of
students may not be able to make this leap, as exemplified by the
bimodal distribution of grades in programming classes, where some
students seem to "get it" while others "just don't get it" (Hudak and
Anderson, 1990). Applying Piagetian theory may supply an answer to
this conundrum, specifically involving concrete versus formal
operations stages of development. The latter stage "entails grasping
the logic of all possible combinations of items or events, developing
a combinatorial system, and unifying operations into a structured
whole... data indicate that as many as 50% or more of college
students are not formal operators.. [some] express alarm, arguing
that the use of nonformal operational thinking by college students is
increasing, and propose methods for promoting stage advancement"
(Hudak, M. and Anderson, D., 1990, p. 231).
---
Richard wrote: "I have proven to myself, through teaching my
sons, that it is possible to accelerate the learning process by
close mentoring and hectoring"
Richard is referring to something which is elsewhere called a
"cognitive apprenticeship" ; I think it's clear that students will
learn programming (perhaps any subject) best with one-on-one
tutoring. Arzarello et al (1993) describe student learning as a
continuous self-evaluation loop: "The expert can model and scaffold
the novice, and the novice can observe the expert, correct and refine
his own practice looking carefully at the expert's externalization of
his relevant internal cognitive processes and methods. The novice
must observe, analyze, and evaluate not only inner cognitive
processes, which the expert externalizes, but he must also compare
and contrast them with his own intellectual performance. A sort of
continuous self-evaluation is required; the point is that the novice
can activate it, only if his distance from expert performances is not
too far; if not, this may cause stumbling blocks in cognitive
apprenticeship" (p. 292). Ideally, a programmer will continue to
monitor the effects of his or her current work on the work that has
come before (Lehre, Guckenberg, Sancilio, 1988, p. 85), which is
another way that programming taxes cognitive resources.
A big problem is how to mass-produce this cognitive apprenticeship; I
have 52 students in each of my introductory programming classes;
there is no time for one-on-one instruction. I do try to model
"programming behavior" by solving problems real-time on an overhead
projector; I don't prepare the demonstration problem solutions ahead
of time, but solve them with the students watching -- including
forgotten semicolons and all. I also verbalize my thought process
while solving the problem. This is the closest I've been able to
come to mass-producing cognitive apprenticeship.
Steve Shaffer
teachingprogramming.com
======================================
Steven Shaffer
Computer Science & Engineering
School of Engineering
338C IST Building
University Park, PA 16802
1 814 867 1302
[EMAIL PROTECTED]
----------------------------------------------------------------------
PPIG Discuss List (discuss@ppig.org)
Discuss admin: http://limitlessmail.net/mailman/listinfo/discuss
Announce admin: http://limitlessmail.net/mailman/listinfo/announce
PPIG Discuss archive: http://www.mail-archive.com/discuss%40ppig.org/