# teaching machines

## CS 245 Wrapup

CS 245 has officially closed. I offer some reflection.

### Bitbucket

We used Bitbucket for the first time ever to distribute and submit homework assignments. I wish I could say I learned how to overcome problems that my students ran into, but I can’t. Mostly issues seemed to stem from failing to follow the pull-code-commit-push workflow. Two obvious items to fix for next semester are:

1. Diagram the relationship between my repository, their fork, their local mirror, and their working directory. Students might understand the workflow better with a more informed mental model of how Git works.
2. Set up Eclipse to automatically pull changes from my repository. This semester, students went to Bitbucket and hit Sync to obtain new or updated specifications and automatic graders.

One thing that probably won’t get fixed is spurious pull requests from students. With a pull request, a student is asking me to integrate her changes into the base homework repository. That’s not really her intention, but “pull request” has the word “pull” in it, so the student clicked it. That the student mixes this up is perfectly acceptable. The problem is that the student’s code becomes publicly visible in my base repository’s pull requests list. By visible, I mean other people can see it. I can decline the request, but the code remains visible.

### Final Exam

The final exam could have gone better. The first question was to use a MinHeap to sort a list of Integers. This is 8 lines of code, 6 of which are two linear traversals of a data structure. Few people got it.

The last question was inspired by a conversation I’d heard in the hallway a few weeks ago between a student and another faculty. The student had a sorted list and wanted to create a structure that could be easily added to but stay sorted. The solution is to build a balanced tree. What’s the most efficient way to build such a tree? By halving the list, inserting the middle element, and recursively inserting the two halves. It’s an elegant 5 line algorithm. Even fewer people got this one.

Half of the questions were conceptual. I asked the students to develop an algorithm for managing a coat check at UWEC’s annual Viennese Ball. Next year I’d like to take all the people that suggested using a stack or a queue and let them try their ideas out.

After I tallied up grades, I was alarmed to find so many Fs. However, I plotted the frequency of each letter grade with the number of homework Blugolds that students earned and I’ve transferred my alarm to a different issue: Why don’t people turn in homework?

Final letter grades and their frequency. Color indicates how many homework Blugolds were earned to achieve the letter grade.

All of the Fs received no homework credit. (Some the Cs and Ds got no homework credit as well, but they earned Blugolds through labs, participation, and exams.)

To be fair, the homework this semester was tough. To be fair right back, the homework deadlines are very relaxed. Students may submit any homework any week of the semester, provided they at least get the homework files in place by the “later-week” submission deadline.

I tried to assign four full homeworks and three preassignments (half-homeworks). I think I’m fully convinced now that this is just too much. Three full- and three half-homeworks seem like an appropriate challenge.

### TODO

Some other ideas have been floating through my head:

• Ask TAs to help grade. I think this would get them into problems more. Of course, they’d also help shoulder the burden of giving timely feedback.
• Eliminate preassignments. I started using preassignments at the suggestion of a student (thanks, Mike!) who thought his learning might improve if CS professors gave more frequent, smaller assignments instead of a few large assignments. I thought his point valid and I still do. At the time, with 250 students in the class, the only conceivable way I could increase the number of assignments was to make them automatically graded. These days I automatically grade everything, so that “grading” really is just walking through students’ code and giving them qualitative feedback. If TAs are helping in this, perhaps I can just give regular assignments, some worth 1 Blugold, some worth 2. The “preassignment” distinction is not really meaningful anymore.
• Some of my colleagues cover things that I do not. In particular: balanced trees. The minutiae of such data structures sends me spinning, and I have no idea how to effectively incorporate them into an already full class. Coverage and application are in tension, and I’d rather err on the side of application.