I cheated once (Data Structures II), and I feel no guilt about it.
The homework: implement various data structures in C++. The professor then gave us a printed copy of a correct stack/vector/etc implementation. So the homework could properly be rephrased "type what you see on the page into the computer, then run gcc to catch typing errors."
He then threatened that he would catch us if one person transcribed the printouts and multiple people submitted the same transcription.
I split the typing work with some friends, and wrote a perl obfuscator. Suffice it to say, I learned more about programming writing the obfuscator than I did in the rest of the class.
I don't think that's cheating. That's disobedience to arbitrary dictates. You didn't dodge the essential aspects of the exercise (learn what gcc does), just the accidental aspects.
That's like if a professor insisted that you use a particular brand of pen when writing the exam. Disobeying that order isn't cheating.
The homework: implement various data structures in C++. The professor then gave us a printed copy of a correct stack/vector/etc implementation. So the homework could properly be rephrased "type what you see on the page into the computer, then run gcc to catch typing errors."
He then threatened that he would catch us if one person transcribed the printouts and multiple people submitted the same transcription.
I split the typing work with some friends, and wrote a perl obfuscator. Suffice it to say, I learned more about programming writing the obfuscator than I did in the rest of the class.