Reaction for: Nightmare on Westwood Avenue, by Matt C

How should we teach design? For the major problem of software development in my view is designing the program so that it will be extensible, maintainable, and oh yeah, work correctly. This change in curriculum practiced by the authors is in my view the best approach that I have seen. I strongly believe in learning by doing, and as we have seen in other classes, it is difficult to teach design in another way.

What does this mean for an introductory class? Should we try to teach in this manner? Certainly not. The point of the introductory class as we see it now is to introduce programming (in our case Object-Oriented) concepts and techniques. This includes the fundamentals of Object-Oriented design such as classes, plus the relevant syntax for the introductory language of choice. In my opinion it is too much to ask a student who is just learning syntax to also keep in mind the many intricacies that a design may entail. Thus, we cannot teach a large amount of design (meaning real software-engineering practices) in the introductory course.

This does not mean that we should teach no design at all. It is just that we should limit our teachings to the very basic. Once a student has mastered the syntax and basic concepts of OOP, she is free to begin learning good software-engineering practices, and I believe that the method presented in the paper is an ideal way to go.

CS 32 seems to teach in a similar manner to what the authors suggest, though there may be more lecture in 32 than the paper. However, CS 123 does require students to use their previously written code to build the large final project. If students design correctly from the beginning, they can use their code all the way through so that their final project, a ray-tracer, is built using code they wrote from the beginning of the year plus a little support code. The satisfaction gained from doing it this way is pretty great.

Thus, I believe that our goal in an introductory course is to teach OOP concepts and syntax, and enough design to keep students from straying down the wrong path. But the major focus on design should come in later courses in the manner presented in the paper.


Reactions


Amanda's reaction

I think 15 does have a lot of design in it. I haven't taken a whole lot of courses but it seems to tackle design and OOP first.


Lucas's Reaction

I agree and disagree. I agree that while design is just an added difficulty for a new programmer, more than just the very basic should be taught. Intro courses are where habits are formed, and if students learn bad design habits, they will just have to be un-learned at a later date. I agree with Amanda in that there seemed to be quite a bit of design taught in cs15 -- at least in a more structured way than I had ever been exposed to before.


Danah's Reaction

Yes, we teach some design but we do not teach it in depth. Often, this is because we cannot do so. There is too much to it and it is not understood without some experience. On the contrary to Lucas's suggestion, I do not believe that design / OO is any harder than it is for a veteran. In fact, I think that OO Design makes far more sense than to someone trapped in their ways. Unfortunately, I also think that programming is a very heavy battle to overcome and veterans are farther along that track.


[BACK]