This issue of the 'Know Your Hero' interview series features Marek Cygan (TopCoder handle: marek.cygan). marek.cygan has recently become a target in Algorithm competition and, after SRM 366, he has become the highest rated coder from Poland (breaking tomek's long-standing domination). He's also currently in the top four overall for all Algorithm competitors. This wasn't the first big achievement for marek.cygan, however. His first great success was winning the Google Code Jam 2005. Since then he has qualified for four onsite rounds of TopCoder tournaments, including this year's TCO and TCCC. He was also a member of the Warsaw University team (together with malcin and wabash) that won this year's ACM ICPC World Finals held in Tokyo.
Q: When did you start programming?
A: I wrote my first program in Pascal when I was 15, just before I went to high school. After that I started writing some very simple programs. Two years later I started participating in computer science classes, where I learned some simple algorithms, basics of graph theory, etc. At that time I also competed for the first time in the Polish Olympiad in Informatics.
Q: How did you learn about TopCoder? When did you start competing?
A: One day when I was still in high school I accidentally saw tomek's CV, where he wrote about his TopCoder achievements. Thanks to this I registered at TopCoder. When I opened some TopCoder problems I saw that all submissions were using classes and I was still programming in pure C at that time, so I gave up on TopCoder for some time. About a year later, when I was a student at Warsaw University, I talked to cyfra, who told me that I didn't have to be very good at object oriented programming to participate in TopCoder challenges. With his instructions I managed to successfully participate in the qualification round of TCCC 2004, with my submissions being really pure C code with one class and one method inside. From that point I could start improving.
Q: You recently became a target and got to the top four in the Algorithm rankings, beating tomek - that's a big thing. Was that a milestone in your career, or a goal that you've been trying to achieve? How did you feel?
A: In May, 2006 my rating grew to over 2900. At that time I thought that I would get past 3000 sooner or later, and I made it just a small goal for myself. It proved not to be that easy, however, as I dropped back to below 2700 due to some small bugs in my submissions, encountering precision errors with doubles, etc. Even the 2007 TCO did not help me get my rating back to the higher level. That is why I decided to prepare well for TCCC 2007 and got back to the 2900 level before the tournament began. Since then my rating was oscillating at about that level and I lost some chances to cross the 3000 border. Finally, when I got the second place at SRM 365 and eventually gained a rating of 3009, I wasn't even really all that excited about it, since I had been waiting so long for it to happen. But then came SRM 366 (preceded by a good result I got at TCCC Round 3), after which I sorted all coders' ranking by ratings and was surprised to see that I was just 1 rating point ahead of SnapDragon and 2 points ahead of liympanda, with tomek (unfortunately) losing many points. I was very happy, but also somewhat intimidated with what I had achieved at that moment.
Q: So what are your next goals?
A: My main goal is to always concentrate on practice and step-by-step improvement of my skills. This, however, includes some sub-goals. From the rating point of view, I would like to get to the Algorithm top three again, which is in other words equivalent to beating bmerry. ;-)
I'm not really looking higher than that now, as there is a huge rating gap between me and the top two. Particular competitions are more important for me than my rating. That is why I will stay focused on TCCC 2007, with the onsite finals coming in a month's time. The tournament finals coincide with regional eliminations to ACM ICPC team contest, so at the same time I will be preparing with my team to defend the championship title from last year.
Q: What was the proudest moment of your programming career?
A: Certainly the most surprising moment for me was winning Google Code Jam 2005. I had some luck at the final, the problems suited me well and the challenge phase was very fruitful for me. This success, however, turned out to be somewhat of a bad influence. The problem was that I like to do step-by-step improvement, and this was more of a 'jump' kind of improvement. Because of that my expectations for myself grew too big, which caused me some frustration and problems at subsequent challenges.
Probably winning the ACM ICPC 2007 finals was the proudest moment for me. My team was training a lot for the finals (thanks to andrewzta's invitation we could participate in the Summer Programming Camp in Petrozavodsk) and both our skills and our results in training were systematically improving. When we went to the ICPC finals and won, we were very happy.
Q: What did you do to improve your programming skills over time? What advice would you give to newcomers?
A: I probably won't surprise anyone when I say that practice is the best thing for improvement. This isn't as easy as it seems, though, because you can get a different quality of results depending on how you actually practice. Some time ago andrewzta gave me good advice on that, saying: "Train well, not hard." So you first need a good theoretical background and then need to gain some programming expertise by solving problems -- only combining the two factors will give you the expected results.
Q: What type of problems do you like the most, and why?
A: First of all, I like problems with short and clear statements. I'm not very strong at geometrical problems, but all others are fine for me. And most of all, the solution of the best problem should involve some clever ideas.
Q: Do you compete in any TopCoder competitions apart from Algorithm?
A: I tried to compete in Marathon Match competition, mostly at TCCC07. It was a valuable experience for me, because I first thought that MM shouldn't be very hard for Algorithm competitors. I then realized that quite different abilities are needed to be successful in it. I also started getting into the Design and Development categories some time ago (mainly Development, as I don't have much experience in designing software), but I didn't have enough time for it yet, so I'm planning to try it in future.
Q: What are your hobbies apart from programming?
A: My hobbies are mainly sports. Before I went to university I trained in rowing for 7 years. Now I most often go to the gym, swimming or rock climbing.
Q: What are your plans for the future?
A: This year I'm graduating from Warsaw University. After that I will probably start doing a Ph.D. there. I like programming very much, so I will also try to start some projects or maybe go for some internships to learn more about practical programming. And I'm getting married in June 2008.