Plagiarism in Programming Classes

Why
Recent events in courses containing significant amounts of programming have lead me to believe that a formal statement about what is and what is not plagiarism is needed. I am saddened by this realization because I want to believe that students are generally honest and generally interested in acquiring an education. Furthermore, students who copy/steal/borrow other people's code are probably not going to understand the concepts being taught as well as those that complete or struggle with the assignments and hence are more likely to do poorly on the exams.

Integrity
This whole issue is about personal integrity. For me this is not about what you can and can't "get away with". It is a matter of conscience, integrity and self-conception. I truly don't understand how a person can say to themselves and believe that plagiarism is not wrong or even worse that if they don't get caught then it's not wrong. Cheating is wrong whether you get caught or not, and plagiarism is cheating. If it becomes habitual it destroys your sense of self-worth and affects many other aspects of your character. To me, lack of integrity, i.e., dishonesty, is the most serious character flaw.

Pairs/Teams
When pairs or teams are allowed each member is expected to "pull his or her own weight". This means that :

Within teams not all members have the same skills and abilities. When teams are unmatched, as long as each team member is contributing (both ideas and work) according to their ability and the stronger student(s) are explaining the techniques to the weaker student(s) I am O.K. with calling it a team effort. The explanations that pass between team members are excellent learning opportunities for both the explainer and explainee. It is also important that all team members keep current copies of the code. If for some reason the team must split up before completion, it is reasonable for each member to continue using the code from the last team programming session at which they were in attendance.

Obvious plagiarism
The basic tenant is simply that students (or teams) are expected to hand in their own work. If they have difficulty understanding the problem or solution they may of course ask for assistance from the instructor, SI or classmates. What constitutes assistance is what is open to question. The following are examples of what I consider clear and obvious cheating:

I believe that everyone realizes that these things are cheating and that guilty parties have chosen to do it anyway. Such instances will be dealt with as harshly as has outlined in the course syllabus.

Getting Help
On the other hand, we want to encourage students to get help when needed so "What is allowed?", you might ask. I have one of the best "availability" ratings on campus and am always willing to help with homework, programming and other assignments. When not in class or meetings I am always open to meet with students. (Even in the Konditorei, just bring a printout.) In classes with an SI, I allow them to assist students in understanding the problem specifications, outline solutions and, help debug specific error messages. When asking fellow students or students who have had the class before for aid things get a little more tricky. You may confidently give help or get help of the following types:

Giving Credit Where Credit is Due
I require students to document assistance in the comments of all projects. Any help, however minor, from anyone not on the team, not the SI, and not the instructor must be cited in a comment near the point of assistance or the initial documentation block.
(1) When you are allowed to work in pairs/teams, each team will be sure to put all team members names in the initial documentation block. Later statements like "Oh, I worked with Jeff but he forgot to put my name in the comments will not be accepted, even if Jeff says so too!
(2) When a student inside or outside of the class helps you with a program you will include an acknowledgement of this fact in the program comments. e.g., Jeff Smith helped me on this function, or Jeff Smith helped me with the main loop.

Take-home Tests (lab or written)
Take-home tests whether problem oriented or programming oriented in nature are given with the stipulation that you work alone. Unless otherwise specified, the instructor, textbook, language references, and class notes are the only sources of information allowed. ANY discussion with or assistance from other students and faculty is cheating and will be dealt with harshly. Period!

Josef M. Breutzmann, last revision June 2009