Given that I assume my students exercise integrity in all their behavior, you might wonder why have a page about cheating. By definition, beginning students have little experience with computer programming. Thus, naive intuitions and analogies will sometimes lead them astray. As a student at a Christian liberal arts institution such as Westmont, it is important that you think carefully about what it means to cheat on programming assignments and exams. This involves reasoning about ethics, society, technology, learning and perhaps the meaning of life.
Humans regularly make moral choices in novel contexts based on analogies with familiar situations. The efficacy of this practice depends on the respective features of the two contexts together with the correspondences established in making the analogy. For example, most students in introductory computer science courses have had more experience writing research reports in high school than they have had writing programs. Among other things, writing papers involves: reading things in sources, acknowledging those sources in references or footnotes, and typing words. Writing programs certainly involves: typing words, some of which beginning students will need to look up in a reference and, in my introductory courses, these sources need to be acknowledged. At this level, the analogy between writing research reports and programs works; the fact that it is wrong to copy words without acknowledging sources in a research report accurately suggests that it is also wrong when writing a program. However, several aspects of the software development context can muddle the analogical reasoning if we are not careful.
Consider first the ease of copying. It is a trivial matter to copy electronic information. This is true whether the information is a picture, a song, a movie or a computer program. Just as the ability to copy music or movies with the click of a button (and with minimal time costs) does not justify the practice, neither does the ability to instantaneously copy another program justify doing so instead of going through the cognitive steps necessary to actually conceive, type and debug the program. Although most people recognize the truth of these claims, the trivial requirements to make these copies does tend to influence the willingness of some to make such copies. Becoming aware of this tendency is a first step toward refusing to succumb to the temptation.
In the old days, if students wanted to cheat on homework they had to copy from someone's paper by hand. The time it took to copy the work was not that much less than the time it took to do the assignment outright. Today, the time required to make an electronic copy is insignificant and the would-be cheater perceives a significant advantage (in terms of time and effort) relative to actually doing the work. However, this brings us to the crux of the matter. The point of taking a class is to learn some body of content and skill. If you cheat, you are defeating that purpose and really cheating yourself. Which is truly worse? (a) Getting a poor grade on an assignment because you didn't start early enough, you didn't understand the assignment, or you didn't read the material. Or, (b) getting a good grade on an assignment that you could not reproduce on an exam. I submit the latter is worse than the former because in both cases the person has failed to learn the material but in the second case they have also created a lie, which must me maintained and extended on the next assignment or exam. There is no future in deceiving yourself or others.
So let us acknowledge that the trivial nature of copying a program in comparison to the effort of writing it yourself provides a strong temptation to cheat when faced with an assignment deadline and either a blank or buggy program. To help you fight such a temptation, I throw out each student's lowest assignment score from the semester. Thus, if you are stuck at the last minute (and you did start early, right?), it is foolish to cheat on a single assignment and risk failing the entire course (see consequences below), when you could instead write-off the assignment and alter your practices on future assignments.
Ultimately, I'm hoping you will acquire the skills that will enable you to take a client's ill-defined problem, refine the problem statement, design a computer program that would address the problem, implement a prototype of the design and work with the client to refine the solution, etc. This will typically involve the use of many software tools and libraries written by others and perhaps even some snippets of code you find on the Internet.
In your mind, you need to maintain a clear distinction between the particular functionality required of an assigned program and the process by which you create the program that manifests that functionality. Students might think that all that matters is that they turn in a program that satisfies the requirements and that how they pulled the pieces together is unimportant. Indeed, this impression partially reflects practices in the open-source community. Is this not how software professionals frequently operate? Maybe, but I am not writing this for software professionals. Why are you taking one of my introductory classes? I assume it is because you want to learn how to design and implement programs. (If that assumption is incorrect, I strongly suggest you withdraw or talk to me during my office hours.)
Furthermore, I will grant that the days when a programmer would sit down and write an entire program without making use of code written by others have long since passed. Thus, even in school programming assignments, the student must often build upon preexisting code that is either provided by the instructor or found through searching. There is an understandable confusion between having a fact stored in one's head and retrieving it using Google in the same time it takes to formulate the question. Is not someone's value to an employer based on the information they can bring to bear on a problem regardless of how they retrieve the information that is brought to bear? This is undoubtedly true in some contexts; but guess who wrote the Google search engine -- programmers who were able to actually write code, not just assemble other people's code like so many Lego blocks.
Professors want their students to be able to write their own code from scratch. This is the fundamental skill that computer science students must acquire. Without it, students would be relegated to what amounts to writing essays by assembling sentences from published sources. Keep in mind that the assignments students encounter in introductory courses (and many of those in advanced courses) are not novel problems of interest in their own right but are designed and scoped for the purpose of inculcating a particular lesson, skill, or concept. The professor is not asking the student to write a given program out of a desire for the program itself, but in hopes that the student will eventually learn to write other programs that have not previously been conceived.
I claim that most cheating takes place because of a confusion over the values placed on grades. When people believe that grades have intrinsic value, instead of only instrumental value, they are on the road to cheating. The function of a grade is to quantify a particular student's level of mastery over some body of content or skill. As such, the grade has no intrinsic value in and of itself, whereas learning the material arguably does.
Unfortunately, even the instrumental value of grades can be quite high. I recognize that for many students, academic merit scholarships are dependent on maintaining a certain GPA. But I ask you to reflect on the purpose of a scholarship. Its purpose is to support your education, or growing and learning -- at a liberal arts institution, this amounts to one's flourishing as a human. Do not let the need to hold onto a scholarship undermine its very purpose. Go ahead and risk the challenging courses -- just be sure to work very diligently. If you are not ready to work hard, then you're not ready for an education!
First and most obviously, copying an assignment from another student or source is cheating. The mechanism used to copy is irrelevant; copying a file as an attachment, cutting and pasting a program or fragment of a program, or typing from a screen shot image, printout, another computer's screen, or by dictation -- all of these are cheating. Likewise, it does not matter whether the source of the copy is a willing or unwilling peer, or a website on the Internet.
Second, neglecting to appropriately acknowledge help that you have received, -- or help that you have given -- constitutes cheating. An appropriate acknowledgment itemizes, by person or source and by topic, help received and help given. If no help was given or received, then your acknowledgment must state this explicitly.You do not need to include acknowledgments to language reference sources unless you used example code fragments.
Third, if after receiving help you still do not understand the problem on which you were stuck, you are cheating even when you properly acknowledge the help received. For example, consider the analogous situation of writing a research report. Suppose you included a famous scholar's quotation, which you did not understand at all but which sounded nice in your paper. The problem with this behavior is apparent simply by imagining a conversation with the instructor in which you are asked to explain what the quoted author is trying to say and how it relates to your paper. If you didn't understand the quotation in the first place, the conversation would go nowhere fast. If you are unsure, give yourself (or ask a TA or Instructor for) additional problems to work through. Remember that assigned exercises are starting places for your learning process -- you may need to complete more than the ones given in order to fully understand the material.
In summary, make sure that the work you submit is your own. You are encouraged to get help from your peers, but you must acknowledge such help -- both received and given -- and you must understand the issue on which help was received. Except where explicitly provided or allowed by the instructor, you must not copy any portion of code for the exercises or projects.
Even if we assume that you are not intending to cheat, the following suggestions may be helpful in avoiding inadvertently crossing the line between appropriately collaborating and cheating. This is true especially when students are working together in a group. Students should consider two facets regarding seeking and giving help without cheating.
If you find yourself needing help, first and foremost, cultivate and fix in your mind a desire to understand the problem and acquire the skill to solve the problem. If you take your eye off the ball and start thinking in terms of getting the assignment finished, you will be much more susceptible to the temptation of a quick but dishonest solution. Do not seek someone else's solution. Figuring out how to do the problem will not be easy (otherwise you would not perceive the need for help), but it is the only way to actually learn the skill or material.
Having clearly established your priorities, next formulate a question that characterizes, in detail, why you think you need help. By this, I mean identify the specifics of what is stumping you and use those specifics to formulate a question that, if answered, would get you moving again. Something of the form, “What is the solution to the problem?” technically is a question but does not specifically address the obstacle being faced. This step can be very challenging, but extremely effective. In fact, having articulated a specific question, often the answer presents itself or you will realize where you can look for the answer.
If you are still stuck after formulating a question, find a peer, TA or Instructor and ask them the question you generated. However, be prepared to be answered with another question or to go through the process again based on the answer. Do not end the conversation until you understand whatever help is provided. Accepting help without understanding is cheating. Be certain to make note of the help received in your acknowledgments.
If you find yourself asked to provide help to someone, first and foremost, cultivate and fix in your mind a desire on behalf of the student asking the question, that as a result of their interaction with you, he or she will have come to understand the problem and will have acquired the skill to solve the problem. You must resist the temptation to simply provide the answer; that would be quick and painless for you, the helper, but is essentially useless to the welfare of the student asking you for help. Do not share your code with anyone.
When asked a question on an assignment, make sure that the one asking has gone through the steps above. If they have failed to cultivate a desire to understand the problem and acquire the necessary skills, then do not waste your time with them. If they have not asked an appropriately articulated question, then tell them to come back when they have one. Before answering a well-formed question, determine if the answer would give-away too much. That is, ask yourself if the question is sufficiently specific. If you are not sure, then it probably needs to be narrowed. Finally, faced with a specific genuine question, provide a response (either provide an answer or reply with another question). Be certain to make note of the help given in your acknowledgments.
The following consequences are either inherent in the nature of cheating behavior or adopted based on the importance of learning and walking in the truth. At its foundation, the academic adventure is all about searching for, discovering, knowing and loving the truth.
 As in every area of life, I expect that you will conduct yourself honestly within the context of your classes. That is, I am assuming that students are not intentionally cheating and attempting to deceive their instructors. Persons for whom this assumption is invalid will probably not be moved by this or any other essay. Regardless of which category you fall into, you are expected to have read and understood the Plagiarism Policy as part of Westmont's general policies on Academic Integrity. Those documents and policies serve as extensions of my own policies as set forth in this page, related pages, and my course syllabi. ↩
 I've often thought it would be interesting and amusing to create a mashup of words, phrases or sentences from a variety of movies in order to communicate some particular message. However, without the non-verbal information, a mashup written essay probably would fail to convey the cleverness involved in the hypothetical video. Truly wonderful things can be created with mashups. Check out My Favorite Color, by Kutiman; but note that Kutiman does provide citations to the sources. When you're able to create software collages of a comparable quality to what Kutiman is doing with music (and citing your sources of course), you will have my deepest admiration. Until then, focus on learning to write code as called for by the problem at hand. ↩