This page provides an overview of the types of ways you’ll be engaging in the course, and what types of collaboration are and are not allowed.

Types of Activities and Allowed and Non-Allowed Collaboration

There are a number of different types of activities in this class. Below, I describe the main ones, what kind of engagement I expect, and what collaboration is and is not allowed (and with whom). If you’re ever unsure what’s expected, please don’t hesitate to reach out on CampusWire, email, or in office hours.

  • Textbook and other readings: You are highly encouraged to discuss the textbook readings with others. You are expected to do the readings before the class for which they are assigned, since they prepare you for the lab.
  • Reading checks: Within and after each reading, there will be reading checks or prompts. You can get help from anyone and anything on these reading checks, though I recommend that you make sure that you are able to eventually solve them unassisted.
  • Labs: You should complete all labs. You will often be partnered with another student in class and ideally you will complete the lab with them during class. However, you do not submit labs, they are just practice. If you don’t finish the lab in class, you should complete it yourself to get the maximum practice from them. You are welcome to get help on labs from anyone.
  • Homework: Homework generally consists of larger projects than labs and gives you the chance to creatively problem solve and apply ideas from class. You will often have a partner that you are assigned to work with for the homework. You must follow pair programming practices with them and only one of you will need to upload the assignment to Moodle. You should complete all homeworks, and they will be evaluated for correctness, with feedback and evaluation covering not just whether they work but also code style and design. The only people you should be discussing code with in detail for homework are your partner, me, and the prefect. Any of those people are welcome to look at your code and make suggestions, but you and your partner should write all the code together and yourselves. See the section Academic Honesty Policies for more details on what is and is not allowed on programming homework.
  • Quizzes: In-class quizzes are intended to assess your understanding of the course content up to that point (they are cumulative). They will include conceptual and written code questions. You should not discuss these quizzes with anyone in the class until the quizzes are returned, although you may ask me about them privately via email or CampusWire.

Pair Programming

For some labs and homework this term, we will be using a technique called pair programming. Here’s how it works:

  • You and your partner should be at the same computer, working side by side.
  • One of you is the driver and controlling the keyboard; the other is the navigator.
  • The driver is typing and controlling the mouse.
  • The navigator is watching the driver, pointing out mistakes (in logic or syntax), and thinking through how the current code fits in with the larger program.
  • Both partners should be talking with one another as they go, explaining what they’re doing and making suggestions.
  • Both partners are responsible for what’s happening, and the program and algorithm design is shared. If one of you feels that you’re not able to get your partner to listen to you, please come talk to me as soon as possible.
  • Ignoring your partner’s input is not helpful to your learning or their learning.
  • Roughly every 15 minutes (no less than 10, no more than 20 is a good rough rule), driver and navigator switch. Driver slides keyboard over to navigator. During class, I’ll set a timer and remind you.
  • Follow these same ideas in terms of designing your solution even when you’re not coding. For instance, you might start your session by sharing a sheet of paper where you sketch out how you’ll approach the assignment.
  • These guidelines are very concrete and offer ideas for patterns that successful pair programmers follow. The guidelines were developed based on observing paired programming as practiced in real companies.

Paired programming often makes it easier to catch mistakes quickly, and often helps you to design better solutions for the problems you’re solving. You won’t be able to read the labs ahead of time, but you will be expected to read the homework ahead of meeting with your partner to work on it. However, you should not start coding without your partner (or work on the code at all without your partner); if you do think up an idea and write it down without your partner, go over it together when you next meet. Note that while paired programming can help you catch mistakes more quickly, it won’t necessarily help you finish the assignment more quickly than you would by yourself — in general, though, it will help you to learn more than you would by yourself and can help you to avoid too much frustration.

Best practices

