Understanding the Spirit of the Honor Code The Computer Science department takes the honor code very seriously, and we expect our students to do the same. The digital nature of our work makes it easier to copy the ideas and work of others. It also makes it easier to catch such appropriated work. Because of this, at any honor code university, you will probably find a disproportionate number of cases attributed to programming-centric classes. We are no exception here at GMU. The purpose of the GMU CS Honor Code Policy is to give you the confidence to learn the material presented in your courses without the concern that you might accidentally violate the honor code. Our policy is not actually separate from or an addition to the university's honor code policy. This document is intended to clarify how the honor code applies to the field of Computer Science. Although each professor sets boundaries that are appropriate to his or her particular class, the departmental policy provides general guidelines for foundational understanding which will hopefully avoid any student misconceptions. Instructors who have determined that extra resources, interactions or collaborations are permitted will announce these to their classes as appropriate. There are times in our department's courses when collaboration is appropriate (and quite beneficial!), but there are also times where individual work is necessary to ensure that all students have truly mastered the course materials. In general, any graded work must be produced individually unless explicitly stated otherwise. This means that for any written homework or programming projects, students should complete the assignment solely on his or her own efforts. Looking up solutions to similar problems or parts of a problem online, solving problems in small groups, or asking friends/roommates/classmates for hints or ideas about how to solve a program is strictly forbidden, because obtaining this type of assistance circumvents the purpose of the assignment. Students need to learn to generate solutions on their understanding alone. Learning to program is a process that requires practice; merely reading and/or copying the code of others does not prepare students to write their own. Computer Science is much more than just programming; therefore obtaining assistance on other written work such as by-hand calculations is also not allowed. Instructors cannot appropriately assess student knowledge and understanding if students have received help (especially unknown help) from other sources. Obviously, students should not share their actual code or final solution of graded work, but the planning stages are also an important part of identifying a solution. If a student can write out a pseudo-code solution to a program first, all that is left is the (relatively mundane) process of transferring the solution into some particular programming language. The planning phase, where you decide which programming construct or data structure to use, must also be your own work. In fact, this planning stage is typically the most important part of generating a solution. For this reason, our policy states that students may not receive help in designing or choosing aspects of data structures or algorithms (except from approved sources, such as an instructor or GTA). Similarly, testing and debugging your program are also critical steps in the creation of a programming solution. Therefore, our policy forbids obtaining unapproved help in determining whether a program is correct, receiving informal assistance to modify a program or correcting specific errors. Learning to complete each of these tasks on one's own is an important part of understanding the process of programming and program design. Most programming courses use a sanctioned discussion forum (such as Piazza or Blackboard) where you can ask general questions about tool installation, accessing certain class resources, and - if the instructor allows it - specific questions about a project. It is safe to ask questions that do not relate to the assignment itself, such as the setup and usage of the tools that you might use when solving tasks. When in doubt, you should always direct your questions to the course's instructors and assistants - they will know the appropriate level of assistance. There is never a problem with asking the question. At worst, you may be told that one of the goals of the assignment is for you to figure it out for yourself. What is the role of collaboration in computer science classes? Working in pairs or groups can be a valuable way to learn material, and the professors are aware of the benefits for learning in this manner. On a per-class basis, certain materials can be made available for discussion. Your professor might be able to provide in-class examples or additional supplements to lab sessions that could be discussed in study groups. If homework questions aren't sampled from the text book, there may be sets of practice problems available there as well. Studying for tests together via flash cards, posing sample questions and working through these examples that are outside the corpus of assigned work are great ways to further your understanding. Finding appropriate ways to study and learn together can further your education. However, you must ensure your professor has formally granted permission for these group activities ahead of time. Although such activities might not be part of your calculated semester grade, this extra effort should have a very positive effect on your grade. Acceptable group activities are a great way to improve, whether your understanding of the material is stronger or weaker than your group members. Be aware of the boundaries for these collaborations in order to avoid discussions devolving into sessions in which the group ends up solving the next assignment. Keep in mind that Computer Science classes are often heavily project-based. Last-minute efforts do not pay off. This means that you should be putting in regular effort throughout the semester, honing your skills and crafting your solutions as you go. Waiting until the last moment when there is not enough time to ask questions or draw on your experience and knowledge rarely succeeds. Such procrastination can lead to a last-minute realization that it's too late to complete a project on time. It may increase the temptation to look for a solution elsewhere -- online, from a friend or some other inappropriate source. The purpose of all of our courses is for the students to learn the materials and become self-sufficient. If it's already too late to achieve that goal for a specific project, the last thing you should do is jeopardize the entirety of your academic career by copying work from others on a single assignment. The penalty for violating the honor code will most assuredly be significantly worse than a late penalty or deductions for the portion of the assignment you did not complete. Do your best, learn what you can, and eventually you'll be rewarded with the fruits of those labors. Hopefully, after reading the formal listing of do's and don'ts as well as this essay, you will have a better understanding of the purpose and application of the honor code in your Computer Science classes. Your professors want you to become self-sufficient programmers and computer scientists. You should always assume that the sharing of material is not allowed unless and until the professor explicitly states otherwise. If you are unsure about a specific situation, you should always contact the course instructors and assistants for guidance. We have a rigorous program that curates the graduates we intend to produce. The application of the honor code is one way to ensure we all succeed in reaching these goals.