I believe it has many advantages over individual programming:
Pros
By pairing senior with relatively junior staff, the more junior can get up to speed with both project and computing experience, and the senior will re-think the problem in order to communicate with the junior, thus re-checking his own thinking (rubber duck principle!).
At least 2 people will know about any single piece of work, if one person is away the other can cover, or if some one leaves a project knowledge transfer is easier.
Two brains on a complex task is more effective, communication keeps the work free flowing and provides redundancy in decision making.
Code is effectively reviewed as its being written, no need for a separate reviewing phase which requires a context switch as someone who has not been working on the piece in question would be required to understand and review the related code.
Reviewing code on your own which you haven't written or architected is not fun, hence counter productive.
Cons
Less bandwith for performing tasks, lets say we have 4 devs, pair programming requires 2 devs per task, so we would be doing 2 tasks concurrently as a posed to 4. I believe this "Con" does not stand up as the pair programmed task would complete sooner and comes with a review built in for free! Ie the pair programming task would be more efficient and thus free up resources earlier.
Less flexibility to chop and change tasks as two developers are tied into a task, when flexibility is required this could be a problem.