I have noticed many benefits to programming in groups. The first is it forces the team to do a good job of organizing the project up front and have clear, defined goals. Having a well-defined structure and goal is a key to any successful programming attempt. As an individual, however, there is often a temptation to jump right in to coding the project. With others involved, this is not possible, as the code would take many spurious routes.
Another advantage is people often have trouble finding bugs in their own code. It looks so natural when they look at it themselves, but a fresh set of eyes can ask the question "why is that line of a different form?" and expose a simple typing error. More sets of fresh eyes can help eliminate painful errors that are difficult to trace.
Team programming also allows us to get the best of multiple skill sets. If, for example, there is an individual talented at pointer manipulation and an individual good at algorithms, they can combine these to create a strong program that is better than either of them could have achieved on their own. This is a great example of the whole being greater than the sum of the parts.
One of the things that I think is good about team programming but may initially appear as an obstacle is differences in how individuals format the structure of a code. At first, this could appear to be an obstacle in the readability of code. However, it is important to get used to working with other peoples' code, as no large projects are taken on individually. Also, it has helped expose me to new styles that I have adopted or incorporated into my own, as they can feel natural to me.