Which is why lesson one in software classes should be source control
Indeed.
My class is (for most of these students) their very first exposure to any sort of version control system. Ever. To that end, we settled on using Subversion. Why?
- Clever students can't just edit their history and insert bogus timestamps (as in Git).
- We can set up a single server with different ACLs on each directory. (Trivial in Subversion. Not really a feature that Git easily supports.)
- And Rice already has a campus Subversion server along with scripts to build these sorts of configurations.
- Lower conceptual overhead and pain. (Do you really want to try explaining what a "detached HEAD" is and how to deal with it?) Note that we're using Subversion without any tagging or branching. Just a linear history. Likewise, we won't have any "oops, I committed it but I didn't push my changes" problems (although IntelliJ kinda papers over this issue with its internal VCS frontend).
The place where Subversion turns out to be causing us pain:
- One student used the web frontend, downloaded a zip file of the contents, and then couldn't figure out how to upload them again. (This despite ten pages of instructions of how exactly to get it set up properly.)
- I give them a new subdirectory every week which is an IntelliJ project with holes that they fill in. Some of them always manage to do the checkout at the wrong level of the hierarchy, so nothing works right. Just throw it away and start over again...
Sigh.
This week (the fourth week of the class) is when I'm starting to wean them from asking a question whenever there's the slightest ambiguity or compiler error. "Why yes, you'll need to solve that problem. Make a decision and document it."