Slashdot Mirror


Creating a High School Programming Competition?

goatmon asks: "A few high school computer teachers across Tennessee have organized an annual "Geek Games" competition. We started last year with a great competition in PC repair, patterned after the VICA competition. This year we are trying to expand to add a competition in computer programming. The question is, how do you create a language-independent computer programming competition? Is it fair to have a timed test if one group of kids is hacking in Python and the other in C++? And who wins, the one with the shortest code, the fastest programmer, the one with code that works? Can anyone offer insight from experience or a pattern that we might be able to follow?"

3 of 18 comments (clear)

  1. Genericise it. by eibhear · · Score: 3, Insightful

    My suggestion to you would be to set a goal that is generic. Decide on a system that whould be built. This can be something graphics based (e.g. a simple calculator that does addition, subtraction, division and multiplication), information based (e.g. building a time tabling system), networking (e.g. a system where input occurs on a client, and processing on a server).

    However, the trick is not to specify technology. In fact, you could make it quite clear that it doesn't matter what development paradigms that are used. What is important, though, is that the goal be described as something that is useful. (I remember being brilliant with my repeating print out on my ZX81, but realising that no one wants to see "Eibhear was 'ere" 10, 100, 1000 or any amount of times.)

    In short, decide what you would like to be produced by the entrants, and let them decide how they do it.

    With respect to judging it, you could devise a set of qualitative criteria that can easily be assessed by judges with a modicum of technical experience. Criteria could include:

    • Extent of completion - how much of what was required was provided by the entry.
    • Ease of use - How difficult or not is the entry to learn to use.
    • Ease of access to potential users. - How many potential users are excluded or not from use due to a lack of peripheral resources (libraries, OS, hardware, etc.)
    • Presentation - How good it looks.
    • Perceived simplicity - How simple it seems in it's execution.
    • Readability of the code - How easily some one else can understand the code as entered.
    • Elegance of the programming - How "clever" or succinct the coding is.
    • Ease of access to build environment - How easy and/or inexpensive it would be for some one to gather the necessary environment to build the entry from the source.

    These criteria are somewhat subjective, and to ensure fairness for all entrants, there would have to be a panel of judges, like in the figure skating competitions.

    Then there is a set of quantitative criteria, which would enclude:

    • Disk-space taken up by deployed solution - how much disk space is required by the bare minimum of the entry to get it to run. This could include, but I would exclude, the system requirements.
    • Speed of response or operation - How long would the task that is set out in the requirements take to be completed.
    • Etc.

    The point is to make the competition such that one geek with a linux and a C/C++ compiler and years of programming experience will not have an advantage over a kid with access to and a preference for HTML/javascript/VB/perl/etc. By making the requirements of the competition non-technical, the entrant will focus on the means best used by herself, and judgement will not be prejudicial.

    Hope this helps.

    Éibhear.

  2. Here's how we did it by eap · · Score: 3, Informative
    I helped out at a high school programming contest once. The way we did it was to give out 9 or so problems and let the kids hack at them all day. Whoever got the most working at the end of the day won. We specified that they had to use either C++, Java, or Pascal, I think due to the fact that all our machines had these environments installed and none else.

    If I'd done it, I would have allowed them to use any language/environment. I think the ones using Perl would have had an advantage on certain problems, but that's just because we gave them many limited scope problems. If you gave them a single large problem, the ones using a stricter language like Java or Ada would probably have the advantage.

    Anyway, I think you need to avoid subjective judgments like elegance and concentrate on measuring things like correctness and speed of completion.

    Check out my college's programming contest website for some ideas.

    Good luck

  3. Learn from the ACM by martyb · · Score: 3, Informative

    The ACM (Association for Computing Machinery) has held college-level programming competitions for many years. Though the actual problems may be at a level beyond what you are looking for, they have long ago solved the issues of how to hold such a contest.

    Here is the 2001-2002 ACM International Collegiate Programming Contest page which lists, by region: a report, the standings, and the programming problems.

    The basic format is to have a number of problems for the contestant teams to try and solve in a fixed amount of time. (The first one I checked out listed 8 problems for a 5-hour contest.) It included explicit problem specifications, sample input, and sample output for each problem.

    I'm sure that by looking down the list, you'll find a baseline of informationt that will go well towards helping you to design your own competition. Good Luck!