One of my CS professors claimed he had a script to analyze all of his students' programming assignments to find possible instances of cheating. I have no idea how extensive his algorithm was: it could have been anything from a simple whitespace and variable name normalization to an analysis of the abstract syntax tree. Or he may have just been bluffing.
Here's a very simple trick that works for programming languages with a C-style syntax: strip out everything except parentheses, braces, and semicolons and compare. I know that it was used successfully in an algorithms course (shortest paths, flows, that kind of stuff) which had stand-alone implementations of the algorithms as assignments.
Edit: Of course there was a manual inspection step involved as well, this matching process was only used to flag suspicious instances.
And I wouldn't punish cheating in those courses directly: Just add the requirement that people need to be able to explain their solutions however they arrived at them. Being able to explain other people's code is a useful skill, too.
Comments
One of my CS professors claimed he had a script to analyze all of his students' programming assignments to find possible instances of cheating. I have no idea how extensive his algorithm was: it could have been anything from a simple whitespace and variable name normalization to an analysis of the abstract syntax tree. Or he may have just been bluffing.
Here's a very simple trick that works for programming languages with a C-style syntax: strip out everything except parentheses, braces, and semicolons and compare. I know that it was used successfully in an algorithms course (shortest paths, flows, that kind of stuff) which had stand-alone implementations of the algorithms as assignments.
Edit: Of course there was a manual inspection step involved as well, this matching process was only used to flag suspicious instances.
And I wouldn't punish cheating in those courses directly: Just add the requirement that people need to be able to explain their solutions however they arrived at them. Being able to explain other people's code is a useful skill, too.
It may be a useful skill, but it's also not what's being taught in an algorithms course.
Likely something like http://theory.stanford.edu/~aiken/moss/, I'd guess.