Working together often takes some practice, but a few best practices will help things go more smoothly:

  • Be respectful of each other’s time and work habits: Arrange a time to meet early on (not just right before the assignment is due!). Expect that assignments may take multiple meetings. Set both a start and end time for each meeting. If you’re not done by the end time, decide together whether to keep going or meet again another time. When you’re together, be focused on the project (not on your phone/email/etc.), but also occasionally take a break. Sometimes five minutes is enough to get you re-energized.

  • Work as team: Encourage and support each other as you’re working out how to approach the project or how to code up a particular method. Try to avoid being negative about mistakes or thinking about one part of the code as “yours” and the other as “theirs.”

  • Communicate: The more you communicate, the better this is likely to go. Talk through what you’re doing out loud, and ask questions if you don’t understand what your partner is saying or doing. Ask your partner if they’d like to drive or ask if your partner would you mind if you drove for a bit (when it’s a natural point to switch).

  • Assume good faith and be understanding: Sometimes, you’ll miscommunicate or get frustrated; sometimes your partner will. Try to work through issues and assume that both people want to learn something and get the project done. Pair programming isn’t necessarily going to make things faster, but if you view it as an opportunity to learn, you’ll likely get a lot out of it.

  • Don’t talk down: There will likely be points where you understand more than your partner, and points where your partner understands more than you. You and your partner may also have different levels of confidence. Explaining ideas and/or syntax to one another will help both of you learn. Don’t spoil the experience by berating or shutting down your partner, and remember to always be respectful of one another.

  • As a member of a pair, it is your responsibility to contribute equally and fully to the final product. For example, it is not acceptable to let your partner “finish the assignment” without you and put your name on it before submitting it, or work on significant portions of the assignment without you, or any permutation of this. In general, when pair programming, you and your partner should always work on the assignment at the same time and in the same physical location.

  • As a member of a pair, it is your responsibility to be able to explain and/or reproduce your solution individually, if asked. If you do not understand the solution, then you did not contribute fully to the assignment, and this will hinder your learning of the course material and make it difficult for you to do any necessary revisions.

Logistics for this class

You’ll stay with the same partner for one to two weeks, and then fill out a feedback form and get assigned a new partner. You have the option of working on your own; I encourage you, though, to choose to participate in pairs because I think you’ll often have more fun and develop a deeper understanding of the material.

A few logistical reminders:

  • Write both students’ names in the comments at the top of your program.
  • Submit one copy of your code via Gradescope.

What if we can’t work together?

If you run into less serious problems working with your partner and can’t resolve them among yourselves, please come talk to me and I will try to help.

I hope it won’t happen, but occasionally, something happens that means working with your partner is impossible. Maybe they haven’t responded to any of your emails, or don’t show up for meetings. What should you do if this occurs?

  • Talk to me, either in person or over email. You can do this either after attempting to settle things with your partner, or as a first step if you do not feel comfortable going to your partner first. What will talking to me accomplish?
    • Help you gain perspective on the situation.
    • Help strategize talking points with your partner.
    • If necessary, a conversation between you, your partner, and me to try and resolve the issues.
    • If all else fails, you can complete the project alone. You do not need my permission to do this. You should comment all of that code to indicate it was done with your partner (e.g., at the top of each method coded jointly, state “This method created with .”). If you and a partner do split, I’ll reach out to both of you to see what happened. Generally, you will not have the opportunity to be paired with someone new until the next time others in the class switch partners.

Other Collaborations and Ways to Work Together and Get Help

There are lots of resources to get help. If you have questions, please consider any or all of the following:

  • Prefect sessions: Our prefect holds prefect sessions at designated times for you to work through ideas collaboratively. Prefect session times are listed at the top of Moodle.
  • Prefect 1:1 tutoring: Our prefect has some 1:1 tutoring time available; our prefect can work a maximum of 10 hours per week total. Contact the prefect to schedule this - contact information is at the top of Moodle.
  • Lab assistants: The lab assistants are available at a variety of times to help with homework or labs. They’re great at helping you understand bugs or think through ideas. Information on the lab assistant schedule and how to access help is available at the top of Moodle.
  • Class time: There’s time for question and answer during every class. This time is usually best for questions that might be relevant to multiple people, like difficulty understanding a concept or wanting to know about a particular snippet of code from the reading. It’s less good for detailed help debugging your code unless we’ve designated that class time as an office hours time.
  • Office hours: Office hours are available throughout the week and I’m happy to talk to you about class concepts, activities, homework, or anything else. With code, I can help you regardless of where you’re currently at, from brainstorming about approaches to a problem to testing and debugging. Some office hours are by appointment and others are drop in, where you may need to wait while I talk with someone else. Look at the top of Moodle for a list of office hours times and instructions on how to access them.
  • CampusWire: There is a CampusWire channel that is a great way to communicate with everyone in the class regarding a homework or lab. If something is confidential or you’re worried it gives away too much about a homework (or involves more than a line or two of homework code), please privately message me on CampusWire or email. Otherwise, you’re welcome to post to everyone. CampusWire questions are often answered quickly because everyone can answer them. I typically check CampusWire a minimum of twice per week day (once in the morning, once in the afternoon).

Academic Honesty Policies

We’ll be doing a lot of collaboration in this course and using online resources is an important skill in computer science. Please look at the information above to know about how you’ll be collaborating for each part of this course. However, plagiarism is not the same as collaboration, and plagiarism violates our academic honest policies. In particular, you may not search for code to solve your homework problem on the internet (including but not limited to explicitly searching for exact homework solutions), or post online about any homework problem anywhere but our class forum.

