Collaboration Policy

A good professional uses all the available help, so it is unrealistic for us to ask you to do everything in this course by yourself. We encourage you to use all the sources at your disposal to solve homework assigments--lecture notes, texts, the web, and other people including faculty, TA's, and fellow students. In this course, certain forms of collaboration are acceptable and beneficial to your learning process. Direct engagement with the material, in discussion or in doing programming projects is the best path to understanding. Therefore, activities such as discussing the projects to understand them better, helping locate conceptual bugs, and discussing lecture and textbook content are acceptable. But what you hand in must be your own work.

We also want you to acknowledge explicitly whatever help you receive--another professional practice. To do this, start each piece of work you turn in with a section labeled Acknowledgements that lists all the written and human resources you consulted in doing the work. It should also list any other students in the course that you helped. You should be clear about the nature of the assistance. For written material, a url or citation is appropriate. For personal assistance, here are some of the things that are appropriate:

In general, oral collaboration is OK.

Here are some things that are inappropriate:

If you do any of these, your should also acknowledge it in what you turn in; but expect to have a conversation with an instructor about it and, at least, suffer some penalty in the grade. If we discover you have done this and not acknowledeged it, the penalty will be much more severe. In other words, dishonesty is much worse than stupidity.

Here are some gray areas:

These, too, should be acknowledged.

If you have any questions or concerns, or do not wish to abide by any of these policies, then please contact one of the course instructors to discuss the matter. When in doubt, ask an instructor

You might find it helpful to keep this analogy in mind: Imagine that you are taking an English course on short stories. Imagine further that you have been given the assignment to write a short story. It is acceptable collaboration to discuss your story ideas with others. You may try out your ideas by telling your stories to others, discussing plot development, character development, and so on. You can even read a classmate's draft (if he/she asks you to do so) and provide a critique. But when it comes down to writing your story, must write your own words and your own story. You might be able to read Edgar Allen Poe and even understand thoroughly why his stories are great; but this doesn't mean that you are able to write like Edgar Allen Poe. Copying his words accomplishes nothing.

Similarly, for your homework in this course, it accomplishes nothing if you use someone else's code. You must write your own original code! In our experience, looking at a classmate's code often leads to de facto copying of code segments and impairs your ability to write your own original code. We do acknowledge that students can provide specific, valuable help to each other during the course without copying code, but you should never look at another student's code without first asking course staff.

Note that the handin system used in this course uses advanced data-mining technology to detect unusual similarities between programs, from this semester and previous semesters. Developed and used by many of the top computer science programs in the world, previous small-scale experimentation at CMU has indicated that this technology is virtually impossible to defeat except with a great deal of effort. The course staff will inspect very carefully all similarities that are uncovered, and in some cases students will be asked to explain how such similarities came to be.

It is, of course, difficult at times to know if what you are doing will be considered cheating. If you are unsure whether an action you are contemplating would be considered cheating, then contact a member of the course staff first. When in doubt, ask an instructor

University policy

Students are encouraged to read the university policy regarding cheating.


To be fair to all students we must enforce a strict policy with respect to cheating. The handin system for this course will run a very sophisticated code-similarity detector. Programs that are identical or exhibit suspicious similarities will be automatically flagged, and students will be asked to explain how such similarities came about and how their programs work. The penalty for cheating will depend on the severity of the offense and the student's past record in this regard. In general, the student will be given a score of -N, where N is the maximum points possible for the project. So, for example, if you cheat on a project worth 15 points, you will receive a -15 for the project. Multiple or severe infractions will result in failure and a letter to the dean of student affairs. Historically, most students caught cheating have ended up failing the course.

Our reaction to your cheating will also vary according to the way you handle the situation.


To help prevent cheating, you must read-protect your own directory in which you develop your projects (if you work on an Andrew machine). To protect a directory named, for example, 211proj, you would type the command

fs sa 211proj $USER all -clear

Read-protect any directories in which you develop code for 15-211.

We also have at our disposal several state-of-the-art data-mining technologies that have proven to be amazingly effective at spotting unusual similarities in homework assignments. In the recent past, these technologies have been used with extreme effectiveness to catch cheating via code-copying, and it is possible that we will use this again in this course. These technologies, which have been developed jointly by several top universities over the course of the past ten years, are now so effective that it is essentially impossible to copy and modify code without being caught or else doing so much work that cheating becomes unworthwhile.

Pedagogical Rationale and Advice

Collaboration not only helps you get the job done, it teaches you how to explain inchoate ideas to others. This is why we permit discussion of the problems between students. But it is also important that your collaborations be balenced and fair with respect to other students. If you misuse the opportunity for collaboration, you will do poorly in the course.

We do note that many of the course materials will be the similar to those from previous years. This is not because we are lazy. It takes years to develop good problems. In many cases the only reason to change them is to make cheating more difficult. It is far better for you to work on the most excellent problems that we could find.

Accepting the Policy

We understand that most of you would never consider cheating in any form. There is, however, a small minority of students for whom this may not be the case.

If you are feeling desperate enough to consider cheating, please talk to us about alternative strategies for addressing the challenges that are bringing you to this point. There are many ways to resolve issues without taking on personal and ethical risks with potential lifetime consequences!

It is important for you to understand the rules, the penalties, and the rationale for them. In the past, when students are caught cheating they often insisted that they did not understand the rules and penalties. For this reason you will be asked to read and agree to this policy before you start working on any of the projects.