Software Development (CSC 321 2016S) : Handouts
Primary: [Front Door] [Schedule] - [Academic Honesty] [Disabilities] [Email] [FAQ] [Teaching & Learning]
Sections: [Assignments] [EBoards] [Examples] [Handouts] [Outlines]
Reference: [Slack] [Ruby@CodeCademy]
Related Courses: [Rails Tutorial] [CSC 321 2016S @ EdX] [CSC 321 2015S (Davis)] [CSC 321 2015F (Rebelsky)] [CSC 322 2016S (Rebelsky)]
Misc: [SamR] [Glimmer Labs] [CS@Grinnell] [Grinnell] [Issue Tracker]
This document describes my general approach to academic honesty. I may modify it for individual courses to better fit the structure and style of those courses. Please read this document thoroughly and carefully so that neither you nor I have to deal with instances of academic dishonesty. Please also review the Computer Science Department's policy on academic honesty, available at http://www.cs.grinnell.edu/academic-honesty-policy, as that policy is in effect for this class.
An important characteristic of the academic endeavor is the notion that academics (students, faculty, researchers, staff) must follow high standards of honesty in their academic work. One component of academic honesty is that academics must clearly indicate which work (ideas, writing, etc.) is theirs and which belongs to others.
Grinnell's student handbook has included the following statement:
When you study at the College, you join a conversation among scholars, professors, and students, one that helps sustain both the intellectual community here and the larger world of thinkers, researchers, and writers. The tests you take, the research you do, the writing you submit - all these are ways you participate in this conversation.
The College presumes that your work for any course is your own contribution to that scholarly conversation, and it expects you to take responsibility for that contribution. That is, you should acknowledge what is your own individual work and what you have derived from others so that other members of the community can trace the evolution of your ideas.
(Grinnell College 2008-2009 Student Handbook, p. 39; Downloaded from
http://www.grinnell.edu/offices/studentaffairs/shb/includes/ACADEMIC%20POLICIES%20AND%20PROCEDURES.pdf
on 19 August 2009.)
However, there is much more to academic honesty than just making sure to cite work you've used. In particular, you are expected to provide a true and accurate representation of your work in experimental endeavors (e.g., it is academically dishonest to invent or modify experimental results). It is also academically dishonest to aid another in an academically dishonest act (e.g., to provide aid on a no-aid exam, to write a paper for another student).
Why do we care so much about academic honesty? As the Student Handbook suggests, the advancement of knowledge requires that a trail of ideas be available so that successes and failures can be traced backward. More importantly, your own personal integrity should require you to be academically honest.
In Fall 2000, I had my first serious encounters with academic dishonesty at Grinnell. Since that time, I have tried to be careful in spelling out what I expect from my students. What follows are some general expectations.
I expect you to follow the highest principles of academic honesty. Among other things, this means that any work you turn in should be your own or should have the work of others clearly documented. However, when you explicitly work as part of a group or team, you need not identify the work of each individual (unless I specify otherwise). You are, of course, required to make it clear that you worked as part of a group or team, and who the members of that group or team are.
You should never “give away” answers to homework assignments or examinations. You may, however, work together in developing an approach for most homework assignments - design, general algorithms, etc. Except as specified on individual assignments, each student should develop his or her own final version of the assignment. On most written assignments, each student should write up an individual version of the assignment and cite the discussion. On non-group programming assignments, each student should do his or her own programming, although students may help each other with design and debugging. If someone else (e.g., a classmate or class mentor) helps you on an assignment, please include a note in the assignment that indicates that you received such help and summarizes the help you received.
When working on examinations, you should not directly use people (other than me) as resources. In most cases, I will allow you to look up things on the Web, but you should read the examination guidelines to be sure. In most examinations, I will not allow you to ask tutors and mentors anything pertaining to the exam. If you need help, you'll need to talk to me or one of the other faculty members.
If you have a question as to whether a particular action may violate academic standards, please discuss it with me (preferably before you undertake that action).
Most of my teaching involves collaborative work. I believe (and have found) that students learn better when they can consult with each other. There are few better ways to learn something than to explain that thing to someone else. In computer science, collaboration is particularly important because you often encounter small problems that a second set of eyes can easily identify and fix and because “real world” computer science is almost always a collaborative activity. For example, pair programming is a key aspect of many forms of the software design methodology known as agile programming.
In each assignment I give, I do my best to make it clear whether the assignment is intended to be a group assignment or an individual assignment. When it's an individual assignment, I do my best to indicate whether parts of the assignment can be approached collaboratively. If you're not sure, ask.
For most of my courses, almost all non-exam work will permit collaboration. That is, if I don't specify otherwise on an individual assignment, you may assume that you can talk about design together, should code individually, and can help each other look for bugs (in design, code, implementation, whatever).
In my classes, I assign a variety of types of work. Different categories have different expectations.
Laboratories are almost always collaborative. You should generally plan to work on laboratories with at least one other student. When you're stuck on a problem, you should feel free to ask for help from almost anyone (me, the class mentor, another student, a TC, a friend, etc.), but include a note that you received such help. If I ask you to write up a laboratory, you and your partner or partners should do only one writeup. You should not copy text from another group's writeup.
Homework assignments and projects may be individual or group assignments. For either kind, you should feel free to ask for help from almost anyone (me, the class mentor, another student, a TC, a friend). If I give an individual homework, I expect each individual to write up his or her answers individually (no copying!). However, you may certainly ask a colleague to proofread or comment on your answers, provided you cite that person. If I give collaborative homework, each group of students should write and turn in its own single set of answers. However, you can still ask colleagues in other groups to proofread or comment on your answers. (Once again, you should cite them.)
Take-home examinations are always individual work. You may refer to any written materials (e.g., textbooks, Web pages, your personal notes) that you wish. However, you may not talk to anyone (except me or other faculty teaching the same course) about the examination or related issues. I'm very strict about this issue; I want you to avoid all discussion about the exam, not just questions about the material on the exam. You certainly can't ask someone how to do a problem. But you can't ask about other things, either. For example, you may not even ask a tutor or mentor how to use the programming language for the exam. Similarly, you may not ask a colleague how much they've done on the exam or whether they've finished a problem (and you can't brag about finishing a problem either). At times, I may give you permission to talk to the course mentor about an exam, but please make sure that you have explicit permission.
In-class quizzes and examinations are also always individual work. You may not talk during class or discuss the exam with anyone in class. You may ask me questions. My in-class examinations are typically closed-book and closed computer. However, I typically allow students to bring one sheet (8.5 x 11 inches) of hand-written notes to the exam.
Note that computer programming shares with normal writing a need to cite work taken from elsewhere. It is certainly acceptable practice to borrow other code for your assignments. However, you must cite any code that you use from elsewhere, including your own code. You are also responsible for the quality of code you submit and you should note that there's a lot of mediocre code on the Web.
Each piece of code you take from elsewhere must include a comment that points me to the original work, even if you modify the code after copying it. Ideally, your comment would specify all of the following:
These guidelines apply not only to the code you get from the Web and elsewhere; they also apply to code you get from me and from the textbook.
As much as I appreciate a carefully constructed citation, my primary concern is that you clearly state that you have used the work of another. Hence, I will also accept a short note that simply gives the location from which you obtained code (e.g., you can just write “Ideas and code taken from this URL.”)
You need not cite the libraries you use, as the command to include libraries within a program provides sufficient citation.
The advances of the Internet and the World Wide Web have led to challenges in citation. Some seem to believe that it is acceptable for a citation to consist of a URL. However, a citation should provide much more information. Consider what a typical citation to the printed literature contains: Author, Date, Publisher, Title of Article, Publisher, etc. Your Web citations should contain at least as much detail. That is, you should include not just the URL, but also the author of the page (using “Anonymous” or an institutional author, if necessary), the title of the page, the publisher (the site), and the date.
The date is particularly important. Unlike printed sources, which have new editions when they change, electronic resources often change unexpectedly. By including the date the page was accessed and modified, you at least provide some indication of when the ideas you were using were available at the specified location.
Here is a sample citation for my academic honesty policy, using a slight variant of the APA format.
Rebelsky, Samuel (2014). Academic Honesty. Grinnell College Department of Computer Science. Available at http://www.cs.grinnell.edu/~rebelsky/Courses/CSC321/2016S/handouts/academic-honesty.html (Last modified 10 January 2014; Visited 10 January 2014).
Once again, although I prefer careful citations, I will accept anything that shows that you've made an appropriate effort to acknowledge any work that your work draws upon.
These are my typical policies for take-home examinations. They are included to give you a sense as to what I expect.
This examination is open book, open notes, open mind, open computer, open Web. However, it is closed person. That means you should not talk to other people about the exam. Other than as restricted by that limitation, you should feel free to use all reasonable resources available to you.
As always, you are expected to turn in your own work. If you find ideas in a book or on the Web, be sure to cite them appropriately. If you use code that you wrote for a previous lab or homework, cite that lab or homework and the other members of your group. If you use code that you found on the course Web site, be sure to cite that code. You need not cite the code provided in the body of the examination.
Although you may use the Web for this exam, you may not post your answers to this examination on the Web. And, in case it's not clear, you may not ask others (in person, via email, via IM, by posting a “please help” message, or in any other way) to put answers on the Web (or anywhere online or offline, for that matter).
Because different students may be taking the exam at different times, you are not permitted to discuss the exam with anyone until after I have returned it. If you must say something about the exam, you are allowed to say “This is among the hardest exams I have ever taken. If you don't start it early, you will have no chance of finishing the exam.” You may also summarize these policies. You may not tell other students which problems you've finished. You may not tell other students how long you've spent on the exam.
You must include both of the following statements on the cover sheet of the examination.
Please sign and date each statement. Note that the statements must be true; if you are unable to sign either statement, please talk to me at your earliest convenience. You need not reveal the particulars of the dishonesty, simply that it happened. Note also that inappropriate assistance is assistance from (or to) anyone other than Professor Rebelsky (that's me).
Fortunately, there are few instances I've observed in which students seem to violate principles and policies pertaining to academic honesty. But it does happen. And sometimes it happens because students are just careless. I include a few examples to help you avoid such carelessness.
On occasion, students turn in output that does not match the code. Why wouldn't the output match the code? In the worst case, it's because the student could not get the code to work and simply generated the output by hand and hoped that I would not notice. And that's clearly an instance of forging lab results, which is academically dishonest. But there are other reasons. For example, it may be because students have created multiple versions of the same program, and turn in the output from one version with the code for another version. This behavior is unintentionally dishonest. And, once in a while, a student may treat two parts of a problem as separate. E.g., I might ask students to write a procedure that analyzes some data and then to tell me the results of the analysis. There have been instances in which students could not write the procedure, did the analysis in another way, and gave me the analysis without explaining what they did. In some such instances, the Committee on Academic Standing has found the student responsible.
So, make sure that your code and your output match. If you decide to try an alternate approach to finding an answer, clearly document that you have done so.
Modern students rely on the Web for help. As I note elsewhere in this document, that's typically fine. However, for whatever reasons, some students neglect to cite their sources - maybe they forgot that they looked something up, maybe they neglected to write down the URL, maybe they don't want me to know that they needed help. However, in many cases it's obvious to the experienced reader when material comes from elsewhere. And so, whether the neglect is intentional or accidental, I must report the student. Because I worry about such accidental neglect, I do my best to be open about citation. While I like detailed citations, I accept almost anything that acknowledges that a source was used and that points me toward that source.
Finally, there are a few instances in which I see nearly identical solutions to a problem. At times, that's reasonable - some problems have only a few natural solutions and I tend to assume that two similar common solutions were developed independently. But when a problem admits a huge variety of possible solutions and I see similar solutions, or when the solutions I see are not so “natural”, I am likely to find it necessary to report the similarity.
Many years ago (long before I came to Grinnell), the Faculty of Grinnell College decided that the analysis of and response to potential violations of academic policy should be done by a central committee, rather than by individual faculty members. That decision has been reaffirmed a number of times, as recently as Fall 2013. This committee is a subcommittee of the Committee on Academic Standing (CAS). Having a central committee helps ensure that responses to violations are treated uniformly. As importantly, having a central committee ensures that the investigation is not affected by and does not affect the relationship between the student and the faculty member.
Because we rely on CAS to deal with potential violations of academic honesty, faculty are asked to report such potential violations directly to CAS and not to discuss them with students. When I notice such potential violations (e.g., code and output that don't match; answers that are unexpectedly similar to resources on the Web or to other students' answers), I typically follow a two-step process. First, I discuss the potential violation with one or two colleagues in the department to see if they see the same issues that I do. When that happens (and it almost always does), I then report the potential violation to CAS, who then takes over the case. At that point, the case is no longer under my control.
In a few instances (perhaps violations of ethical or behavior standards, rather than strict honesty issues), I may report the violation to the College Hearing Board (CHB), rather than to the Committee on Academic Standing. I follow similar procedures for CHB to those I follow for CAS.
If CAS and CHB do not consider the violation within their purview, I will apply the principles and approaches stated within the CS Department's policy on academic honesty.
You may have noted that this discussion of academic honesty is particularly detailed. There are a variety of reasons for this level of detail. First, as you've probably figured out by now, whenever I write about something, I tend to write a lot about it. And, because I've been writing about academic honesty for more than two decades, this document has gotten longer and longer. But that's not the main reason. There are at least three others.
First, as my colleague Jerod Weinman reminds me, proper citation is an expected professional practice for computer programmers and software designers. If you “borrow” code from elsewhere and don't cite it, you put your project and your company at risk to lawsuits. (Ideally, someone reviews code and when they note that it's based on code from elsewhere, they either seek permission to use the code or insist that the programmers rewrite it.) For example, a proprietary software company cannot legally use pieces of free and open-source code that are released under the GNU Public License (GPL) unless they arrange a separate license.
Second, as my colleague John David Stone reminds me, computer scientists, computer programmers, and software designers may all encounter significant pressures to behave less than ethically. When deadlines are tight and the rewards are great, there are temptations to “cut corners”. We hope that by inculcating good habits now and grounding them in sensible reasoning, we provide you with the habits to behave appropriately, even when you encounter such pressures.
Third , the Computer Science department identifies a disproportionate number of cases of academic dishonesty. I do not believe that this is because students in CS are less honest. Rather, I expect that a combination of issues are at play. For example, it may be easier for us to notice copying. In addition, it may be that there are more opportunities for “valid” copying, but some students are not accustomed to citing when they copy, and so neglect to do so. Other issues are also likely involved.
Whatever the reason, we report a lot. And I hate to have to report such cases. First, I care a lot about my students, and don't like to see them go through the stress of a hearing. Second, it takes a lot of my time to properly document a case, time I'd much rather spend doing work that will improve my courses. Third, as noted above and in the department policy, I want to help students develop good habits and it bothers me when I fail.
Please don't make life more difficult for yourself or for me - take care in all of your work, include a citation whenever you copy, and only rely on others when you are permitted to do so.