Sunday, September 20, 2015

High School Programming Competition: A Series


When I was a junior in high school, I attended ACM@UVa's High School Programming Competition (HSPC).   A friend told me about the event a couple of months before it was to be held, but I did not know anyone else in my hometown who would be interested in (or even capable of) driving multiple hours and spending a Saturday looking at code on a computer screen--so, I sent an email off to the organizers asking if someone could participate as a team of one.  They said yes, and I rolled up early on a Saturday morning in March to find I was the only team with fewer than 3 people, with most teams having 4.  Several hours later, I emerged in 5th place out of the 17 teams, solving as many problems as the 3rd place team (but slower).

The thrill of competition is like nothing else; I had to do this again, but I knew I would need a team.  I spent the following summer and start of fall searching for teammates, and found one other person with programming experience and two more who loved to solve problems and had analytical thinking skill.  We spent the rest of fall and spring preparing for the competition, and returned with a 2nd place standing.

As team lead, I found that there is a surprising lack of material explaining how a team should prepare for a high school programming competition (hereinafter, HSPC).  As I now organize the ACM@UVa HSPC, I have received email and verbal feedback from coaches asking how to prepare, so I know content in this area is still lacking.  I aim to resolve this issue by writing a series of blog posts to convey the lessons I learned in preparing a team.

The advice I have will apply primarily to ICPC-style programming contests, like those held by ACM@UVa, UMD, VCU, Cornell, and others.  However, many of these concepts will cross-apply to other contest styles.

The topics I'll cover are:
  1. Finding a team - If I don't have a team, how can I grow interest?
  2. Language Selection - What language should I use, and any good libraries?
  3. Contest Environment - What will the contest computers be like?
  4. Problem Types - How do I solve this problem?
  5. Meeting Agenda - I'm stuck running this! What should I do?
  6. Resources - Where else can I get help?

At the end of the series, I'll post a list of contests organized by region and timeframe.  If you're reading this and have questions or suggestions for other topics (even if you're reading this years after I originally posted), leave a comment!

I believe that competition drives performance and is a necessary part of the educational process.  My experience in high school programming competitions was a major factor in my higher education decision process (both major and school selection) and pushed me to improve.  Because this was such a large part of my life, I want to encourage others considering this activity.

I should note that what I write here in no way reflects anything official about the ACM@UVa HSPC.