StackOverflow (and such)

Learning how to search the web for solving errors or performing simple programming tasks is a valuable skill in computer science. However, it’s sometimes difficult to tell the difference between what is allowed and not allowed when solving homework. In addition, there are a lot of bad solutions online, or solutions that are way beyond what you should be learning to use in class, so I generally recommend only searching online if you can’t remember how to do something that we’ve already learned about (though checking the readings might still be better). Sometimes, it’s fine to use material from external sources like StackOverflow, 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.

For example, looking at an example of a for-loop in Python on StackOverflow may or may not be allowed depending on the assignment. If the assignment is “implement a for-loop”, then looking on StackOverflow for a for-loop would not be allowed. However, if the assignment is “implement insertion sort” and you can’t remember exactly how the for-loop syntax works, it might be allowed to look on StackOverflow, though it would be better to use the textbook and the reference sheet that you’ve made. What would absolutely not be allowed would be to look up and copy a Python implementation of insertion sort from StackOverflow or any other site, since the point of the assignment was for you to implement it yourself.

For every assignment that you submit, whether it is pair programmed or individual, it is your responsibility to be able to explain and/or reproduce your solution individually, if asked. If you do not understand the solution, then you did not contribute fully to the assignment, and this will hinder your learning of the course material (and may result in lowering your grade on that particular assignment).


If you get help from someone or somewhere, you should cite it with the following format:

Method to calculate the first ten prime numbers in a series.
Thanks to Mary Smith for helping me fix the logic in the
while loop in this method.


Here are some examples of behaviors that violate our academic honesty policies:

  • Modifying someone else’s code and putting your name on it. That code might be your classmate’s, from a previous student, or found on the internet, and it’s still plagiarism if you make some changes. You should always be either starting from scratch or starting from files that I provide, not working off of someone else’s solution (or your solution from a previous course). Copying even one line of code is plagiarism!
  • Having a friend debug your code for you and then turning in the revised code.
  • Looking at a friend’s code (or code on the internet for a similar purpose) and then using what you see to write your own code.
  • Looking at code from someone in class and then reproducing it verbatim in your own files.
  • Asking a homework question on an external online forum (or searching for someone else asking a similar question) and turning in the answer as your own.
  • Directly copying code out of the book, or relying heavily on book code and not citing your use of it in the comments when the assignment does not specifically state that you may do so.

Specific Scenarios

Adapted from Academic Integrity at MIT. Note all of these scenarios assume the students aren’t assigned as pair programming partners and don’t have a pair programming partner (if they did, they should be working with their partner).

Example 1

Alyssa and Ben sit next to each other with their laptops while working on a problem set. They talk in general terms about different approaches to doing the problem set. They draw diagrams on the whiteboard. When Alyssa discovers a useful Python technique, she mentions it to Ben. When Ben finds a StackOverflow answer that helps solve an error (but doesn’t have code directly relating to the problem set), he sends the URL to Alyssa. 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. INAPPROPRIATE.

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

Example 2

Juan already finished the problem set, but his friend Boris is now struggling with a nasty bug. Juan sits next to Boris, looks at his code, and helps him debug (but doesn’t do the debugging for him). OK.

Juan opens his own laptop, finds his solution to the problem set, and refers to it while he’s helping Boris correct his code. INAPPROPRIATE.

Example 3

Yun-En had three problem sets and two quizzes this week, was away from campus for several days for a track meet, and then got sick. Sven feels sorry for Yun-En and wants to help, so he sits down with Yun-En and talks with him about how to do the problem set while Yun-En is working on it. Sven already handed in his own solution, but he doesn’t open his own laptop to look at it while he’s helping Yun-En. OK.

Sven opens his laptop and reads his own code while he’s helping Yun-En. INAPPROPRIATE.

Sven has by now spent a couple hours with Yun-En, and Yun-En still needs help, but Sven really needs to get back to his own work. He puts his code in a Dropbox and shares it with Yun-En, after Yun-En promises only to look at it when he really has to. INAPPROPRIATE.

Example 4

Amir and Prajna both worked on their problem sets separately. They exchange their test cases with each other to check their work. 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.

These are just some examples of academic dishonesty - if you’re unsure whether something is permitted, please ask.

You also may not share exams or solutions to exams from this class with anyone outside of the class, or ask anyone who has taken CS111 in the past to look at their old exams or assignments.

The above policy is borrowed from Anna Rafferty and Aaron Bauer