Works where applicable
I've done pair programming, and it works where it works, and it really doesn't work where it doesn't belong.
Given two top programmers, one will be busy writing code, and the other one will be saying, "yep, good..." over and over again.
Given two idiots, you will not get good code no matter how many more idiots you add.
Given a senior programmer and an able novice, it's a great way for the novice to learn. I endorse that highly.
The problem is that it's pair programming, in an open and noisy environment. There's a lot of distraction, which cuts down on productivity. There's the problem that the other guy can't even type.
Pair programming can be good, but it can also be a great way to lose people.