CS320 and ROOT

Richard J. Botting, CSUSB, May 1999


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.


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/


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.


In the early part of the project students often made the following errors when using the UML: 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.


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.


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.