Collaboration is highly encouraged in CSE 351 and you are given the option of completing almost every assignment (except the exams) with one or more collaborators:
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.
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 lab 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 concepts in this class involve the details that are specifically abstracted/hidden away from the programmer, which can make the moving parts harder to follow. We highly recommend using visualization tools (e.g., pen-and-paper diagrams, simulators, debuggers) to assist you in understanding and following the state of the computer as it performs the desired actions. When working with a partner, these visualizations are useful ways 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.