Collaboration Policy and Academic Honesty

The following content is adapted from the policies written by Aaron Bauer (in turn adapted from MIT’s Academic Integrity policy) and Jeff Ondich.

General

Just like when you write a paper for a class, any code you use or adapt needs to have its source cited.

The programming assignments in this class are meant to help you wrestle with and grow to understand the material. Just like you wouldn’t go to the gym and ask a trainer to lift weights for you (I hope!), you shouldn’t ask the internet or other students (or me) to do your assignments for you. The struggle is where your personal growth lies. Don’t cheat yourself, and don’t cheat your classmates, either.

Many assignments will say that you can work with a partner. This is a reflexive relationship, and applies to the entire assignment, even if there are multiple individual programs to write. You can go as far as to look at your partner’s code, but you should never be in possession of a (paper or electronic) copy of their code. Additionally, you are expected to work together towards a solution, not be looking at the code of someone who has already completed their assignment.

Note: Any homework assignment revision must be an individual effort. You can discuss fixes at a high level, but after the initial homework submission, you should not be looking at each other’s code.

Aside from your partner, you should never even lay eyes on another student’s code. You are okay to use external sources, like StackOverflow, for minor queries (e.g., how to write a for loop in C), but only with proper attribution, and only if the assignment allows it. In particular, if the assignment says “implement X”, then you must create your own X, not reuse one from an external source. One way to think about this is that if you know how to implement what you want in pseudocode (or Python, etc.) but you are struggling with C, it’s probably fine. If you’re finding yourself tempted to search for higher-level topics, you probably shouldn’t be.

Academic Integrity At Carleton

You are expected to be familiar with Carleton’s Academic Integrity policy, and to follow it for all of your work in this course and others. Specific examples of what that means in the context of this course follow on this page. If you have any questions, please reach out to me!

Example scenarios

Example 1

Alyssa and Ben sit next to each other with their laptops while working on an assignment. They talk in general about different approaches to doing the assignment. They draw diagrams on the whiteboard. When Alyssa discovers a useful function in the C standard library, she mentions it to Ben. When Ben finds a StackOverflow answer that shows how to use the return value for that C-standard-library function, he sends the URL to Alyssa.

  • In either case: both need to include the StackOverflow link in comments in their code.
  • If they’re partners: OK.
  • If they’re not partners: still OK.

As they type lines of code, they speak the code aloud to the other person, to make sure both people have the right code.

  • If they’re partners: technically OK, but murky. (Keep in mind, your code should still by physically typed by you.)
  • If they’re not partners: INAPPROPRIATE.

In a tricky part of the assignment, Alyssa and Ben look at each other’s screens and compare them so that they can get their code right.

  • If they’re partners: OK. (But again, you should not have character-for-character identical code.)
  • If they’re not partners: INAPPROPRIATE.

Example 2

Juan already finished the assignment, working alone, but his friend Boris is now struggling with a nasty bug. Juan sits next to Boris, looks at his code, and helps him debug.

  • If Boris has been working alone: OK. (This makes them partners, so Juan should also add a note on Moodle that he’s now working with Boris, or resubmit with Boris listed in his .c files if his deadline hasn’t yet passed.)
  • If they’re not partners: INAPPROPRIATE.

Juan opens his own laptop, finds his solution to the assignment, and refers to it while helping Boris correct his code.

  • If Boris has been working alone: OK, but it’s getting murky. (They’re partners now, but you are expected to work together, not just have one student do all of the work.)
  • If they’re not partners: INAPPROPRIATE.

Juan is having trouble explaining, so he shows Boris his screen to copy the relevant lines of code.

  • If Boris has been working alone: INAPPROPRIATE.
  • If they’re not partners: INAPPROPRIATE.

Example 3

