CPS 124/296.3
Fall 2001

Collaboration

"Your code is like your boyfriend or girlfriend. It's okay to talk about it on an abstract, high level. But you don't want to go into the specific details, and you certainly don't want to share."
- Pascal Van Hentenryck, Professor of Computer Science, Brown University

Much of your course grade (and pretty much all of your learning) comes from doing the homework and programming problems. I can talk about concepts all day in class, but you will only truly absorb the material after spending some quality one-on-one time with the language and tools. The projects are non-trivial and you will find them time-consuming and sometimes frustrating. I also hope you will find the work to be rewarding and that you will be proud of your accomplishments and the new skills that you will gain.

I think it is important that you do your own independent work on the assignments. However, I do not mean that it should not be possible to get help or talk to anyone else when you get stuck. In fact, you are encouraged to interact with your classmates in this course: discussing course materials, clarifying misunderstandings, working through conceptual problems, understanding compiler errors, or just commiserating. In fact, collaboration can be an extremely effective way to learn. However, individual assignments that you hand in for the course must represent your own work and not that of a fellow student, past or present. Violating the spirit of collaboration described here may result in a charge of academic dishonesty.

This document attempts to give you some guidance about how to get the most out of your collaborations and avoid accusations of cheating. Collaboration means that you can consult with other students about code provided during class, debugging, and any material presented in the books, on the web pages, or in class. To consult with another student does not mean that you passively receive their solution. For each assignment you are expected to include a list of the students with whom you have consulted, references to code you have borrowed or used as a starting point, and other resources you consulted. In short, you are expected to give credit where credit is due. Under no circumstances should you directly copy another's code and call it your own.

As the course progresses, you will be required to work with other students in the class. If you have not gotten to know your classmates by then, or if you have been cheating (and getting away with it) , then you may not be able to find decent partners. So how well you collaborate may affect how well your semester goes.

To summarize this policy:

You should do your own thinking, your own design, and your own coding. 
You should never let yourself be led by another student, or receive an amount of help which makes an assignment significantly easier.
Conversely, you should never assist another student in a matter that would overly lead them or make their job much easier.

In fact, this is similar to the way people interact on the job. If someone is having a problem, he may go to a co-worker's office, or offer to buy them coffee in the break room, and discuss the problem. The co-worker may offer some suggestions or point out flaws in his solution or understanding of the problem. Eventually though, the person must return to his office and tackle the problem on his own. In the end, he is responsible for his own work; it is unreasonable to believe that he can blame his co-workers for their advice if the project fails. On the other hand, it is reasonable for his co-workers to stop helping him if he gains a poor reputation.

Your name must appear on every assignment you hand in, electronically or on paper. Putting your name on an assignment constitutes your agreement to this policy in accordance with Duke University's Honor code.

Finally, no collaboration is allowed on exams or quizzes.
 

Feedback?