It’s the week before finals and I asked my C Programming class for feedback about the semester. We had productive, hour-long discussion in which everyone participated. Among the questions I asked was: which assignment did you like the most?
The answer astonished me: They had to modify a simply program we had written during lecture and add a few features to it, each time committing the changes to a Mercurial repository. When they were done, they were to push the repository to BitBucket where I would inspect the program and give them credit. Easy-peasy.
I invented that assignment at the last moment, just before lab time about two weeks ago, to fill up an hour that would have otherwise gone unused. What I figured it would have taken them about 45 minutes to do in reality took about 90 minutes. They found the assignment more challenging for a variety of reasons:
- Many of them had used Mercurial or set up a BitBucket repository despite being shown it and given instructions to do so some two weeks prior.
- They had never modified someone else’s program to add features.
- They had never thought about coding in an iterative, cyclic fashion: add feature, test it, commit, repeat.
What I thought would be a trivial, almost throwaway assignment turned out for many of them to be the most practical, instructive one of the entire semester. It was not so much about using some particular C language feature that we had just learned; instead it was about the process of programming–using the tools, putting iterative development into practice, and reading third-party code.
I pointed out that in industry, this would likely be what most of their programming would be like: using a VCS and modifying an existing codebase.
It was suggested that I ought to give more assignments like this one. Add features to an existing program. Fix programs with bugs in them. Glue together parts of an incomplete program. They gave me some great ideas for collaborative projects, too.
I always figured that writing programs from scratch were the most instructive. Certainly, they said, there’s a place for that. But it’s a nice break once in awhile to puzzle over someone else’s code.