Slashdot is powered by your submissions, so send in your scoop

 



Forgot your password?
typodupeerror
×
Programming IT Technology

Programming Contests - Worthwhile for Real Life? 29

Ustaad asks: "We are running some sort of a club in our University which has members who are interested in programming and related stuff. With many sites like TopCoder and Valladolid Online Judge providing heavy machinery practice equipments to programmers, the level of competition in programming contests like ACM ICPC have gone really high. However, we are finding it really difficult to motivate new entries to join our club. There are few key questions that we face from our members. Firstly, how important are these programming contest techniques for solving the real-world industrial problems? Secondly, Do employers really care about the achievements in programming contests while recruiting? And thirdly, what other advantages does one gain by venturing into these contests?"
This discussion has been archived. No new comments can be posted.

Programming Contests - Worthwhile for Real Life?

Comments Filter:
  • by isj ( 453011 ) on Sunday May 19, 2002 @07:03PM (#3547262) Homepage

    I had a brief look at the problems/contests/tasks. They are not general problems, but biased toward mathematical problems because that is more suitable for contests. Nothing wrong with that.

    If the problems should be more like real life they would look more like:

    • There is a memory leak in this program and it is probably in the database driver. Fix it or find a workaround.
    • Design and implement a SNMP subagent and integrate into this legacy system...
    • A customer wants this feature but it has to be backward compatible. Find a solution.
    You rarely have the chance to create a new program from scratch in the real world. And when you do - is it maintainable, commented, flexible and robust?

    But the contests are not worthless. They show that you are interested in programming and that is important.

      • There is a memory leak in this program and it is probably in the database driver. Fix it or find a workaround.
      • Design and implement a SNMP subagent and integrate into this legacy system...
      • A customer wants this feature but it has to be backward compatible. Find a solution.

      Indeed, all very practical and useful things in real life. But I think, for contests, very general tasks are good gauges of a programmer's skill...such as determining a good solution that minimizes order of complexity, like O(lg n) instead of O(n); or just implementing something in C/C++/Scheme(?) (or a common language everyone should know), elegantly and efficiently.

      This might allow more people to participate (not everyone knows about SNMP, for example). Those that do well in the general topics like the above mentioned should be able to do well in just about anything (e.g. if given the appropriate protocol specs and a good amount of time).

  • by Anonymous Coward
    I bet that any experience that you have will give you a leg up on someone else that hasn't done any contests.

    Even if your prosective employer doesn't care, at least you know that you are better than everyone else that entered if you win a contest. ;-)
    • I think entering programming contests are good experience: it trains your mind to see the problem clearly, and create a solution that is direct and to the point; not dissimiliar to solving "real-world" problems, just without the added pressure of your manager (or their manager, or your customers) breathing down your neck to get it done.

      My bias: I am the reigning Obfuscated Perl [samag.com] champ.

      • I think that real world it self is a contest. The pressure of the manager is a good factor to test your mind balance.

        I think that real world problems are good problems, and i had many chances to create programs from scratch, and making them maintainable, commented, flexible and robust are the real factors of decision to be the real world winner.

        How to replicate this in the contests is the real question.

  • Wrong questions. (Score:5, Insightful)

    by rjh ( 40933 ) <rjh@sixdemonbag.org> on Sunday May 19, 2002 @07:40PM (#3547368)
    Are programming challenges applicable to the real world? Of course not. Ninety-five percent of the real world isn't applicable to the real world; how do you expect anything in academia to be more than five percent applicable, if the Real World is only five percent applicable?

    Stop viewing everything you do in college as preparation for the Real World. The Real World is out there, and no matter how well-prepared you think you are from college, once you get out here you'll realize that you don't know jack. That's okay. What you should be learning in college is how to learn, quickly and accurately. Do programming competitions help show future employers you can think on your feet and apply new knowledges quickly to old problems? Maybe. But like I just said, stop viewing everything you do in college as preparation for the Real World.

    Sometimes, you want to do things just because they're fun. With a little camraderie, espirit de corps and good code-fu, programming challenges can be a hell of a lot of fun.

    The only regret I have about college is that I took some things too seriously, because I was sure they were all about the Real World, and didn't take things seriously enough, because I was sure they were wastes of time. I passed on an ACM Challenge one year because I wanted to study more for a class I was in. Now, seven years later, I don't even remember what that class was.

    I do remember the ACM Challenges I participated in, though. And I wish I'd participated in more of them.
    • (* Stop viewing everything you do in college as preparation for the Real World. *)

      Well, why *don't* they make college better preparation for the real world? It seems they are geared toward research instead of practice.

      They should have classes like Brown-nosing 101, Advanced Brown-nosing, Bullsh*tting 101, Political Manapulation 101, Advanced Backstabbing, etc.

      The people who make the most money seem to exceed at these skills the most in my observation.

      They should make the social goof-offs take more nerdy courses and nerds take more socializing and smoozing courses. Heck, some nerds may even find a date or two.

      They have it all backward.

      Regarding programming contests, rather than emphasize finishing speed, judge based on being change-friendly (maintanable) etc.
  • by MarkusQ ( 450076 ) on Sunday May 19, 2002 @07:58PM (#3547407) Journal

    We are running some sort of a club in our University which has members who are interested in programming and related stuff...However, we are finding it really difficult to motivate new entries to join our club.

    I think I see your problem. Try saying: "Programming kicks butt. There is nothing that matches the creative rush of a good code frenzy short of godhood. You get to litterly feel like you can do anything. Programming is what people have dreamed of for eons--giving orders to inanimate objects and having them obey you without question. I feel sorry for anybody who doesn't learn to control the power that programming gives us. We meet on Thursdays. Wanna join?"

    -- MarkusQ

  • The social interaction that is generated by these group events allows the programmers a chance to hone their interpersonal skills, albeit with other socially-dysfunctional engineers. But just like bad press, any social interaction is good interaction.

    The number of people who can actually make programming their entire lives is few. In fact, once a few years of programming drudgery pass, it is likely that these programmers will look into doing things more worthwhile. I have known people who were the best programmers in their field up and quit to study medicine or lead new companies or any number of things that have little or no analogue in programming. One simply tires of the entire industry with its whining prima donnas and notably bad management.

    In all, programming contests boil down to one thing, a dick swinging contest. Fortunately, it also provides a venue for geeks to socialize, outside of which they would be deprived of such activities.
  • 2 Major Problems (Score:3, Interesting)

    by ltsmash ( 569641 ) on Sunday May 19, 2002 @08:11PM (#3547425)
    Here are 2 of the major problems with programming contests:

    (1) People think they must be a super-good programmer to enter, or face belittlement This is a more serious problem than you might think. Example:
    Student #1: Why didn't you go to the ACM programming contest?
    Student #2: Everyone there is an excellent coder, and they'd think I'm dumb.
    Contestants should be assured that if they do poorly, their scores would not be announced to ANYONE. Additionaly, it should be stressed one does not have to be a "Super-Good" programmer.

    (2) The problems are too hard. Many people get frustrated because the problems are extremely difficult. There should be one or two easy problems that most people can get. Also, many of the problems require advanced courses like "Graph Theory". Obviously, this will discourage participation from anyone who has not taken these courses.

    • (1) People think they must be a super-good programmer to enter, or face belittlement
      (2) The problems are too hard.

      Almost anybody can be very useful to a software engineering project. Sure there are some people who can quickly write working code to solve a problem, but not everybody can do that. However, the whole team can reach the objective quicker if other people do simpler tasks so that the "super programmers" can get on with the really difficult stuff. Things like installing development software, reading the documentation to find out all about how to use it most effectively, writing documentation, including requirements, design docs, test docs, doing the hard slog of GUI design and implementation, and testing the software to find bugs and make sure it meets the requirements. People can even help by providing good working conditions to help the programmers work more quickly and effectively. Find out what they need to work as quickly and efficiently as possible, and give it to them.

      These are all vital parts of a software engineering project. Almost anybody can do something useful along these lines in a programming contest, and it's the same in the "Real World". For example, get somebody involved in the contest as a "manager", and they might be able to get a job as a software manager or team leader, when they have more "Real World" experience.

      Go for it. And remember to have fun. You only go to university for a few years, but the "Real World" lasts the rest of your life.
    • (2) The problems are too hard.

      I disagree (mostly). While there is a number of hard (and some very hard) problems, there is also a large number of easier problems. Part of the skills needed in a programming contest like the ACM runs is identifying, of the 7-8 problems given, which are hard, which are simple and which are merely time consuming (a good example are programs involving board games like Chess or Checkers).

      Of the group, there is invariable one (or two) which can be solved by any competant programmer in 15 minutes. Often it's one that initially looks different.

      Granted, alongside the easy problem is at least one quite hard one, which, conversely, may initially look the easiest (in fact, they usually are easy, using a straightforward -- and far too slow -- algorithm).

      But running away because of the existance of these problems is no reason to avoid programming contests altogether. If anything, they help to demonstrate that graph theory and other concepts are _not_ just abstract, that in fact they are applicable to a number of interesting and relevant problems people want to know the answer to -- and not just "find the shortest route" problems.
  • I'm really glad I got into programming contests in high school. I had a teacher who told me hey, why don't you try out. I did, and I joined a bunch of people who enjoyed programming as much as I did. I learned a great deal from them, and I hope I was able to teach something in return. In fact, some of the people I met through programming contests are now my closest friends.

    International competitions are also quite fun. I miss the International Software Competitition (part of the South East Asia Regional Computer Conference [SEARCC]). Unlike the international competitions I joined later on, the ISC really gave us time to mix, socialize, tour the place... We not only programmed (in QBASIC, of all languages!) but we also played cards with the other delegates, swapped souvenirs, and traded tips. I owe my real start in Linux to a pack of CDs someone gave me at one of these conferences, so I guess you can say it has changed my life.

    I'm really glad I got into programming contests. The contests have all sorts of perks - travel to another country for free, maybe even win a prize or two (fame, fortune, and a line in your resume!). I often even get a room all to myself because there aren't that many other girls around. The early exposure I got to data structures and algorithms and the training I received in problem solving helped me a lot in computer science, and the confidence I gained from the competitions allow me to think of doing even cooler things. ;)

    That aside, there are some kinds of contests I enjoy more than others. I started with the usual solve-N-problems-within-M-hours, but when I got into develop-and-present-applications-within-X-days I realized how much fun I'd been missing.

    The typical problem-based contests often test how quickly you can realize the problem before you is just a mishmash of problems you'd already encountered during training. That's where the heavy duty practice machinery comes in. When you can glance at a problem and realize it reduces to something you've already solved before, you're practically done - all you have to do is code, debug, and test! While fun, sometimes it feels a little... hmm... too much like an exercise.

    In contrast, I feel that competitions that center on the quick development of an application given some specifications echo the 'real world' a bit more. In one particularly big contest we were in when I was a sophomore, I worked with four seniors to turn out this networked disk usage / process count monitor in Java. Ran on both Windows and Linux, so gained plus points for being cross-platform. There were criteria for documentation, presentation, even teamwork... We were holed up in a training complex for 3 days, with 24h food, drinks, and access to 5 computers - one of the most fun 3 days of my life. <laugh>

    Oh, let's not forget trivia contests. Sometimes those are hard ("I can't believe I forgot that!"), but they're also quite fun. I particularly enjoyed the twist the Hewlett-Packard TechQuiz added: a "technopreneurship" round, where you'd not only have to answer trivia but also place bids that depended on your confidence. That was fun. =)

    So yes, I've found programming contests to be very worthwhile. It brought me in contact with other geeks (and not just those in my immediate area), it forced me to learn about all sorts of cool things, and it helped me really become comfortable with computer science. Definitely something I'd do over again.

  • Programmers come in all shapes and sizes, and have differing methods, language preferences, and such. This means that relatively vague challenges work better than.. 'Write a 107 line program in C that can draw a graph.'

    Programmers generally like to know what the desired result is, and then they fill in the blanks from their. Sure, the 'input' may be provided, and the 'output' may need to be in a certain format.. but let them write the bit between by themselves! This is how you find the best thinkers.

    The best challenges are things like..

    'You have one week to produce an application that presents a Wolfenstein 3D style environment and allows you to move around it. Do not use existing 3d libraries, OpenGL or Direct3D. Use any language you want. The result must work in DOS, Windows, KDE or Gnome.'

    The results from such a contest could be varied, and it means you can judge the programmers, but also see their individual pros and cons.

    One programmer might write it in Perl/Tk so it runs on Windows AND Linux. One might get hardcore and code it in x86 to be run from DOS. These different approaches show you how the programmers operate best.. and they also have far more pride, because using an individual method is as interesting as simply 'making the best program'.
  • That's about all the value from programming competitions...

    Well, to be honest, ranking well in various competitions helped land a job for me but personally, I never liked the competitions.

    I actually thought the problems are far too easy (especially in high school competitions). I always had a problem with the way the programs were judged too (I was in a C++ competition where the given solution was _not_ object oriented at all nor was most of the entries).

    Of course, this isn't so much a problem with things like ACM but the smaller competitions are only as good as the organization sponsering them.

    Again though, if you need something to encourage students to join, the prizes are awesome (I got all sorts of software, books, and even a palm pilot).
  • I've never actually been in one of the ACM programming contests, because I'm one of the people running them (doing systems stuff + security) at our site.

    I can say, from looking at the problems, that they are not the sort of things you would do in real life. Either they are weird graph theory or gemetrical problems, or stuff that could be done in 5 lines of Perl (which you aren't allowed to use, just C, C++, and Java).

    Running them can kind of be good experience for doing system adminning, because you:

    a) Have to deal with a bunch of people (both higher and lower then you in the command chain) that are complete idiots. I mean people that should not be allowed to live, much less be allowed near a computer. I can give plenty of examples if anyone cares.

    b) You have to deal with absolutely horrible software (in our case, PC^2) because of organizational policy. I mean, way less stable than Windows 3.0, a UI that is incomprehensible, and a resource hog like nothing I've ever seen before or since. I really am not exaggerating. It's that bad.

    Both of these things come up in real life far more often than I would like. :)

    But as practical experience, please. These things are nothing at all like real life. Of course the winners do get cool prizes. It's a decent thing to put on a resume, but all other things being equal, I would think working a job in a lab on campus is much better real world experience than something like this.
  • Certainly competition lets the contestents grow as programmers and team members.

    Just like any other sport, as long as you have fun and play well, the rest isn't important.

  • I've won my every C, C++ and Perl obfuscation contest I've entered several times, and even when the people doing the hiring are programmers themselves, it still doesn't help me at all! I guess it's just not an important factor to them.

    --Dan
  • Well, somewhat. I did the ACM for three years in undergrad. I was (and still am) a little code hacker in the sense of being able to digest simple coding problems and get code out to work out those problems quite quickly. I am not a programmer, per se, since I actually kind of suck at doing large extended projects. *sheepish grin.* But at least I still got my minor in CS.

    The contests weren't very helpful in and of themselves. But studying for them... that was helpful, at least for me. In studying for them, you get exposed to lots of interesting algorithms and different ways of attacking problems. Learning to "problem-solve" on your feet (or actually your tush) is not only lots of fun, but it's also one of those talents that it never hurts to develop.

    Then, of course, there's the whole fun of time-managing. In the ACM, you have three people, one computer, and six hours. First time you do it, you realize that you're going to have to code on paper... and debug on paper... and figure out I/O on paper. (And anyone who has done one of these contests knows that I/O is the single nastiest part of the whole experience.) With the limited time and resources, you quickly find yourself having to visualize code and running it in your head or on paper in order to do well. And these talents are useful once again only because they are generally useful in programming. And all these can be worked on in practice, not just in the competition.

    So, yes, the competition really just comes down to enjoying yourself and having fun. You get an idea to see how good of a quick programmer you are and how you stack up against the rest of the region/nation/world. It can be both a humbling and an exhilirating experience. The ACM, at six quick hours, is loads of fun, especially if your programming partners are a blast to be around. (Let's just say that that last hour, if you've either finished or given up on the remaining problems, can be filled with some very screwy things... ;) )

    The important things to get out of these competitions come from the practices and such beforehand. Learning the algorithms, learning to think about problems clearly and quickly, learning to put ideas together on your feet. Those talents are just generally useful in programming, and life in general.

    Good luck.

    -Jellisky
  • Topcoder (Score:2, Interesting)

    by zurmikopa ( 460568 )
    I suppose I will relate my experience with Topcoder thus far.

    I found out about it from my friend and singed up. Then I looked at some of the practice problems and decided that they were easy and didn't do any of them. (Ooops)

    Now, I'm a pretty good coder, so I thought that I was going to tromp these other people. Instead I was slaughtered. I realized later that part of the problem is that Topcoder (and probably other similar contests) focus on the area of programming that I'm worst at. That is, taking input and generating a very specific output.

    I am much better at overall architectural and design aspects of programming when essentially are not tested in Topcoder whatsoever. Some of the problems are actually reminiscent to puzzles I've had to figure out while coding before, so I can't say it's totally useless. The fact that it covers the area of coding that I'm worst at probably helps me become a more well rounded coder as well.
    It's pretty obvious that nearly everyone there is at least an above average coder. Those that aren't any good typically do one comp and then never compete again. Most all of the high-rated coders have been programming since they were lil tots, so there's a good chance that your rating has some relation to how good you actually are. However, it doesn't paint anywhere close to the complete picture, not by a long shot.
    The way it's currently set up is you are given 3 problems in increasing difficulty and point values and 75 mins to solve it. This is followed by a phase where you look for flaws in other's code and finally the system tests the remaining submissions. There are 10 coders to a room and the top 3 get money. (It's generally not enough to pay for the 75+ minutes you spent coding assuming you have a real job, so fun should be a higher priority than cash) You are placed with coders of very close ranking so there's always a reasonable chance that you will win. In fact, I don't think there are any coders that have participated more than 12-15 times that haven't won money.

    Why I participate in Topcoder:

    They have some neat puzzles sometimes.
    It helps me improve the area of coding I'm weakest at.
    It's fun and free.
    I can win cash prizes (so far I've won 75 dollars, many people have won much more.)
    If I get highly ranked enough it makes a nice resume addition. <shameless>Right next to my networked, user interface configurable tetris. (After I put in a console to parse and excecute commands I knew I may have been going a bit too far)
    <plug>If you decide to create an account on Topcoder (if you do, you don't have to compete, and the accounts are free.) Feel free to refer me as how you found out about Topcoder =) My user name is Zurmikopa.</plug></shameless>
  • I'm still in high school but I've been doing computer contest for about 4 years now. I don't except anything I learnt to be useful in the "real world".

    I do think that the contest have and will help me in the future. The people how write these contest are normally the top students. Thus I would hope that at least some of them will do well in the "real world" and I will know them. This is what I see coming out of these contest... contacts.

    (PS I also have lots of fun... but that might just be me)

    -------------
    How should I know if it works? That's what beta testers are for. I only coded it. -- Attributed to Linus Torvalds, somewhere in a posting
  • I'm reminded of my experience trying to join the programmer's club at my school:

    Me: Hi, my name's Amit, my friends call me Pikachu.
    Club President: I guess I'll call you Amit then.

    Yeah...

    One of my friends has tried to get me to join Topcoder every day since he discovered it a month or so ago. He's loving it. I otoh would rather be working on one of my own stupid projects than compete for someone else's recognition. Then again, my friend also picked up a job @ Kodak in Rochester, while I'm stuck here doing dinky webcoding. Whee.

"If it ain't broke, don't fix it." - Bert Lantz

Working...