I wanted to take a few minutes to share some thoughts and experiences about pair programming.
I'm going to start from a strange place - Near Infinity's benefits package. I start there because it includes a self-managed training budget. That is, every year, they say "Here's X amount of money for whatever training (within reason) that you'd like to get". Conferences, classes, whatever I think will help to make me a better programmer. I've gotten to learn about Ruby on TDD, Rails, iOS development, Hadoop, and many others. And each of these opportunities has stretched my mind in great ways.
Last year, I started trying something new. I contacted Avdi Grimm, who's a rock star in the ruby community. I contracted with him at an hourly rate to just simply pair with me. We talked about testing practices, we worked through tricky algorithms together, we debated the pros and cons of different object-oriented approaches to problems, and he shared trick after trick with me about how he thinks about software development. I still hear Avdi's voice in my head when I program.
This year, I'm doing the same thing with Sandi Metz. I read her book, Practical Object-Oriented Design in Ruby, and loved her way of thinking. Now, every time we sit down together, we discuss how to sort through the costs and benefits of different abstractions. We talk a lot about dependency management, and whether one piece of code (or test!) knows too much about another piece of code. We refactor, and we discuss. I'm starting to develop an ability to anticipate what she's going to say when I ask her a question.
So now I've got two awesome developers inside my head. When I'm tackling a problem at work, their voices are right there with me, like angels sitting on my shoulders. I'm truly grateful for the time I've spent with them. And that's one thing that pair programming can do - it can help you gain other people's experiences, and apply them to your work.
There are other benefits as well. You're a lot more focused when you're programming. There's much less of a temptation to cut corners, or to interrupt your flow and get distracted by email or twitter, or....um...what was I saying? Oh, right, pair programming. You also get typo-checking for free. And you get stuck a lot less often. You also share knowledge about the system you're working on. The benefits go on and on.
And now, there's a grass-roots movement for doing more pair-programming in the open source community. None other than Avdi Grimm is coordinating resources on this page, and there's a great feed for twitter discussion and for finding people to pair with. So, now you can get the voices of other developers in your head, share and gain knowledge and experience. So join the movement! You won't regret it!