Next semester, I'll be teaching an intermediate programming course on OOP and design patterns in C++. Additionally, I may do a series of projects based on GeekOS in my operating systems course. (I taught CMSC 412 at UMCP before the advent of GeekOS, but I see in it some influences from the more ad hoc projects we did back then.)
Recently I have been thinking about online tutorial, submission, and assessment systems. Since both of next semester's courses will involve exchanging a good bit of code, I hit on the idea of using Subversion both to distribute project code to my students, and for them to submit their code for assessment. This has been done before; I found a SIGCSE paper on using CVS for this purpose [Reid & Wilson, 2005].
In the old days (the early 1990s), most CS students did their major programming assignments on a semi-centralized (UNIX) system, and most departments maintained some setuid script for managing submissions. At UMCP, my friend Gabe automated the assessment of assignments to amazing levels, with the help of Perl and shell scripts.
An area that I think is under-explored still is using some kind of automated tutor to help students in a CS0 or CS1 comprehend and practice the very fundamentals of programming: conditionals, loops, arrays, etc. There was a special issue of JERIC recently (Journal on Educational Resources in Computing) on automated assessment, but the aim of many of the articles was to save time and give individualized feedback to classes with 400 students. That seems a little dated now – with CS enrollments down as they are – but I guess it may still occur at a few large schools.
I'm interested in automated assessment not for the time-saving or scalability, so much as for a mechanism that can encourage students to practice on their own time, outside of class, and in addition to assigned work. The system should be able to generate a variety of unique problems to solve, offer hints and help, and assess the student's progress.
Anyway, I did figure out today how to set up Subversion as a submission tool. It requires the (slightly) more sophisticated access control that you get running it from Apache 2 and the authz module. I set up the top-level of the repository with a public/
folder, and folders for each student: alice/
, bob/
, carol/
, etc. The instructor and TAs should be able to read and write anywhere, but students can read from public and read/write their own folders only. Here's my authz file that seems to do the right thing:
[cs150s07:/] league = rw * = [cs150s07:/public] league = rw * = r [cs150s07:/alice] alice = rw [cs150s07:/bob] bob = rwThen, files provided for the assignments are committed to
public/a1/
, public/a2/
, etc. and copied into the student folders with svn copy
.
Two tips from the CVS paper that I think are good ideas: first, when students have problems and seek assistance, insist that they commit what they have to the repository, so you can update and help them out without the awkward emailing of files back and forth. When helping a student through a problem face-to-face, check out a fresh copy, show him how to fix the problem, and then wipe the fresh copy so he still has to fix it again on his own.
Second, if we can encourage students to commit often, we may get a better glimpse of their working habits – such as when they start on assignments – and confront them about problems early on. This buys back a little of the surveillance power we had when everyone did their work on the same machine: you know there's a problem when johnny hasn't even logged in and the assignment is due in 5 hours.
As this semester is winding down, I feel the need to debrief myself a bit about how it went. But I'm going to try to hold off on that (at least publicly) until all the grades are in!