Sven had three assignments and two quizzes this week, was away from campus for several days for a conference, and then got sick. He’s already past the deadline for the assignment and has made almost no progress. Miyeon feels sorry for Sven and wants to help, so she sits down with Sven and talks with him about how to do the assignment while Sven is working on it. Miyeon already handed in her own solution, but she doesn’t open her own laptop to look at it while she’s helping Sven.

  • If Sven has been working alone: OK. (Sven should be sure to list Miyeon for high-level discussions in his .c files.)
  • If they’re not partners: still OK. (Sven should still list Miyeon for high-level discussions.)
  • If they’re not partners, and Miyeon worked with someone else: still OK.

Miyeon opens his laptop and reads her own code while she’s helping Sven.

  • If Sven and Miyeon had both been working alone: OK, but it’s getting murky. (They’re partners now, but you are expected to work together, not just have one student do all of the work.)
  • If Miyeon already worked with a partner: INAPPROPRIATE.

Miyeon has by now spent a couple of hours with Sven and he still needs help, but Miyeon really needs to get back to her own work. She puts her code in a Dropbox folder and shares it with Sven, after Sven promises to only look at it when he really has to.

  • In any situation: INAPPROPRIATE. (You should never be in possession of another student’s code.)

Example 4

Louis and Jill worked together on the first part of the assignment, but then Jill decided to work alone for the second part. Louis talks to his roommate, Ming, about the second half of the assignment, but their discussion is limited to the lounge whiteboard.

  • If Ming was working alone: OK. (This is high-level, not referencing their own code.)
  • If Ming was working with someone else: still OK.

Louis and Ming continue their conversation while pulling out their laptops, and start to talk about the code they’re writing, but don’t look at each other’s screens.

  • In any situation: INAPPROPRIATE. (Your partner is for the entire assignment, not just part of it; Louis already has a partner, and thus shouldn’t talk code-level details with anyone else.)

Louis shows Ming something he wrote for this second half of the assignment, but doesn’t show him any of his work with Jill.

  • In any situation: INAPPROPRIATE.

Example 5

Amir and Prajna both worked on their assignment separately. They exchange their test cases with each other to check their work.

  • In any situation: INAPPROPRIATE. (Test cases are part of the material for the problem set, and part of the learning experience of the course. You are copying if you use somebody else’s test cases, even if temporarily.)

General Guidelines

  • Overall, you need to understand the code you write and the code you submit.

  • Code provided in the textbook, by your professor, or with official documentation (e.g., an example of strcpy on cplusplus.com) are generally fair game, but it’s a good idea to add attribution anyway (especially if the code is from documentation).

  • If in doubt, aim for over-attribution. This includes documentation links, that the code came from your professor, that a line of code came from an assignment in your intro class two terms ago, and you ported it to C, etc.

  • If you have found something useful online but you find yourself copying more than 3-4 lines, step away for a bit and think about whether you can write it yourself.

  • For tools like StackOverflow and ChatGPT, there is a big difference in being able to generate the code (and thus detect iffy solutions) and looking for where to start. As mentioned above, try to limit your use of external tools to, at most, determining how to do something in C, rather than how to do it at all. If you’re stuck on where to start, check the Samples page, go to office or lab hours, or perhaps ask for a high-level hint (e.g., which day of class or textbook section is relevant) on Slack.

  • If you think you’ve seen something you shouldn’t have, follow the “Gilligan’s Island rule” (borrowed from Stacey Truex). Close the page, walk away, watch 30 minutes of something online (e.g., reruns of Gilligan’s Island), and sit back down without looking back at whatever you shouldn’t have seen. If you can write the code yourself now and understand it, you’ve learned something, which is the whole point. If you can’t, don’t look at that source again. Go back to your notes, see if anyone else had posted any similar questions on Slack, or check with your professor.

  • What if you saw something you shouldn’t have, walked away, managed to write it again, but don’t feel like you’ve actually understood it? Come talk to your professor, and we can talk through what you wrote to make sure you do understand it, and learned from it.