Collaboration is highly encouraged in CSE 333 and you are given the option of completing almost every assignment with a partner (exceptions: hw0, midterm, final).
hw<#>-final
tag on it.
Your hw files will then be uploaded for you from that
git commit to Gradescope.
You will need to submit to a Google Form for each hw to
let us know which repo you want us to upload from and who your
partner is so we can add them to the submission.
Working with a partner does not automatically guarantee a smoother and easier workflow! A common misconception is that working with a partner means that your workload get cut in half. This won't be the case, but that's okay! If each of your workloads ends up at less than what it would have been working individually, then that's a win! The main benefits with working with a partner is the ability to discuss your approach and share code without worrying about violating any academic conduct rules. For 333, in particular, some major gains should be in the reduction of debugging time and catching style issues.
Clear and frequent communication is vital to the success of working with your partner. Part of this means establishing expectations early, which might take the form of a short conversation/discussion. Potential topics to discuss include work approach, what your schedules and priorities are for the quarter, approaches that have worked for you in the past, comfort level with topics and tools, submission handling, and late day usage. Remember that you're not trying to impress your partner; being realistic will allow you to formulate a plan that will work for both of you. Expectations do not need to be an exhaustive contract between partners, but having some communication before beginning can alleviate later frustrations and misunderstandings.
The assignment specifications for this course can be quite long with lots of information and tools that can be easy to miss. It is recommended to read the specs on your own first, taking notes on key aspects or areas of confusion, and then discuss with your partner. This is useful for checking each other's understanding prior to writing any code and can save time in the long run.
When establishing tasks for a work session or dividing work among partners, the more specific you can be the better. As opposed to saying your task is to "finish the assignment", try identifying specific functions/files/features you will work on implementing. This can increase efficiency.
Many of the assignments in this class involve memory manipulation. We highly recommend drawing memory diagrams to assist in debugging assignments (see Lecture 3 for an example). When working with a partner, memory diagrams are a useful technique to convey your thoughts and can help illuminate misconceptions or incongruities between your intent and implementation. You will likely be asked to draw these by staff members in office hours, so best to get in the habit!
Regardless of the approach you and your partner follow, taking breaks from working can increase your productivity and reduce frustration. With pair programming in particular, checking in with your partner while you work and taking breaks as needed can greatly improve the experience.
If you are working without your partner present, write down any question or uncertainty that crosses your mind while working on your code so that you don't forget to get it addressed when you next communicate with your partner. This could be on a physical piece of paper, in a digital document, or directly in your code comments (but don't forget to clean up unwanted comments later!).
Make sure to share both successes and failures that you encounter with your partner so that you both can learn from your individual experiences and can try to avoid running into the same issues in the future.
We understand that student schedules are extremely busy and that sometimes it is not feasible for both partners to attend the same office hours. However, we find that partners that attend office hours together are more efficiently helped and often come out with deeper understanding.