Gone are the days of the hoodie-wearing, basement-dwelling hacker. Computer science is a social pursuit. Engineers need communication and collaboration skills, and they can learn these skills in computer science class!
Initially, some students may be reluctant to work with others and profess that they work better alone. However, students have a better time in computer science class when they can problem-solve with friends and classmates. Difficult problems are less scary with a friend, and students can learn from each other!
Below are some specific strategies to encourage collaboration in computer science class.
In pair programming, two students work together to write one program. One student acts as the driver, writing the code based on a discussion with their partner. Their partner serves as the navigator, describing how to write the program and troubleshooting potential errors. The navigator may also pull up resources like past programs and notes.
How do you make pair programming successful in the classroom?
- Establish norms. Through silly videos or live demonstrations, introduce the pair programming roles. Show students what good pair programming looks like (two people discussing each line of the code) and what bad pair programming looks like (the navigator grabbing the keyboard, the driver typing while ignoring the navigator). Have your current students make funny videos to pass down to future generations!
- Establish a routine. Make pair programming the norm so that students are used to it. Use an app (or write your own code) to randomly generate pairs and tell students who the driver is. You can use the app Who’s the Driver? to generate prompts that immediately spark conversation between pairs. One instructor at Upperline Code also likes to get partners talking by telling them to high-five each other or compliment each other’s hair.
- Switch it up. Set a timer and tell students to switch roles every 7–10 minutes, or even more frequently, like when a song on Spotify ends. If students are doing multiple problems or labs, they can also switch roles every problem. Also, switch up partners daily!
- Pair students with similar skills when possible to reduce frustration between pairs.
- Have students reflect. Encourage students to reflect on their pair programming process in order to grow their skills. This Pair Programming Self-Reflection, in the form of a single-point rubric, asks students to brainstorm how they are excelling and how they can improve as a driver, navigator, and communicator.
Pair programming is great, but students also appreciate autonomy. Still, individual work doesn’t mean the collaboration has to end!
Buddy programming allows students to work on their own program, but also have a buddy to consult if they have a question. Buddy programming is ideal for longer labs and projects where students are expected to demonstrate their own understanding of a concept.
For successful buddy programming…
- Make the expectations clear. Tell students that if they have a question, they should ask their buddy. When buddies are asked questions, they are expected to respond and help their buddy to the best of their ability.
- Create opportunities for buddies to talk. Buddy programming is less social than pair programming, so buddies may need prompting to connect. You can have buddies high-five, tell each other how they’re doing that day, or turn to each other and share their progress in a specific lab or problem so far.
- Make buddies long-term. Since a relationship between buddies takes longer to grow than a pair programming relationship, where partners talk constantly, consider switching up buddies less frequently so students have time to become comfortable with their buddy.
At the opposite end of the spectrum, the entire class can work together to solve a programming problem! Mob programming can be an opportunity for students to share knowledge at a large scale as they watch each other problem-solve. It can also be a fun review activity and a team-building experience for the class.
In its most basic form, mob programming requires one driver, and everyone else serves as a navigator. The biggest risks of mob programming, especially in larger classes, are unequal participation and total chaos. To mitigate these risks…
- Pick problems that the majority of the class can solve. That way, a few superstars aren’t dominating the process.
- Establish a protocol that requires everyone to talk in an orderly fashion. You can go around the room and have each person say the next line of code to write.
- Help dominant students self-regulate. Give them three cards each, and have them give one card to you each time they contribute. After all their cards are gone, they cannot contribute. Humanities teachers have known this strategy for a long time, as it helps talkative students choose when to chime in and when to give others a chance.
- Go full-on Harkness and grade students on their quality and inclusivity of their problem-solving. Although primarily done in humanities classes, Harkness discussions can be adapted to any subject. They are essentially a whole-class discussion without any formal hand-raising, and students earn a discussion grade as a class. In a subject like computer science, students would work together to solve coding problems — and they would not be able to earn full credit unless they solved the problem and everyone participated in a supportive atmosphere.
Creative projects can be a fun break from rigorous programming activities, and students can do them in pairs to build their collaboration skills. For students who struggle with the programming side of computer science, these projects can be an opportunity to shine academically and help build positive associations with computer science.
Creative project ideas:
- Infographics and presentations. Students can build their understanding of computer science concepts like object-oriented programming and data structures by making infographics or presentations about OO concepts or different data structures. Topics might include encapsulation, inheritance, and polymorphism for OOP and trees, linked lists, and stacks & queues for data structures.
- Sorting algorithm presentations. Sorting is basically a solved problem in computer science, so why not have students research the algorithms and present them to their peers? This Sorting Algorithm Project has students teach their peers basic sorting algorithms using interactive activities.
- Review projects. Allow students to be as creative as they want by having them make videos, skits, tutorials, or memes for their peers about computer science concepts covered so far. Of course, students who claim not to be creative can swing the opposite direction and make straightforward review sheets and quizzes about the topic. As another opportunity to review, students can enjoy each other’s projects!
Prepare students for the real world of software development with group projects at the end of a programming unit! Most of our favorite programs and apps were built in teams, and teammates can also save students from getting stuck in rabbit holes as they forge ahead to build their coding knowledge through projects.
How do you make group projects a positive experience?
- Avoid social drama. Have students brainstorm projects ideas and write down the top ideas they’d like to work on. Group students together by the ideas they chose.
- Help students plan realistically. Before students start coding, require them to scale down their grand ambitions and determine what their MVP (Minimum Viable Product) will be. After they build their MVP, they can slowly add more features to their projects.
- Hold students accountable with stand-ups. In stand-up meetings, each software developer on a team shares what they did yesterday, what they’re going to work on today, and if they are facing any obstacles. (If they are, another team member can offer to help out.) When students are working on a project over many days, opening class with a stand-up meeting can keep everyone on track. However, part of a stand-up meeting is keeping it brief, since everyone is literally standing up and itching to sit back down and work!
- Celebrate student work. Have students present their final projects to the class! But emphasize that many projects are likely still a work in progress. In addition to impressive code excerpts, have students also share what they would add to the project if they had more time.
Don’t let students grapple silently with computer science challenges! Provide opportunities for students to collaborate, and they will have a more positive experience with computer science in general. The more students enjoy computer science and develop real-world collaboration skills, the more robust and inclusive our tech workforce will hopefully be.