Lesson Weekend

During class at Epicodus, we practice pair programming, where two people use the same computer at the same time. One person drives, controlling the keyboard and mouse, and the other person watches and talks. There are several reasons why pair programming can be more effective than soloing:

  • Programming is less about writing massive amounts of code and more about solving difficult problems. When two people solve a problem together, you often come up with better solutions, more quickly than each working alone.
  • Usually, each person in a pair will have different knowledge and different strengths. Pairing lets you learn from each other.
  • When you work alone, you're often tempted to take shortcuts that will come back to haunt you - such as writing your code without tests. When pairing, you can hold each other accountable to writing high-quality code.
  • When you watch somebody else code, it's easier for you to see their mistakes and catch their bugs than for them to see their own.
  • You don't check your email, social networks, news, text messages, and so on when you're pairing; as a result, you're much more productive.

From past classes, we've seen that teamwork and communication skills are actually more important than coding skills when it comes to applying for jobs. So use pairing as a way to intentionally build your skills in these areas!

Even though pairing has many advantages, it can be frustrating at times. You'll often be working with someone who is either more or less experienced than you, and you'll often feel like you're slowing down your pair, or they're slowing you down. You might want to explore how something works, while your pair wants to focus on actually finishing the project at hand. You'll run into a nasty bug, and you'll have different ideas about the right way to try to fix it.

Some of the best advice I've read on how to deal with these problems comes from Zee Spencer on Dev Bootcamp's blog (they're another school like Epicodus). Here's an excerpt:

A common theme from today's assessments is pairing is really hard. While everyone loved it they all shared a couple insecurities: I feel bad when I'm slowing people down, and I feel bad when I leave people behind. Many even shared both insecurities.

This is normal. Why? Because you are discovering your separate talents. Some of you are power-sluggers who burst through challenges like the kool-aid man. Some of you are food-scientists, experimenting with each challenge until you deeply understand its nutritional value. Others are chefs. Completing a challenge, then spending time ensuring it is prepared beautifully, clearly and effectively. All of you are smart, hard-working, and talented.

Why is pairing so hard? Because you each have different expertise, interests, and backgrounds. Not to mention different communication and learning styles! It requires the kool-aid man and the chef to make a dish together.

This is actually a huge benefit of pairing, because pairing brings balance, and balance brings learning. Here are some helpful tips to guide you to pairing bliss:

1. Prefix the pairing session by setting expectations. It's easy to assume that everyone you're pairing with has the same expectations for the pairing session. This is not always the case! I often want to blow through the tasks at hand as quickly as possible; but my pair wants to gain a deeper understanding of the underlying themes or part of the codebase. As you can imagine, these differing expectations cause conflict! Make sure you're both on the same page before you start coding; and you'll save hours of frustration.

2. Identify your natural inclination. If your pair knows your tendencies, they'll be more likely to adapt their pairing style to fit your tendencies, and vice versa. Don't be afraid to say "Hey, I really like to understand what's happening or I start to panic" or "I can't stand sitting still for too long or I start to freak out." Both are reasonable! Find the balance between them!

3. Ask for the keyboard. Time and again I've let my pair who knew what was going on race ahead of me as I got really good at Angry Birds. If you get left behind ask for the keyboard. This helps you understand what is going on because you're listening and typing; and it helps your pair understand and communicate things better because they have to express their code-desires in words at least one other person can understand.

4. Speak up when you're uncomfortable. Time and again I've caused my pair to wither to a shadow of their former self. I make a snide comment or I looked at them like they were an idiot. If I knew how bad I made them feel I would change my behavior in a heartbeat. Feelings are legit. Expose them when bruised. Saying "Hey, that hurt" is often all it takes. If you need backup, talk to me or another teacher.

Every day at Epicodus, before you start programming, we'll ask you and your pair to check in with each other: Do you take a lot of notes, talk things through before starting, or explore lots of tangents? Finding out about your pair's style and discussing what to do if you have different approaches or priorities can help you avoid conflicts later. We'll also ask you and your pair to check in with each other again after lunch.

If you do end up in a situation where you're feeling frustrated or uncomfortable, your pair is probably feeling that way too. Take a deep breath, take a break if you need to, and then talk about it with them. It's tough, but it's better than suffering through the day; talking about it will relieve the tension. Ask a teacher if you need help having that conversation. Remember that everybody will have difficult pairs, especially at first. But it's worth it when you find people who you work really well with.

Most of the time you'll switch pairs every day. Finding pairs can be tricky and awkward, especially at first. Make sure you try to find pairs who are relatively close to your level of understanding. If you always pair down, you won't push your limits. If you always pair up, you'll find that even if you think you understand a concept, you won't be able to implement it yourself. To make things easier, your Epicenter account provides suggestions of people to pair with based on your most recent code reviews, or randomly for the first week of class. If you have a couple days in a row where your pairs haven't been well-matched, talk with a teacher and they can help you find a good pair for the next day.