CS320 and ROOT
Richard J. Botting, CSUSB, May 1999
Abstract
As part of the
ROOT Project
a major change has been made in the CS320 Programming Language Class
at California State University, San Bernardino. This short paper notes what was done and evaluates the outcomes.
Background
The Computer Science degree at CSUSB has a course that studies the concepts
of programming languages.
It is taken after completing the first two quarters of programming. It
covers a variety of programming
paradigms. The goal is to help students to understand programming language
issues and introduce them to a
variety of syntax, semantics and paradigms. The course includes laboratory
work in C++, Prolog, LISP and
Java. The text used is Sebesta's ??. This book does not use the UML.
Syllabi, schedules, and course
materials are available on the world wide web in Dr. Botting's web site
http://www.csci.csusb.edu/dick/cs320/
Actions
The UML was introduced into the course in the spring quarter of 1998. The
department had agreed to a new
syllabus that reduced the time spent on Prolog and logic programming to make
room for in the UML. An
analysis and design project was added. An active learning format was adopted
so that all 15 chapters in the
book could be covered plus the project and the UML. All students were
required to study the set part of the
text before class and complete and hand in answers to some review questions
at the end of the assigned
piece. Most of the class time was spent with the students doing exercises.
Students would do exercises
either alone, in pairs, or in groups of four. Answers would be presented to
the class. Usually the answers
could be thought out using the book. Model answers for the UML exercises
were handed out afterwards
since these could not be figured out using the book.
As detailed elsewhere,
the UML fitted in as a way to describe the semantic
structure of languages. The
syntax can be presented in extended forms of Backus-Naur-Form and then
semantic issues can be tackled
using the UML. In the project students worked in teams. They were given a
small and defective language
description using an extended BNF and informal semantics. They first
studied the language description and
prepared a list of defects that they would fix in a redesign of the language.
They then submitted a draft
improved BNF+UML description reviewed and graded by the instructor.
This step allowed the instructor to
correct some gross misunderstandings of the UML. At the end of the class
students first presented the syntax
of their improved language and then the UML semantics.
Results
In the early part of the project students often made the following errors
when using the UML:
- Trying to express irrelevant syntactic details and comments.
- Using the C/C++ notation for declaring attributes and operators.
- Putting diamonds and arrows on every link.
- Showing software components, packages, and operations as classes
Examples: Compiler, Interpreter, or
Operating-System
- Using OMT rather than the UML notation.
- Not using Polymorphism.
- Confusing "A Part Of" with "A Kind Of" relations.
In response to these, the instructor prepared some special handouts to
correct these errors. It stresses the use
of polymorphism and covers the Composite pattern that is ubiquitous in
programming languages.
Outcomes
The new version of the course has been taught twice in the Spring 1998 and
Winter 1999. Each time it had
the same instructor, similar students, and an almost identical syllabus.
Twenty-one (21) students took the
first section and twenty-eight(28) the second section. The students provided
anonymous opinions via the
World Wide Web in their last laboratory. In the second to last weeks of each
section they submitted the
CSUSB standard Student Evaluation of Teaching Effectiveness(SETE) forms for
both classes.
The SETE forms contain 10 scores on a 4-point scale: Poor=0, Fair, Good,
Excellent=4. The scores in all
instructors classes are typical of the CSUSB College of Natural Science: 1%
Poor, 7% Fair and 83% either
"Good" or "Excellent." The scores on the two sections are slightly better
with 92% Good+Excellent scores.
There was no significant difference between the two courses. The UML did not
lower the students opinions
of this teacher's effectiveness.
In both classes all the teams but one could produce an understandable diagram
of the design of a
programming language using the UML. The one failure was a team with a single
student who had problems
in the class as a whole. The student's work was an adequate first step
toward an object-oriented compiler or
interpreter for a small language.
The student opinion via the World Wide Web showed that the students felt that
the instructor emphasized
the UML too much in the first course. The consequences seem to appear in the
student's knowledge of the
UML in the final examination. The instructor analyzed a sample of 15 final
examination papers in each
course. In both exams, students had to recall how they expressed the
semantics in their project. In the first
course 60% did this correctly but in the second course only 20% did so
correctly. In both exams, students
were asked to express the structure of a control statement that they had been
shown in handouts and class
work. In the first course 50% did this correctly, but in the second only 33%
did it correctly. In a third
question, students were asked to express the idea that one class implemented
an abstract class. In the first
class 20% did this correctly, but in the second class none(0%) did it
correctly.
Conclusions
In conclusion, then, the UML can be taught as an integral part of a
classical Concepts of Programming
Language class however the instructor has to emphasize and "push" the UML for
students to master the
details. Even so a team of students, can in 10 weeks, carry out the analysis
and object-oriented design for a
small programming language project.