Collaboration Policy

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

Most of your course grade (and pretty much all of your learning) comes from doing the programming projects. I can talk about programming 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. Under no circumstances should you directly copy another student's code.

As the course progresses, there may be one or more group assignments. For these, you will be required to work with one or two 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) throughout the semester, then you may not be able to find a decent partner. So how well you collaborate may affect how well the second half of the semester goes.

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. Afterwards, the person will return to his office with a fresh perspective and attempt to tackle the problem. 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.

To summarize this policy:

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.

Comments?