Landamatics in
Teaching
Computer Programming
Laurence L. Leff, Ph.D.
Western Illinois University
Abstract
Landamatics is a technique where the teacher precisely defines and
teaches
the steps to do a problem. The students are trained to execute steps
that are
as precise as those that would define a computer algorithm. It has
been used
with success in such fields as mathematics instruction and training
insurance
company personnel to process claims. This paper shows its use in
teaching programming.
It draws on examples from the author's teaching in CS1and CS2. This
method is
analogous to the templates in the famous Programmer's Apprentice
project (Rich
& Waters, 1988). Landamatics has increased the number of
assignments completed
in my classes. This was shown in a data structures class at the p=0.01
level.
1 Introduction
Those of you in teaching programming have seen the following
scenario. A student
knows the syntax of a programming language. The student knows what
each statement
does. Yet, the student cannot put the statements together into a
program. The
teacher is tempted to say, "the student just can't think" and throw
one's hands
up in despair.
Lev Landa (1975) said, "It is common knowledge that pupils very often
possess
knowledge that is necessary in a certain subject, but they cannot
solve problems.
Psychologists and teachers often explain this by saying that their
pupils do
not know how to think properly, they are unable to apply their
knowledge, the
processes of analysis and synthesis had not been formed in their
minds, . .
.". Dr. Landa reports on an interview with a teacher of mathematics.
Here, a
teacher referred to one of her students who had just received a D in a
geometry
test. She said, "He doesn't know how to think. He didn't figure out
that the
chord should be considered as the side of an inscribed angle." Lev
Landa asked,
"why couldn't he figure it out?" The teacher responded, "He couldn't
figure
it out because he couldn't figure it out, that's why." Landa points
out, "the
problem ended where it really should have begun." (1976) This paper
tells you
how to begin when you have students in your class who appear not to be
able
to think when you ask them to write a program.
Lev Landa has developed an instructional technology termed
Landamatics that
addresses this problem. My paper shows how to address these students
and their
problems. As I show, these techniques enable the students to produce
more programs
and more complicated ones than they would have otherwise.
Dramatic results have been achieved by Landamatics. In one set of
experiments,
Dr. Landa developed a technique for breaking down the thinking
processes for
geometrical processes. He isolated the operations necessary to
construct proofs
in a high school geometry class. This is in comparison to the standard
method
where students are simply taught the concepts and theories of geometry
and then
shown examples of proofs. The teachers selected students who knew the
necessary
facts in geometry. This was shown by a test and reinforced by review
of the
material. However, the teachers felt that these individual students
could not
solve problems and "were not skilled in the general procedures of
thinking."
Prior to the instruction based on Landamatics, the students were only
able to
solve an average of 25% of the problemsthe best students of the
group
could only get 40% of the problems right. After the Landamatics
instruction,
in the second test, the students solved 87% of the problems!
Lev Landa (1975) did a similar experiment in a class teaching Russian
grammar.
Here Landamatics reduced the number of mistakes seven fold. Using
these techniques,
Dr. Landa reduced a four-year course to three years instruction with
much better
student performance.
Business Week had an article on Landamatics (Port, 1992). Many
businesses
have been using Landamatics in industrial training. One business
achieved a
$35,000,000 savings. Allstate's claim processing operation improved
productivity
75% and quality 90%. When novices were trained in a business procedure
using
Landamatics techniques, their performance after the training is
compared to
those who have not benefited from such training. Also, the trainees
are compared
to experts. The trainees reached the performance of experts. Ford's
Starnet
subsidiary saved a million dollars. DuPont saved one million dollars
in a quality
check operation. After a demonstration project involving those
processing claims,
Allstate Insurance was so impressed that they trained a group of 23
"in-house
Landamatics consultants," which was termed a Landamatics University.
(Landamatics,
1993)
In my work, I prepare templates for the students for each type of
program they
are to do. These templates contain a general version of the program.
It would
have words or lines in italics that act as a placeholder, showing the
students
where to fill things in. There would be hints or areas that provide
the students
choices for the code to be filled in. Once the students filled in the
necessary
parts, they would have a program that would solve the specific
homework problem
posed to them.
Such a template follows in spirit the template used in the
"Programmer's Apprentice."
(Rich & Waters, 1988) The author observed that expert programmers
have many
patterns that they would use in programming. A programmer does not
develop each
new program from scratch. Instead, he would observe that the problem
matched
a pattern they already had seen or developed. They could quickly enter
the code.
Waters (1985) developed computer technology that helps a programmer
apply these
patternsfilling them in and creating programs.
Landa (1985) observed a correspondence between his work in teaching
geometry
theorem proving techniques and that of Newell and Simons General
Problem
Solver (Barr 1981). Landa developed a method of extracting problem
solving techniques
for use in teaching and for individuals to execute manually. Dr. Landa
developed
his techniques of interviewing experts and setting up curricula on the
subject
based upon the rules the experts used to solve problems. This was done
in the
fifties, before expert systems and knowledge engineering. The
difference is
that Dr. Landa transformed these into manual expert systems and rules
in printed
form to be executed by human beings. Then, these novices were able to
perform
at an expert level. Feigenbaum and others of the expert system
movement transformed
knowledge elicited by experts into computer systems that were shown to
perform
at an expert level (Landamatics, 1993).
The Programmer's Apprentice Project at MIT in the 1980's developed
techniques
to help a programmer generate certain parts of their program (Waters,
1985;
Rich & Waters, 1988). A knowledge engineer would create templates
that correspond
to frequently recurring code patterns. These templates are called
"cliches"
with the formal representation called the "Plan Calculus" by
those
authors. There are "{...}" annotations that show where certain things
are to
be replaced. For example, one such template would be "CREATE simple
REPORT"
Lines in that cliche (written for ADA) read as in figure 1.
"while not {the empty test of the enumerator}(DATA) loop"
"{the print_item}"{CURRENT_OUTPUT,
Modified},
{the
element_accessor of the
enumerator}{DATA}"
"DATA := {the step of the enumerator}
{DATA}"
end loop
Figure 1. Cliché example.
A program called KBEmacs helps the user employ these cliches and fill
in the
annotations. The template provides five options for filling in the
enumeration
function. These allow the system to fill in such annotations as {element_accessor
of the enumerator} and {the step of the
enumerator}.
The user of the KBEmacs system would choose one based upon whether the
data
was in a file, in a linked list, in an array, etc. The system also
allowed the
programmer to define new cliches. Waters (1985) reported on the
implementation
on a Symbolics Lisp machine. At the time, the software was slow, but
they anticipated
that with re-implementation and expected improvements in hardware
speed, the
ideas would be practical.
In similar work, Soloway and Erlich (1984) developed an experimental
procedure
to determine whether advanced programmers used plans. They developed
pairs of
programs that did the same thing. Each pair of programs followed a
plan of attack
like a "data-guard if" or "maximum search loop plan." The second
program of
each pair violated the expected assumptions of such a plan. They had
both novice
programmers and advanced programmers take tests of comprehension on
these plans.
Of course, the advanced programmers did better than the novice
programmers.
Both sets of programmers showed better on the "plan-like" program than
the "unplan-like"
programs. However, the advanced programmers had more of a difference
in performance
between the "plan-like" programs and the "unplan-like" programs than
the novices
did.
This showed that advanced programmers were more likely to use plans
in thinking
about programming than the novice programmers.
This idea is now being promulgated in the software engineering
community under
the name "design patterns." Truett (2001) and Grand (1998)
provide
catalogs of such design patterns in Java. However, most of these
concern ways
of organizing the relationship of classes. These include
object-oriented ideas
such as delegation, the use of interface, small special-purpose
languages, and
optimizing an application that uses a large number of similar objects.
However,
one pattern listed, "iterator," concerns logic in the
program. It
is similar to the first template I describe below.
This paper reports on teaching programming students to generate
programs by
manually filling in templates that I provide. This is analogous to the
relationship
between Landa's work and that of the pioneers in artificial
intelligence. Figure
2 shows a precise form for the analogy.
Lev Landa's Methods of Teaching Geometry : Simon and
Newell's General
Problem Solver
::
My Methods of teaching programming : KBEmacs and the Plan
Calculus
Figure 2.
2 Two Case Studies
I have used this template method, applying the methods of Landamatics
to the
construction of programs, in several courses. These include our
Computer Science
Principles I, Computer Science Principles II, Assembly Language
Programming,
UNIX, LISP, and a Graphical User Interfaces (GUI) course.
Each Landamatics template handout consists of the following five
components:
- a description of the class of problems that the template can
solve.
- a template to use to solve those problems.
- a discussion, often line by line, describing how to use that
template.
- a specific program generated using the template. This is often a
program
that was an example taught earlier in the course. At that time, the
example
was introduced and discussed in the conventional manner.
- an explanation showing how the sample program (d) was developed
using the
template (b). This often includes a line-by-line matching.
2.1 A Template Handout for Two-Dimensional Array Programming
Assignments
I will introduce the method by showing the important part of a
template handout
used in teaching the second computer science course in the main
sequence at
our University (i.e., Computer Science I and II).
Figure 1 shows the use of a template handout for the generation of a
doubly-nested
loop. It solves a class of problems that involve what I term a big
property
and a small property. This template helps students solve
problems involving
two-dimensional arrays. For example, it would include finding the
column with
the most even numbers, determining which row has the smallest maxima,
finding
which row of a two-dimensional array had the largest sum, or counting
the number
of rows with more than three sevens.
Figure 3 tells the student the precise form of the problem question
(component
a, above). This is the class of problems that the template will
solve.
Find the BIG-PROPERTY of the SMALL-PROPERTY of each list.
BIG-PROPRETY and
SMALL-PROPERTY will be of the form:
a. sum of all the values
b. count of all numbers or values that meet some CONDITION
c. maximum and/or {row, column} of the maximum
d. minimum and/or {row, column} of the minimum
e. average of all the values
Figure 3. Problems solved by template.
1. initialize the big-property-value
2. for j := 1 to num-rows do begin
3. initialize the small-property-value
4. for k := 1 to num-cols do begin
5. update
small-property-value
from array[j,k]
6. end
7. update big-property-value using
small-property-value
8. end
Figure 4. Template.
The next part of the handout is the template itself (see figure 4).
The student
has to choose two variable names. Placeholders in the template are
big-property-value
and small-property-value. These are in italics so the student
realizes
that a substitution is neededthis corresponds to the annotations
in ellipsis
reported by Rich (1988). (The template handout includes a similar
template for
processing a two-dimensional array, column by column. e.g., it would
be used
when writing a program to find the column with the largest sum. The
template
handout also includes an explanation of how to read in the data by row
or by
column.)
Some readers may wish to see this or other template handouts as the
students
would see them. A list of many web links is provided in Section 2.3,
each pointing
to a different classroom-tested template handout.
Line-by-line instructions in the template handout tell the student
how to fill
in each line of the template. (These are analogous and similar in
spirit to
the line-by-line instructions that accompany Internal Revenue Service
tax forms.)
For example, in this template handout, the instructions for line 1
tell the
student to initialize big-property-value to zero when it
represents a
sum or a count. It also says to initialize to a very large number when
it represents
a minimum and a very small number when it represents a maximum.
I include here the description for the most interesting line, the one
with
which students have the most trouble. That is line 7 in figure 4,
updating the
big-property-value from the small-property-value.
7. This depends on the type of property that BIG PROPERTY is.
Below is
the set of general choices for updating the property.
A. { sum }
big-property-value :=
big-property-value +
small-property-value
B. { count }
if (condition involving
small-property-value) then
begin
big-property-value :=
big-property-value
+ 1
end
C. { maximum }
if (small-property-value >
big-property-value)
then begin
big-property-value :=
small-property-value
big-property-position :=
i {if
position requested}
end
D. { minimum }
if (small-property-value <
big-property-value)
then begin
big-property-value :=
small-property-value
big-property-position :=
i {if
position requested}
end
Figure 5. Template directions.
Figure 6 shows a program produced with this templateone to
compute the
row with the largest sum.
1. program rows;
2. var a:array[1..10, 1..10] of integer;
sum, largestsum,
largestrow,
nocols, norows: integer;
i, j: integer
4. begin
5. read(norows);
6. read(nocols);
7. for i := 1 to norows do begin
8. for j := 1 to nocols do
begin
9. read( a[i,j]
);
10. end;
11. end;
12. largestsum := 10000;
13. for i := 1 to norows do begin
14. sum := 0;
15. for j := 1 to nocols do
begin
16. sum := sum +
a[i,j];
17. end;
18. if sum > largestsum then
begin
19. largestrow :=
i;
20. largestsum :=
sum;
22. end;
23. end;
24. write('the number of the largest row is
', largestrow);
25. writeln;
26. write('the sum of the row is ',
largestsum);
27. writeln;
29. end rows
Figure 6. Example program.
Finally, in the handout, is a description of how the template that
was seen
in figure 4 relates to the sample program seen in figure 6. We show
the text
explaining the line 7 (of figure 4) in figure 7.
Lines 18 to 21 of the program match lines 4 through 7 of the
template. Note
that we have to "update the small-property-value." Since the SMALL
PROPERTY
is summing, we look to the 7.A of the template directions.
Figure 7. Excerpt of template-code explanation.
2.2 A Template Handout for File I/O
This template handout is from a one-credit course which was part of
the CS1
course. See below. In 2001, I used three templates in a CS1 course.
They covered
programs that read and wrote multiple files, applet programs, and
programs to
sort and search arrays of objects. I discuss the file manipulation
template.
In Java, free-form input from files is done via a library class
StreamTokenizer.
Free-form output is done via the library class PrintWriter.
My template
has the student create a table indicating the Java
StreamTokenizer, and
Java PrintWriter used for the processing of each input file and
output
file. Then the template guides the students in reading from the files
the information
specified by the problem. Finally, the template guides the students in
computing
the output and putting it into the output files that the problem
specifies.
The templates first five steps have the student read the
problem and
identify the names of the files. These are the file names that show up
in the
DOS or Unix operating system. They also choose internal names for
their Java
objects, which are the names used for the StreamTokenizerName
and the
PrintWriter objects. The students table looks like that
shown in
figure 8.
RealInputFileName1 StreamTokenizerName1
RealInputFileName2 StreamTokenizerName2
RealInputFileNamen    StreamTokenizerNamen
RealOutputFileName1 PrintWriterName1
RealOutputFileName2 PrintWriterName2
RealOutputFileNamen PrintWriterNamen
Figure 8.
Later, the students identify the input variables, and the files from
which
they must be read (see figure 9). The template guides them in using
the template
to prepare the nextToken() and other statements to extract the
values.
Variable
name1 RealInputFileName1 StreamTokenizerName1
Variable
name2 RealInputFileName2 StreamTokenizerName2
Variable
namen RealInputFileNamen StreamTokenizerNamen
Figure 9.
The template itself has a place holder where the students write the
calculations.
In the first programs assigned, they correspond to single assignments.
(In later
ones, these correspond to the other programming techniques such as
loops and
if statements. There are, of course, other templates for these. Thus,
there
is the opportunity for students to use two templates to solve a
particular programming
assignment.)
Then, the template handout has the students prepare a table to
identify the
output of variables and the files to which they go (as shown in figure
10).
The template guides the students through writing the println
and close
commands for their output files.
Variable
name1 RealOutputFileName1 PrintWriterName1
Variable
name2 RealOutputFileName2 PrintWriterName2
Variable
namen RealOutputFileNamen PrintWriterNamen
Figure 10.
Our template example reads in a value for the total from
total.in.
It reads a value from tip.in into the variable tips. It
reads
a value from win.in into winnings. The program outputs
the sum
of these values to total.out. (By the way, this
corresponded to
a one-line answer to one of the trainer puzzles (Webber, 2001) that
the students
also did, see below.) Then, the students created the tables specifying
the internal
and external file names as in figure 11.
RealInputFileName StreamTokenizerName
total.in TotalIn
tip.in Tip
win.in Winnings
RealOutputFileName PrintWriterName
total.out F
Figure 11.
From these two tables, and the description of the problem, the
students create
a table relating the StreamTokenizer to a variable which to
input (see
figure 12). Then writing lines 24, 26, and 28 of the program is
mechanical when
using the template.
Variable
name RealInputFileName StreamTokenizerName
Total total.in TotalIn
Tips tip.in Tip
Winnings win.in Winnings
Figure 12.
import java.io.*;
public class IncomeFile
{
static int total;
static int tips;
static int winnings;
public static void main (String
arg[])
throws IOException
{
FileInputStream
TotalInFile = new FileInputStream("total.in");
StreamTokenizer
TotalIn = new StreamTokenizer(TotalInFile);
FileInputStream
TipFile = new FileInputStream("tip.in");
StreamTokenizer
Tip = new StreamTokenizer(TipFile);
FileInputStream
WinningsFile = new FileInputStream("win.in");
StreamTokenizer
Winnings = new StreamTokenizer(WinningsFile);
PrintWriter
F = new PrintWriter( new FileOutputStream("total.out"));
TotalIn.nextToken();
total
= (int)TotalIn.nval;
Tip.nextToken();
tips
= (int)Tip.nval;
Winnings.nextToken();
winnings
= (int)Winnings.nval;
total
= total + tips + winnings;
F.println
("total is " + total);
F.close();
}
}
Figure 13.
The template as it would appear in the template handout is shown in
figure
14.
import java.io.*;
public class Program-Name
{
static int variable sub
1;
static int variable sub
2;
...
static int variable sub
m;
public static void main (String
arg[])
throws IOException
{
//File
Setup Section
FileInputStream
StreamTokenizerName1 = new
FileInputStream("RealInputFileName1");
StreamTokenizer
StreamTokenizerName1 = new
StreamTokenizer(StreamTokenizerName1);
FileInputStream
StreamTokenizerName2 = new
FileInputStream("RealInputFileName2");
StreamTokenizer
StreamTokenizerName2 = new
StreamTokenizer(StreamTokenizerName2);
...
FileInputStream
StreamTokenizerNamen = new
FileInputStream("RealInputFileNamen");
StreamTokenizer
StreamTokenizerName1 = new
StreamTokenizer(StreamTokenizerNamen);
//
Output File Set Up Section
PrintWriter
PrintWriterName1 = new PrintWriter(new
FileOutputStream("RealOuputFileName1"));
PrintWriter
PrintWriterName2 = new PrintWriter(new
FileOutputStream("RealOuputFileName2"));
...
PrintWriter
PrintWriterNamen = new PrintWriter(new
FileOutputStream("RealOuputFileNamen"));
//
input variable sequence
StreamTokenizerName1.nextToken();
Variable1
= (int)StreamTokenizerNamei.nval;
StreamTokenizerName2.nextToken();
variable2
= (int)StreamTokenizerName2.nval;
...
StreamTokenizerNamen.nextToken();
Variablen
= (int)StreamTokenizerNamen.nval;
//
this is the logic for the program
put
the statements of logic here
//
now we output the result;
PrintWriterName1.println
("label " + variable1);
PrintWriterName2.println
("label " + variable2);
...
PrintWriterNamen.println
("label " + variablen);
//
close all output files
PrintWriterName1.close();
PrintWriterName2.close();
...
PrintWriterNamen.close();
}
}
Figure 14.
2.3 List of Templates
Many of these templates are available on my web site. They are part
of the
class notes I write for the students:
- The Template for processing each row of a two-dimensional row
discussed
earlier (http://www.wiu.edu/users/mflll/cs214/2DTEM.html).
A version was also prepared for a course in programming for
scientists and
engineers using C++ (http://www.wiu.edu/users/mflll/225/TwoD.html).
- The template for processing files in Java discussed above (http://www.wiu.edu/users/mflll/j/jone.html).
- A template for creating applets with multiple edit boxes and
buttons (http://www.wiu.edu/users/mflll/j/jtwo.html).
This was also used in my CS1 course mentioned above.
- In that same course, I also gave out a template for processing
arrays of
classes. The example applet program had the user enter information
on pump
names and capacities. Then, they could search for a pump whose
capacity was
in a specific range (http://www.wiu.edu/users/mflll/j/h16.html).
- I also had a similar template for a program that manipulated an
array of
classes where the data was read from a file. The user enter
their query
from a character interface (http://www.wiu.edu/users/mflll/j/h18.html).
- Arrays of linked lists. The example problem tracked the students
in each
course. The array contained the courses at the University. Each had
a pointer
to a linked list of the students registered for that course:
Pascal:
(http://www.wiu.edu/users/mflll/cs214/LINK3_2.html)
C++:
(http://www.wiu.edu/users/mflll/351/landa1.html)
- Many-to-many relations in C++. The example program tracked both
the students
in the course and the course in the student (http://www.wiu.edu/users/mflll/351/landa1.html).
- Polymorphism in C++. The example program maintained a linked list
of various
elements, all of which were derived from a generic trip class (http://www.wiu.edu/users/mflll/351/CCintro.html).
- Units in C++ with operator overloading. The example program had
classes
for lengths in feet and inches and another class for lengths in
meters. Operators
were defined to correctly add these, multiply them by numbers, etc.
(http://www.wiu.edu/users/mflll/351/Overload.html).
- In IBM mainframe assembler programming, a template to move a bit
field from
one word to another. For example, the sample program moved bits
twenty-eight
to thirty from A to bits twenty-six and twenty-eight of
B (http://www.wiu.edu/users/mflll/cs310/unit24.html).
- Translation of if statements from a conventional higher level
language to
IBM mainframe assembler (http://www.wiu.edu/users/mflll/cs310/unit41.html).
- Translation of programs in conventional higher level languages
with nested
for loops and two dimensional arrays into mainframe assembler (http://www.wiu.edu/users/mflll/cs310/unit610.html
and http://www.wiu.edu/users/mflll/cs310/unit611.html).
- For a Visual Basic Course for non-majors, I have a Template for
problems
with three database tables and a grid. The example program allowed
the user
to step through a course. As the user changed courses, a grid showed
the students
registered for that course. As the user clicked on a student in the
grid,
the program averaged the grades for the student from still a third
table (http://www.wiu.edu/users/mflll/CS488/done/).
3 Some Usage Results and Conclusion
As mentioned earlier, I have used Landamatics successfully in several
of my
courses. Landamatics achieves efficiency gains in teaching,
particularly in
the problem solving component of the courses. This efficiency increase
can be
used in several ways (Landa, 1975):
- to reduce the time it takes to teach the same material,
- increase the percentage of students learning the material,
- to raise the expertise level,
- to decrease the student's error rate.
I chose to use Landamatics to increase the quantity and difficulty of
the problems
that the students accomplished. Yet, I maintained the same pass rate
as the
other faculty teaching other sections of the same class.
For example, in my CS1 class, all the sections had the students do an
exercise
involving sorting one dimensional arrays. In my classes, all students
completed
one or more sorting exercises where there were primary and secondary
keys. This
involved multiple one-dimensional arrays, each representing a column.
This is
one of the templates listed in Section 2.3. The other faculty teaching
parallel
sections of this course all had students simply sort a single
one-dimensional
array.
In Fall 2001, I used Landamatics to dramatically increase the number
of assignments
completed. However, I must set the background. Our Computer Science
department
changed its CS1 course to have two parts, treated as separate courses:
CS211
and CS212. CS211 was a large lecture that met two hours per week.
CS212 was
a one-credit small course that met for one hour per week. I was
assigned several
sections of CS212. The first nine weeks focused on a Computer-Aided
Instructional
aid termed the Java trainer (Webber, 1995; Webber, 2001) The remaining
weeks
focused on using the Java SDK from Sun to implement "real"
programs.
I assigned a total of nineteen assignments with the average student
completing
15.1 problems. (Students were offered various opportunities to be
excused from
problems as an incentive for finishing early. Also, some students
"risked"
not earning an A in the course by not handing in all homeworks
assigned.)
By contrast, all other instructors assigned no more than five homework
problems.
The table below shows the percentage completing the CS212 course with
a C,
B, or A. The class with the Landamatics training but
with three
times as many homeworks completed had a slightly lower success rate.
For comparison,
in Spring 2002, I tried teaching the section the regular way: without
Landamatics
but with only five homeworks. The success ratio dropped. Thus, I
conclude the
lower completion ratio than my colleagues was not due to the teaching
technique
and the number of homeworks. The difference reflected the instructor
or the
fact that the instructors sections were in the afternoon while
many of
the other sections were early morning sections.
Fall 2001
Regular
Landamatics (triple homework)
Spring 2002
Other sections
My sections (5 homeworks) |
Passed
99 (77.3%)
14 (63.6%)
Passed
73 (64.0%)
6 (46.2%) |
Failed or Withdrew
29 (22.7%)
8 (36.4%)
Failed or Withdrew
41 (36.0%)
7 (53.8%) |
Figure 15.
In a course on data structures, I started using Landamatics in the
third semester
that I taught the course. This increased the number of assignments
completed
from 7.6 to 12.8 (significant at the 0.01 level) (Sheskin, 1997).
The interested but skeptical reader might raise the following
questions at
this point:
- Wouldn't it be better if the students had the joy of discovering
these techniques
and templates on their own?
- Are the students simply writing the programs following the
templates without
even understanding them?
- What if a student encountered a problem that didn't fit one of the
templates?
As (Waters, 1985), points out, "it is not practical to be creative
all the
time" and "it is never practical to reason about anything from first
principles."
In (Landamatics, 1993), Dr. Landa states, "Despite the educational
superiority
of teaching how to discover algorithms on one's own and actually
discovering
them, it is practically impossible to have students discover by
themselves all
the algorithms they have to learn and know. Their life might not be
long enough
to do this." Yet, our courses in programming often do not teach the
common cliches.
They simply leave our students to discover them on their own.
Sometimes, this
occurs in later classes. Worse, the job may be left until the student
reaches
employment.
Dr. Landa (1975) points out a process in which a student trained with
Landamatics
proceeds from the algorithmic stage to the post-algorithmic stage. In
the first
part, the student follows the algorithm, step by step. He checks each
step and
then applies that step to the particular problem. As the student
continues to
do problems using this technique, the mind will form unconscious
associations
between the items and the actions to be performed at each step. The
step-by-step
process is replaced by an involuntary and simultaneous
post-algorithmic process.
(Landa, 1995) shows how this relates to "learning to learn."
At this
point, the student will recognize similarities between the objects in
the algorithm.
This statement reminded the author of a neural network which
recognizes objects
similar to those on which it was trained. Then the student will see
associations
and become creative in the use of the material.
Landa himself (1975) recognized that it is important that the
students must
be taught "how to discover algorithms on their own." In each of my
homework
sets, I have three sets of problems. The first includes those that can
be solved
systematically with the Landamatics template with no creativity. The
second
set are those problems that are related to the template but require
some twist
or creative approach. The final set are "blue sky" problems that come
from "left
field" that have nothing to do with the template. This has important
implications
in the grading method (see Leff, 1998).
In conclusion, Landamatics is a viable technique in the computer
science classroom.
It is not a substitute for conventional instruction of knowledge and
principles
to help students understand the material. However, it does help
students learn
how to complete problems and write more complicated problems than they
would
without these techniques.
4 References
Barr, A., Feigenbaum, E. A. (1991), The Handbook of Artificial
Intelligence,
Volume 1, HeurisTech Press, Stanford, California.
Grand, M. (1998). Patterns in Java, Volume 1: A Catalog of Reusable
Design
Patterns Illustrated with UML, John Wiley and Sons, New York,
Chichester, Weinheim,
Brisbane, Singapore, Toronto.
Landa, L. (1975). Some Problems in Algorithmization and Heuristics in
Instruction.
Instructional Science. 4, 99-112.
Landa, L. (1976). Instructional Regulation and Control:
Cybernetics, Algorithmization
and Heuristics in Education, Educational Technology Publications,
Englewood
Cliffs, NJ.
Landa, L. (1985). "Why Schools Fail to Teach Thinking and the
Ability
to Effectively Learn and What to Do About It," Educational
Research Service
ED 419 831
Landamatics Ten Years Later: An Interview with Lev N. Landa (1993).
Educational
Technology. 33(6). 7-18.
Leff, L. (1998, December) Contract Grading in the Computer Science
Courses.
Journal of Computer Science Education. 2(3,4), 16-22.
Port, O. (1992, September 21). Lev Landa's Worker Miracles.
Business Week,
No. 3284. 72-73.
Rich, C. and Shrobe, H. E. (1978, November) Initial Report on a LISP
Programmers
Apprentice IEEE Transactions on Software Engineering, SE-4(6),
456-467.
Rich, C. and Waters, R. C. (1988, November) The Programmers
Apprentice:
A Research Overview. Computer. 21(1). 10.
Sheskin, D. J. (1997) Handbook of Parametric and Nonparametric
Statistical
Procedures. CRC Press, New York, NY.
Soloway, S. and Erlich, K. (1984, September). IEEE Transactions on
Software
Engineering, SE-10 (5). 595-609.
Truett, L. (2001) Design Patterns Iterator (a.k.a. Cursor)
A GoF
Behaviral Pattern [Online document] Available:
http://www.fluffycat.com/java/JavaNotes-GoFIterator.html
Waters, R. (1985, November) The Programmer's Apprentice. IEEE
Transactions
on Software Engineering, SE-11 (11). 1296-1320.
Webber, A. B. (March, 1996) The Pascal Trainer, SIGCSE
Bulletin, Vol
28, No. 1, 261-265, (Proceedings of the Twenty-Seventh SIGCSE
Technical
Symposium on Computer Science Education, Philadelphia, Pennsylvania,
Feb 15-18,
Webber, A. B. et. al. (2001) The Trainer Project [Online
document].
Macomb, IL: Western Illinois University. Available: trainer.wiu.edu
|