I haven't been teaching this past semester. That's why I haven't been
writing much about lessons. I miss working with students but that will
resume in the fall and this semester has allowed me to get a jump on
new projects.
It's also allowed me to look at some student issues from a bit of a
distance.
One issue that keeps coming up is cheating.
Some of it, classroom cheating. my friend Ria recently asked a
question on Facebook about it. A nice thread ensued but unfortunately,
it's locked in the Facebook silo. I've got a lot to say on that and
hope to explore it soon but today let's focus on project
cheating - something that could just as easily apply to homeworks and
student essays and research papers as well.
One part of the question is on students using code they find out in
the wild. Alfred wrote a bit about it on his blog here where he points
out some pluses, some minuses, and raises some good thought points.
I want to keep it in the class - code sharing amongst students,
project and source code submission, and group projects.
Teachers have all sorts of options these days including:
- Using a CMS like Blackboard or Moodle
- Dropbox based solutions
- Emailing projects
- Using development tools and sites such as git with GitHub, BitBucket
or other repository hosting services
I've always been a fan of having the kids learn real software
engineering skills along with the CS so Git, GitHub and public repos
have been my weapon of choice.
Interesting enough, I've gotten an earful both from fellow teachers
and professors and online for my stance on public repos.
I keep hearing "the kids will copy from each other" or something like
that.
As Alfred said in his post: "Students have been copying from
classmates for years."
Students who want to copy assignments have done so long before we've
been teaching CS and they'll be doing it for years to come.
Using a hidden submission system doesn't help and could hurt.
Far better to create an open environment. You get an opportunity to
talk about code sharing, attribution, learning from each other,
supporting each other, and where to draw the line.
On top of that, the students learn a real tool set and have a chance
to learn real development methodologies.
It's a win all around.
Will open repos stop cheating and irresponsible copying? Certainly
not. It could, however, raise awareness.
So what do I do on the cheating front?
Besides trying to create a culture where cheating is discouraged,
cooperation is encouraged but where students know the line, I will try
to keep them honest.
Frequently, the day a big project is due, I'll give a quiz on the
project. Students will have to describe parts of the project and what
they did. Either a student will have had to contributed or at least
will have had to have studied the rest of the teams code to pass the
quiz.
GitHub also gives tools that help.
Here's the GitHub graph for a project:
You can see who did what and when. The teacher can drill down further
to examine the diffs – what code did each student write, when, and
from where. If two students submit very similar code, the commit
timestamps will even tell you who was first.
The tooling for teachers could be better but the infrastructure is
there.
Technology isn't going to prevent cheating and more often than not, it
seems that measures taken don't stop the bad guys but inconvenience
those trying to do it right.
Much better to build a class culture where the kids want to do it the
right way.