Reaction for: University of Washington by Jon

Course Information

UW's intro to CS course (CS101) is taught in Java. Like ours, it requires no prior experience in its student population. Unlike cs15, but like many other schools, it has exams. In fact, it has 7 quizzes, 2 midterms, a final exam, and 10 labs (programming assignments). The class seems to have about 50-60 people taking it, and is staffed by a group of 9 TAs. The class also has two guys (Aaron and Nick) who will actually go to your dorm room and install Symantec Cafe on your computer. Now that's service!

Regarding their curriculum, the course starts off with data abstraction, and the beginning of the course focuses more on procedural programming, even though it is in Java. Their programs and sample code mostly exist in one class, with main starting the action. The class moves on to using objects as containers, debugging, recursion, and data structures. At the end of the class, after the lecture on the Stable Marriage algorithm, inheritance and polymorphism are introduced.

Teaching occurs in a few different venues. There are lectures, which occur 4 days/week for an hour each time, lab sessions, which are 1.5 hours once/week, and organized help sessions. The organized help sessions are led by TAs, and as it says on the page, "Help sessions are a chance to work through practice exercises and discuss lab assignments in an informal setting. You may attend as few or many as you like." There are two/week (at least right now), and it says that students without prior background are particularly encouraged to attend.


The assignments in this class involved a lot of writing, and analyzing of code. For most of the labs that the students do, there are two parts. The first part is a set of warmup exercises, that are short problems that you should be able to answer, and get you ready for the second part. Solutions are available for the first part, so you can check your answers once you are done with it. The second part of the lab is something that you hand in, and is a programming exercise of some sort. They vary in size and complexity over the course of the semester, with larger ones happening towards the end of the semester.

The warmup exercises are also considered to be review questions for the quizzes that are quite frequent in this class. There were about half a dozen exercises for each assignment, and each exercise required you to do the equivalent of writing a function, or answering specific questions about some supplied code. Later on in the course (Labs 8 and on), there are no more practice exercises, and instead larger and more involved programming assignments. I really like this idea [see below.]

Stuff that could work for us

First, I think the weekly optional help sessions are good. They seem very similar in purpose and implementation to our sections, except there does not seem to be as much importance attached to attending them, and our sections are the same throughout the week, rather than having help sessions on specific topics happening weekly. It might be worth considering to have special sections held by TAs if they want to go over any additional material. I know this was discussed before, but never implemented.

However, what I really liked were the practice exercises that were part of most of the assignments. These assignments were very similar in size and difficulty to the homeworks that we have used in cs15, but they were more closely tied to the program itself. I consider this to be a big win. I believe this because it is possible to ask more directed questions that can cause the students to think about the assignment, and also make students take a careful look at details that are possible to gloss over when programming.

I think that an easy trap to fall into when learning to program is that you manage to fiddle around with code enough to get it working, even if you don't really understand what exactly each line of code is doing. Personally, I know this happened to me in both CS15 and CS32. If you force students to answer questions that address those details, and they need to understand it to answer the question, it makes students think more. In the past two years, Parameters has been the assignemnt which has caused lots of problems for people. That is because it asks very direct questions that you must understand what is going on in order to answer them. I think we need more assignments like Parameters.

Stuff that couldn't work for us

They have a page with a picture (and linked homepage) for each student in the class. Not surprisingly, this page takes a long time to load up. Also, looking through the pictures, I can conclude that there are some strange people who attend UW... :-)

Swarm (modified)

Silly Premise

[Swarm I silly premise from '96, written by mcc, my former roomie. Not actually given to class.]

Last night at around 3 in the morning, Jon was comfortably reclining in the first row of the Sun Lab grading Parameters assignments, when a zwrite suddenly appeared on his screen. "Where's the Silly Premise for the Swarm handout?" Brian was asking. "I need it in an hour." Jon immediately proceeded to fall out of his chair. "Umm, we just have a few last details to work out," he quickly zwrote back, beads of sweat condensing on his powerful skull.

"Now what am I going to do?" thought Jon, aforementioned skull pulsating with a complete lack of Silly Premises. "If only something silly would happen!" he said aloud. He paused and looked around the empty, hushed lab. Tumbleweeds rolled across the stage. "I SAID," Jon bellowed with all of his might, "IF ONLY SOMETHING SILLY WOULD HAPPEN!!!!" The walls of the CIT shook. Dark clouds rolled across the lab and thundered mightily. From the doors of the lab sprung a thousand, angry, multicolored killer bees! Without missing a beat of the mysterious, backwards-masked circus music that now filled the air, Jon whipped out his huge, rattling lightsaber and began to do battle with the foul beasts. As the walls of the lab folded into Rubik's cubes by their own will, Jon parried and thrusted and mangled many an angry insect. But the physical effort was too much, and he fell to an unused node, logging in with the last of his mighty will. The group of bees surrounded his sweaty visage and laughed at his pitiful dotfiles. But just before the CIT fell into Saturn's orbit, Jon mailed out one last message to Brian, explaining as best he could the situation. Little did Jon know that Brian was actually masterminding the entire situation from the basement of Hegeman! Stop Brian now! Write Swarm I!!!!

New Concepts Covered

Warmup Questions

Look at the following class definition. Assume that all the behaviors listed really exist.

public class HyperBall extends GP.Graphics.FilledOval  {

  public HyperBall(GP.Container container) {

  public void SetUpBehaviors() {

    GP.Behavior flash;
    random = new FlashColorBehavior(this); // make it flash different colors

    // make the shape jump around the screen
    this.AddBehavior(new MoveRandomlyBehavior(this));

    // make the shape blink in and out of existence
    GP.Behavior hideNshow = new HideAndShowBehavior(this);

Try working all these questions out on paper, so you know exactly what every line is doing. Once you have worked out the questions, you can look at the solutions page to check your answers.
  1. If SetUpBehaviors() is called on an instance of this class, will it start flashing difference colors? Why or why not?

  2. Write the HideAndShow behavior. It toggles between making the shape Hide() and Show() on successive calls to the behavior's Apply() method. Why is it necessary to pass a parameter in the behavior's constructor?

  3. Is it possible to add a method to HyperBall which just stops it from hiding and showing, but it continues executing any other behaviors? If so, what would the method do. If not, what would you have to change so that a method could do that?

[insert rest of handout]

Other People's Reactions