In my Object Oriented Programming class (c++ class) we had to pair program on all the projects. By-and-large it was fun, wrote good code, but it was just so time-consuming. There is something to be said about the individual – being better at completing a task because he can make his own decisions effectively. And so long as the developer takes careful consideration into design and implementation, scaling&algorithms, I think Not-pair-programming is actually a better way to complete a task. The projects in c++ were fairly easy problems, but each project took longer than you would think.
This whole focus on ‘The Team’ seems a so tedious – and it’s a little naive as well. Many startups have a maverick, a star programmer that does most of the work (Reddit, airbnb for example)
Every article I read about pair-programming never addresses its downsides…
One thing that kind of was difficult was that while pair-programming, you never really have time to think. Computer Science gives rise to very complex solutions: some solutions have advantages, code scalability, algorithmic complexity, designing an api, improving performance. I mean these are not trivial things, and there is always a pressure while pair-programming to be either talking or coding.
It becomes a mob-ruled programming team, and the biggest, strongest personalities win. And when a collective of people agree on some approach, it becomes very hard to criticize it. The programmer with a bigger personality or the collective tends to drive things, in sometimes a suboptimal way.
Lastly I feel like there is very little personal space, and everyone is constantly bringing someone else up to speed. This is probably why companies like this, because each developer keeps the other one in-check and up-to-speed, to make sure he/she is not wasting time. But for a long-term job, this gets tiresome because sometimes I just need some space where I don’t have to talk to another human and can just code while listening to music.
But the whole keeping each other, or a team up-to-speed is a big problem in itself. Some companies want a synchronous team. But is there any doubt that an asynchronous team of good developers with version control and continuous integration, will get more done?
So personally, while I can pair-program just fine and sometimes enjoy it, I think there are some downsides that should not be dismissed.