Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×
Education

Creating a High School Programming Competition? 18

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?"
This discussion has been archived. No new comments can be posted.

Creating a High School Programming Competition?

Comments Filter:
  • IOI (Score:2, Informative)

    by Anonymous Coward
    See the International Olympiad in Informatics model...
    Its at http://olympiads.win.tue.nl/ioi
  • Genericise it. (Score:3, Insightful)

    by eibhear ( 307877 ) on Saturday November 10, 2001 @10:13AM (#2548263) Homepage

    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.

  • Here's how we did it (Score:3, Informative)

    by eap ( 91469 ) on Saturday November 10, 2001 @10:46AM (#2548325) Journal
    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 [usm.edu] for some ideas.

    Good luck

  • Learn from the ACM (Score:3, Informative)

    by martyb ( 196687 ) on Saturday November 10, 2001 @10:53AM (#2548338)

    The ACM [acm.org] (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 [baylor.edu] 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!

    • I just got back from the competition last night (63rd in ENCA). One of the best parts of the ACM and similiar programming competitions is team work. You are given 8 problems to do in 5 hours. You have teams of 3 people and only one 1 computer to work with.


      Team and time management become as important as probleming solving and coding.


      The site I was at this year (Ashland, Ohio), we even had a seperate work-room and machine room, with only two people allowed at the terminal at once. You end up writing most of your code by hand and debugging print-outs, because you can't waste the time on the PC.


      Also you may want to look into PC^2. I don't have a link handy but you can find it off of the ACM competition pages. It's the software used to handle submissions and judging.

      • Also you may want to look into PC^2

        No, you don't. I've been helping run the contest systems at JHU for the last three years (including one last night), and PC^2 is an absolute nightmare. The people who wrote it simply do not understand how to write software that works.

        For example, we were trying to log into the admin account. Then the PC^2 client crashed. However, PC^2 does not understand the idea of atomicity; the main server at Virginia Tech got wedged in a bad state that meant that that it had to be restarted, meaning every server in the mid-Atlantic region had to be restarted. Unfortunately, the VTech guys didn't believe that it was their problem, so we ended up having to start about 3 hours late.
  • There is already something similar to what you speak of. Its called the American Computer Science League or ACSL [acsl.org]. I don't participate in it but i think my school got like 3rd or 4th nationaly last year. It works by sending in the answers to porblems for the 'regionals'. and then the highest scoring teams get invited to the national competition.
  • You should leave the language choice up to the students. Someone who picks C to do pattern matching and string operations instead of Perl deserves the buggy code they'll get (and the time they'll waste). Actually, this will end up enriching the contest, so far as students who learned more than one language will be able to pick the one best suited to the task at hand, a skill which can make or break a good design.
    • ... as long as the problem set isn't highly biased towards the capabilities of a particular language. If all the problems involve patern matching, students who understand Perl are going to wipe the floor with those using C. If everything involves writing GUIs, those who know VB and Java will run the show. Either limit it to a handful of languages that are relatively similar in power, or find problems that are particularly abstract and won't be trivialized by a particular languages features.

      Remember that these are HS students, not college students. They may have all the hands-on experience in the world but, at best, they'll have had one year of 'proper' CS training. Try to base the problems around the set of abilities they should have (you don't find HS math competitions requiring knowledge of differential equations..) and find interesting ways of applying it.

      Best would be problems that essentially need be solved -outside- of code, and can't be brute-forced. Trained monkeys can write code but problem solving doesn't come so easy to them.
  • ascl (Score:2, Informative)

    by Zak_Arcatia ( 243796 )
    You might try the American Computer Science League [acsl.org]. Apparently, they specialize in High School level competition.

    My high school participates in and loses at a smaller, local competition every year. As far as I know, students can work in C++, Pascal, or Basic. They're given a set of problems to play with for several hours. The team with the most correct implementations in the shortest amount of time wins.

    My information may be shaky. I have no first hand experience just yet.

    • I mentioned it in the post above. I believe you can program in whatever you want as long as you have a compiler or whatever you need for it. My high school competes in it too (although we do better), but i personally do not.
  • ECOO contests (Score:1, Interesting)

    by Anonymous Coward
    The Educational Computing Organization of Ontario holds annual programming contests for high school students, which I participated in for three years. http://www.ecoo.org/sigcs/ [ecoo.org] has a lot of information about it, including past contests.

    We had 3 hours to complete 4 problems. You work in teams of (at most) 4 people, and I think you can use any language you want (you could use a different language for each problem if you wanted). But you could only libraries that were included with the language (no add-on packages). We used QBasic (the only language all 4 of us knew), some people used Pascal or Visual Basic, and I think there were people using C and Turing. The problems were best suited to text-mode programming, so VB just made it harder (people had to create a form with a start button, and some labels for output). One team used a computer running GNOME on Linux (now that I think about it, that was when I first heard about Linux). I'm not sure what language they were using.

    The programs usually used input from a file on disk, with given names (i.e. "A:\DATA31"), and output to the screen. We usually had sample input. When we finished any problem, the judges would come to our computer and give us a disk with new input. We'd run the program, they'd check if the output was correct, and give a mark out of 100.

    Time bonuses were also assigned. The time bonus started at a given number, and decreased linearly to 0 by the end of the contest. When you submitted a problem, you'd get a time bonus. You could resubmit once, but you'd obviously get less of a time bonus, and if you got a lower score, you were stuck with it (only 2 tries were allowed). Of course, there was different input data for the second attempt. With 4 questions marked out of 100, some teams managed to get scores around 490 because of time bonuses.

    Code quality was not a factor in judging. It's too subjective, the judges didn't have time to read code, and the judges can't be expected to understand every language students use. Efficiency was usually not a factor, but some languages (QBasic) did put limits on memory usage. There was also a limit on how long a program could run for, to prevent people from using purely brute-force solutions that take an hour to run. IIRC, the limit was around 1 minute (if it took longer, you got 0), but wasn't timed with a stopwatch or anything - I don't think anyone ever ran into that limit anyway.

    I don't think it was unfair that students got to use different programming languages. The alternative is to force everyone to use one language, which isn't really fair either. However, there was a small problem one year. One of the questions was based on factoring numbers (or something like that), and one team had a library that could do this for them. The library was included with the language, so the judges ruled that this was legal. The other teams felt this gave them an unfair advantage, so you should probably say something like "you must write the factoring code yourself, don't use a library function" in the question. OTOH, you can't just ban libraries, because some languages (like C) are nearly useless without their libraries.

  • Since you're in the USA, you might as well check out the USA Computing Olympiad [usaco.org], the competition which leads to the previously mentioned IOI. It's language-specific (C, C++, or Pascal), but that doesn't matter - the problems are hard enough that you should be spending significant amounts of time thinking and working stuff out so that you can hopefully code in 20-30 minutes (per program) regardless of what language you choose. The language won't have a big effect on programming ease or time if the problems are well written.

Anyone can make an omelet with eggs. The trick is to make one with none.

Working...