by Andrew Schulak and Adam Leventhal

One of the first things one must ask when considering a particular aspect of a system is how useful is it really to the entire system. When considering CS15, its educational content, and what services we are trying to provide for its students, the concept of written homeworks became very important.

Currently our homeworks exist in a written form, on paper, in a form which consists of a few questions, some code based, which the students answer. In the past these homeworks were returned to the students too late to be useful, and at times with little comments from the TAs. Homeworks were perceived by some students as being very useful, but on the whole the majority of the students felt that they were useless, a big waste of time.

Reasons for this vary. Some students are experienced and understand all of the concepts currently presented within the scope of the homeworks. Others fell that, in a course which is project based, homeworks, which present only a small fraction of the grade, are ancillary and therefore put less to no time into them.

Some questions which are raised by these results are: a) Should we gear homeworks towards both beginner's and experienced students? b) How can we make homeworks seem more a part of the class so that student's take them seriously? c) Finally, is there anything we can do to make the homeworks more interactive so students can learn faster and from each other.

One idea, which has come up in the past, is to make homeworks more self-diagnostic. By self-diagnostic we mean that the purpose of homeworks becomes shifted from being a tool to provide educators with a sense of how students understand the material, to an opportunity for students to actively learn and help reinforce certain concepts which should be inherent to all programmers.

Personally, we feel that a system like this would be most beneficial for the syntactical side of teaching object-oriented programming. We propose a system that allows students to receive immediate feedback to syntactical questions, as well as a means to reinforce these ideas continually.

Our system would consist of a database of questions, each multiple choice, which would have something to do with syntax. An example might be:

1) How would you declare a class named Cloud 
   which had public access and inherited from 
   a class named Shape?

   a) class Cloud : public Shape
   b) public class Cloud is a Shape
   c) public class Cloud extends Shape
   d) Shape : Cloud : public class

For each homework there would exist a large database of questions like this. Each time the student ran the program they would be given ten random questions from the database. Their task would be to correctly answer as many as possible out of the ten. The catch is that there is a timer which is counting down from 1000. Every wrong answer reduces the counter my a certain increment. So the new task is to answer as many questions right as possible correctly. The student's final score is the time left on the clock.

This system for homeworks allows, no begs, the student to take the "test" as many times as he or she can. In fact, when a system like this was put into place in my (Shoe's) physics class we were given a week for each test. The best score we recorded by the end of the week was the one we kept. What a system like this does, through repetition, is pounds the information into the students head.

Where this is a big win, we feel, is with syntax. Syntax in programming is something which should just come naturally and should not really place an extra burden upon the programmer. Surely if every time we spoke we had to think of grammar rules speaking would be a huge problem. We believe that this system will help reinforce the much needed syntactical skills not only in the beginning students, but in the experienced students as well.

Another area of the course which can be benefitted by a new system of homeworks is design. Currently we test design in one homework only. In this homework we set up a few situations, which lend themselves to being solved with particular design patterns, and ask the students to tell us what pattern they would use and how.

This current method is good in that it allows students to use what they have learned about design and apply it to new situations. However, is there any way we could improve upon this situation?

One of the issues in teaching design, as we have found, is how to you actually teach design? Design is something that comes from experience, so how do you share experience with beginning students? One idea that has come forth is to actually document the program design stage with commentary on all of the thoughts and decisions one makes. Now it is easy enough for TAs to do that, but can we gain anything from having students do it with each other, and is it possible?

In "Computing Curricula 1991" it is said that "undergraduates learn about design both by direct experience and by studying the designs of others" (p.73). Also, evidence from our own internal examinations show that students learn well from each other: "for some reason exercises like parameters did not translate very easily to useful knowledge for me. I learn alot talking with other students and from one on one help." What if we could provide a forum for students (and TAs) to share their approach to a certain design problem with each other? Currently we could use the newsgroup, but this forum is open to the public, and isn't very friendly in an academic sense in that organization becomes a problem as well as monitoring of participation.

What we propose is a system that is already being tested here at Brown. For his math courses Professor Banchoff has had developed a system just as we have described. Students log into a web page and have access to all sorts of forums for public participation. Most applicable for us is a forum which poses challenge questions. Students then respond to the questions as well as each other's responses. This would allow interested students to explore areas not directly related to class without interfering with other's education. The Professor (and TAs) can also respond as well.

An example of a sample interaction might be:

You are trying to model a house. How might you design your house?

TA Andrew Schulak writes:

Well a traditional house is composed of many different forms of rectangles and maybe a triangle for a roof. I would probably draw a bunch of rectangles and position then accordingly. When I was finished with the body of the house I would place a triangle on top. If I got really fancy I might paint the house and roof but I don't know how to do that yet.

TA Adam leventhal writes:

That is an okay way to do it, but I might try a different approach. I like to think that a house is composed of a house body, a door, some windows, and a roof. I would design my house to be an arrangement of these objects which all knew how to draw themselves. That way I wouldn't have to worry about the specifics of drawing them. Given this idea, how might you go about organizing these objects?

We feel that a system like this would be extremely helpful in teaching design in that it can a) introduce students to new design situations in an easy manner, b) allow students to share in the design process as well as each other's design process, and c) allow for instantaneous feedback by students and TAs.

In conclusion, we feel that homeworks as they exist are not as much a part of the learning process as they could be. By replacing some homeworks with more interactive self-diagnostic tools and online design discussion groups, the non-programming segment of cs15 will become more beneficial to students, and will allow students to learn at their own rate. We feel this dynamic mixture has the ability to provide a more educational experience, as well as benefit the student more than the current system.