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:
- Clarifying ambiguities or vague points in class handouts, textbooks, or lectures
- Discussing or explaining the general class material
- Providing assistance with Java, in using the system facilities, or with editing and debugging tools
- Discussing the code that we give out on the assignment
- Discussing the assignments to better understand them
- Getting help from anyone concerning programming issues which are clearly more general than the specific project (e.g., what does a particular error message mean?)
- Suggesting solution stragegies
Here are some things that are inappropriate:
- Copying files or parts of files (such as source code, written text, or unit tests) from another person or source
- Copying (or retyping) files or parts of files with minor modifications such as style changes or minor logic modifications
- Allowing someone else to copy your code or written assignment, either in draft or final form
- Getting help that you do not fully understand, and from someone whom you do not acknowledge on your solution
- Writing, using, or submitting a program that attempts to alter or erase grading information or otherwise compromise security
- Copying someone else's files containing draft solutions, even if the file permissions are incorrectly set to allow it
- Lying to course staff
- Reading the current solution (handed out) if you will be handing in the current assignment late
- Copying prose or programs directly
- Giving copies of work to others
- Coaching others step-by-step
Here are some gray areas:
- Reading someone's code for clarity or bugs, after you have completed your own
- Helping with debugging
- Looking at someone's prose or program but thinking about them and writing your own
- Following someone's advice or instructions without understanding them
- Many others
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
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.
- Unsolicited Confession. If you seek us out and admit that you have cheated (or think that you may have inadvertently crossed the line but are unsure), we will be lenient and understanding.
- Solicited Confession. If you have cheated and we come to you and ask if you have, and you then freely admit it, we will take that into consideration.
- If you do not admit that you have cheated and have done so, we will provide our evidence. You will at the very least fail the class. The dean may also impose more much more substantial penalties.
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.