"You, as a manager, are responsible for two separate teams. The first one staffed by developers who are Ninjas. Each one of them are developing with a total different approach. They are convinced that their suggested solution is better then the others. The second one staffed by developers who are team workers. They have more than basic programming skills, but they know how to collaborate with each other. Which team do you believe will bring the best results over the time?"
Original source here.
The first group will probably waste energy on trivial matters. There will be unproductive competition. They will pay more attention to their egos. Even if they could be capable of quality code, the manager probably will spend valuable time trying to solve behavioral problems. Behavioral problems are serious, because it's very difficult to improve personality characteristics.
The second group will be committed to their work. The only problem that the team will have is the level of knowledge. But, this could be solved relatively easily. It's up to everyone to further develop their skillset.
Programming is more a social skill than anything else. To be a good programmer, first you must work on your personality and then master the programming principles.
Ninja, spend your energy and skills on the important things. Communication and collaboration is everything.
Good developer, become better and better but continue your good teamwork.