While I was a junior in high school, I participated on my school's Lockheed-Martin CodeQuest team. CodeQuest is a competition based in Java in which teams of three compete to solve as many problems as possible. There are typically 15-20 questions, each with increasing difficulty. They can ask you to do anything from string manipulation to multi-dimensional arrays to sorting algorithms and so on.
While my team did not place, I learned a few valuable lessons. First, because each team is only allowed one computer to share, we had to learn how to not only communicate what we thought, but the exact methods we thought would be best to use. This was a great exercise in communication. Second, because we had only so much time to solve the problems, the competition was a great way to learn how I deal with the pressure of a looming deadline, something you run into a lot in the programming world. This competition showed me that I can deal with crunch time pretty well. The final lesson this taught me was that team work is what really pushes us forward. There were many problems where I didn't know the right way to do something, but one of my teammates did. There were also a lot where it was the opposite. I learned that while no one person can know everything, a team of people can have each other's backs, and between the people in that team, know just about everything they need to know.