In my experience - pair programming is great for bootstrapping new comers to the team.
It can also be a great tool while working on complicated stories where people can pair and solve the problem (the actual pairing can be for say few hours to establish a base for the solution and then split up.)
Pair programming need not be about going all in or not doing it. Do it at the right time and right purpose and we can have all the pros of it without the cons. Being dogmatic about always pair programming is one of the reasons why people started hating it.