situation:
“Trains A and B are at the same
station. Train A goes to the east at
X miles per hour. Train B goes to
the west at Y miles per hour. The
trains left the station at the same
time and travelled for Z hours.
What is the distance between
Train A and Train B?”
Students with incorrect answers drew diagrams
showing the trains moving in the same direction or
towards each other.
This experiment was repeated again this year in
both the first and second programming classes. In
both classes, 35% of students had incorrect diagrams
and thus equations. These students were not having
problems with the programming task but were
having problems coming up with the correct
equations because they could not visualize the
situation correctly. This result echoes what was
discussed in the papers (Hall, 1989a) and (Hall,
1989b). Unfortunately, appropriate remedial
instruction for the 35% of the students cannot be
provided within the context of the programming
classes.
3 VISUAL REPRESENTATION OF
LINKED LISTS
The second area in which we discovered the same
difficulty was with linked lists in the second
programming course. After two lectures showing
diagrams for adding and deleting nodes from linked
lists, the students were given an assignment to draw
the effects of C++ statements for manipulating
linked lists before they were allowed to write a
linked list class. An example problem is:
“Why can't we do the following to
add a node to the rear? Draw the
effect. Rear =
new Node;
Rear->Next = Rear;”
Every semester, more than 50% of the class had
great difficulty drawing correct pictures, and the
same group of students had difficulty coding the
linked list class. With a large number of students, it
was not possible to sit with each student to
individually analyze their diagrams.
4 CPP TRACER TUTOR
The students in the first programming course who
had problems with Entry level Mathematics
problems were also resistant to the explanations and
exercises that were typically successful in leading
others to an visual understanding of machine
operation, and the ability to understand their own
programs. Instead of relating their programs to the
sequences of machine actions they cause, the
students seemed to memorize a few stock
“boilerplate” program fragments for the problems
they had seen. They were unable to analyze why a
program works or does not, seeing no connection to
the resulting actions by the machine.
With these students, simply using a debugger did
not help since they needed repeated explanations
with examples. But they were reluctant to ask for
help and preferred to practice without being noticed
by other students. Therefore, we developed a
tutoring system, Cpp Tracer Tutor (Yoshii, 2003).
The goal of the Tutor is to help students develop and
practice their reasoning skills using visual
representations of executing programs. The
following are its main features. The latter three of
these features were adopted from the Irvine-Geneva
strategy (Bork, 1992)(Bork 2001):
Visual representations of programs: the Tutor
provides a live media visualization of the
actions taken by the machine in executing a
running program.
Conversational tutoring: the Tutor provides
frequent interactions with free-form student
answers.
Adaptive learning: the Tutor uses student
answers to provide appropriate hints and to
select the next exercise.
Mastery learning: the Tutor does not let the
student move onto a different program
example until the student shows no difficulty
understanding the current one.
The Tutor, written as a Java applet is available
via the Internet, allowing students to use it privately
at their own pace. Currently, the Tutor supports five
different types of example C++ programs that are
often seen in the first programming course: 1) a for-
loop with a constant as its upper limit, 2) a for-loop
with the upper limit pre-supplied by the user, 3) a
while-loop that continuously take the user’s input
until a sentinel value is reached, 4) a while-loop that
terminates when a sentinel value is read or a certain
number of iterations has been done, and 5) a while-
loop that terminates when a sentinel value is read or
ADAPTIVE TUTORS FOR DEVELOPING VISUAL REASONING SKILLS IN PROGRAMMING COURSES
365