Programming Olympiads - do they help in real work? Sports programming Sports programming where to start

Everything is very complicated and at the same time simple. What is sports programming for? Not "why should it be engaged" but precisely "why does it exist as a phenomenon." Why sport is needed at all, take at least intellectual, at least physical types. Someone will say what is for health, development, all that? Yes, there are so many injuries in professional sports that no health is enough. For money? Yes, everyone there becomes millionaires in a year. The true reason is the same: the desire to win, to be different from others, to be better, more perfect, more significant. Do something great for your people. Everything else is a consequence. If it were not for this desire, which engenders competitiveness as such, everything else would not exist. It's the same here.

What attracts people in the beginning. Some kind of interest, novelty, a kind of "wow-effect". But it goes away. Deeper mechanisms are needed for the emergence of sustainable motivation. Otherwise, if there is something left, it will only be enough for "for fun" classes.

Therefore, the first and main thing to motivate a beginner is the opportunity to become the best in what you do! Not just a coder, some thousands of thousands, but a champion. After all, every person dreams of something big and meaningful. Maybe that boy dreamed of scoring goals in the Champions League as a child, and this girl dreamed of singing songs at Eurovision. He went to a sports school, and she went to a music school, but it didn't work out. But the math was always great, but what's cool about being a nerd nerd, solving interesting problems that are clever for you alone? And to some excellent student who dreamed of becoming an astronaut, his parents, who did not care about his dream, drummed that the astronaut should at least know by what physical laws rockets fly, so he began to solve physics, all the more he goes with a bang. And now they all entered the university and somewhere inside the thought is already beginning to ring alarmingly: "So what? Will I really never do anything outstanding in this life?" After all, by and large, any graduate programmer can very well be replaced at work. And here is the chance: to speak for your city, for the university, for the whole of Russia, to win, to reach the semifinals, the final, to do something that if you do not do it, then no one else will do it.

When we just started programming, in the 11th grade, we were told over and over how it all began. As the first time our teams went to the semifinals. How the first problem was passed. How they got to the final for the first time. How we went abroad. How they fought on equal terms with the best minds of the planet! And my heart sank with the desire to become at least a little like them. We looked at the finals tables and the names flashed before our eyes: MIT, Harvard, Stanford! Does everyone dream of studying there? But what's much cooler: to tear all the vaunted foreign teams to hell! How Tarasov's team in the very first match of the super series demolished the team of the greatest hockey professionals from Canada 7: 3. Here it is, the challenge of our life! And this is all possible! This is reality! And this is something that is really worth living for. And maybe someday the same stories will be told to recruits about us in their own university. And everyone will dream of being like us. This is how beginners look at the Olympiad.

You know, we are all accustomed to these phrases: "semi-finalist of the World Championship", "medalist of the North-Eastern European Championship", etc. This does not surprise us. But for a random person from the street, such achievements are just space! And newcomers are people from the street. So why not use this? After all, getting to the semifinals of the NEERC World Championship for many contestants remains for life the highest peak they have taken, the loudest won title. This was no joke now.

You have ten thousand students, and this is the opportunity to become one of those three elite students who will represent the university and the city in the world's main student competition. Each of them is already, as they say, "one in many thousands"! An elite division of your university.

Yes, then there will be hours of work for wear, but who said that becoming a world champion is easy? Work to wear and tear will go by itself when a person knows that he is going to a worthy goal. No one will run a marathon or climb Everest without preparation. Everyone understands this. But if you go through this, you will have something for which you can respect yourself. It's the same here. Not less.

Only now no one goes to the mountains just for the sake of hardship, and to a marathon - so that after a week they will not get out of bed. Nobody enters the boxing ring for the love of getting punched in the head. There are few masochists. All of these people are driven by something else. As well as sports programmers. Namely: the goal!

So, if you are a guitar teacher, then you shouldn't tell the students about how your fingers will hurt and let them try to take a barre right away ("aha, can't you? It will be difficult!"). But you can tell how cool it is to be the soul of the company at a party by the fire and with what eyes the girls will look at you. If you are an SHS pilot-instructor, then you should not immediately load up on how to assess, for example, the weather. Try to convey a sense of flight and romanticism.

It's the same here. If you explain balanced trees and at the end of the lecture say: "And the Olympiad can write this," - no one will understand you. If you drive through five-hour contests and analyzes, they will get bored and leave, looking for their childhood dream elsewhere. Some will remain, but without enthusiasm. So, solving problems is still more interesting than solving any crosswords or hanging around in social networks in applications. If you doubt the usefulness, the success - your doubts will be passed on to the recruits. If you yourself are convinced that the ICPC is cooler, bigger, more significant than all scientific student conferences and forums put together, that you can win, that you already succeeded (or did not succeed, but everyone is waiting for it) - they will believe you too. The most important thing is to believe all this yourself.

Indeed, it is very good when there is competition. It is even better when the university already has finalists, and there are young and green ones. The youngsters will sleep and see the first contest, at which they will finally, even for five minutes, bypass the old guys! For very beginners, even just being in the monitor above them for a minute is already happiness.

These are the basics of motivation. These are algorithmic problems that no one knows how to solve when at three in the morning you jump out of bed, turn on the computer to finish the code, finally pass this damn 80th test and get accepted, and then you feel like a little Mendeleev, who had an inspiration in a dream. This is a year of preparation, only five hours for which it was all, and a decisive problem, handed over at the very last minute. It is an honor to represent your city and country in what you do best. Well, then - they will figure it out themselves. Whoever entered only to get a crust and get a normal job is still hardly necessary for you. All the rest, and, as Mirzayanov wrote, mathematicians and gamers come if they love the process, if they find echoes of a childhood dream, if they are not afraid of difficulties, if they are ready to play, welcome.

They say that when he was born, Donald Knuth himself dropped in to see him. They say that when he was invited to work at Google, he rewrote the entire search algorithm 16 times in 15 minutes. They say that he watches the progress of quantum computing with a smile, since when he sees him, the numbers factorize themselves out of fear. But we know one thing for sure: Peter is the real god of sports programming.

Facts

  • Winner of numerous championships, Peter won twice in TopCoder and twice took second place in ACM ICPC.
  • In his spare time, Peter maintains a blog about regular contests “Algorithmic Problems for Dummies”: petr-mitrichev.blogspot.ru.
  • Now Mitrichev works at Google, where he deals with search quality. Peter also helps with the preparation of the Google Code Jam competitions.

Many people think that sports programmers are cool guys, real geeks who understand algorithms and solve complex problems. But they also say that it is very difficult for them to apply themselves somewhere later. This is true?

Sports programming and in general what we do at the Olympics is really not a thing that can be used to make a living. On the other hand, programming, like any other sport, is human development. Thanks to him, a person becomes smarter, better at programming, and better at looking for errors in programs. After this preparation, it is easier to work and do other interesting things.

Algorithms are definitely applicable in the practice of a programmer, although at work I have also come across algorithms that are more complicated than those that occur at the Olympiads. But at the Olympiads, we are limited to algorithms that, roughly speaking, can be written in half an hour or an hour. Therefore, a very specific, limited set of algorithms is used in problems there. In real life, everything is just more ... vast.

What language did you write solutions to problems in?

Java. At school I wrote in Pascal because I didn't know anything else then. And then, when it was necessary to choose what to switch to, Java was closer to Pascal.

In a competitive environment, you need to write a program in 20-30 minutes, and it should immediately work correctly. Therefore, it is very important that the language does not allow bugs to be planted. C ++, which most people use, differs in that it is quite easy to write the wrong program in it. You can accidentally forget something, assign the wrong type to a variable, but all this will somehow compile and somehow work. Most likely not as you expect.

In Java, if you make a mistake or typo, the program will most likely simply not compile. Everything is stricter here, as is the case with Pascal. This seemed more appropriate to me. The flip side of the coin is that Java programs often run 1.5 times slower than C ++ programs. Sometimes just these one and a half times is not enough for the program to fit into the problem statement.

Everyone can choose a programming language for themselves, right?

There are limitations. Of course, there are different competitions ... take Google Code Jam, for example. When we were deciding how best to do it, we figured out that you can work in any language. You download the input file with the task data to the computer, run your program on the computer, and then send the result to the server. What compiler / interpreter you have on your computer, you can use it. The disadvantage of this system is that people have different computers. Someone has a computer ten times more powerful than another. Therefore, it is necessary to create tasks where the wrong solution differs from the correct one in speed by at least a hundred times. So that if a person's computer is ten times slower, the correct solution works for him, or on a computer ten times faster, the wrong solution still does not work. Therefore, tasks are needed with a large gap between the correct and incorrect decisions in terms of work speed.

Topcoder, Codeforces and ACM use a standard system where you send source and they run it on their server. Here you are limited by what they have on the server. Most of the participants, 70–80% use C ++, another 20% use Java, and very few other languages. This, it seems to me, is such a cycle - new people who come to the competition begin to communicate with other, older participants, they teach newcomers what they can do themselves. As a result, new people also start using the same languages. So these two languages \u200b\u200bare not particularly suitable for competition, it just happened historically.

So all this is applicable in life? After all, it is probably difficult to find a job where this knowledge would be useful. Yes, you can go to Google or Yandex, but is it harder to come to any bank?

It seems to me that this is a very useful part of the skill, the part that is responsible for the ability to write a program the first time, without errors, or find an error in a friend's program. I myself did not work at the bank, but it seems to me that such skills would be useful there too. Although, of course, the algorithms themselves are not really applied in every work. But personally, this background helps me a lot.

You probably had a special story about how you got to Google?

Yes, there is no history, everything was the same as the others. Now I am engaged in a search (its general part, which does not depend on the country and language), but, unfortunately, I cannot tell anything about it, since this is a very confidential part.

Sports programming: pros and cons

Let me try to ask you a stupid question :). Why do you need to do sports programming, what do you think?

Everything here is very simple and similar to any other sport. You have to do it if you like it, if you enjoy it. It shouldn't be an end in itself. You need to take sports programming as a way to have a good time, meet interesting people, and so on.

And if you try to come up with a reason why you shouldn't waste time on sports programming?

I think you need to be aware that this is not the main thing in life. Have some other goals besides this one. If something starts to occupy absolutely your whole life, perhaps this is already a reason to think about at least taking a break.

But what does the practice say, is it possible, for example, to build a career around sports programming?

There are several people in Russia who are professionally involved in training new sports programmers - coaches. Andrey Stankevich, Misha Mirzayanov and others. All of them teach at universities, but spend a significant part of their working time precisely on preparing students and schoolchildren for programming competitions. For them, this is really a job and, one might say, a career.

Have you thought about that yourself? Do you ever participate in the jury or as a problem writer?

I tried to teach schoolchildren in school 57, where I studied myself. I tried to prepare teams for the Olympiads. Now in Moscow this topic is very active - there are teams at Moscow State University, Phystech, and the Higher School of Economics. But somehow it didn't work out for me with teaching.

As for the contests, first of all I help to create problems for the Google Code Jam, for our competition. Plus, I help with the ACM semi-finals, which takes place in St. Petersburg. This is a selection among Russian teams and teams from the former USSR for the final.

Can you earn money from competitions? After all, for the victory they give cash prizes.

The probability is too small. One prize for ten thousand participants? .. I would not call it earnings. To count on this as the main source of income ... it seems to me without a chance.

But as I said, there are many different competitions. The same Topcoder holds software development competitions. Let's say you need to develop a component for a program that does this and that. Based on the results, it is assessed who succeeded in what, and the best is used - this solution is bought by the client and pays money to the one who made this decision. People who do this full time, as I understand it, earn pretty decent money.

Contests today

Tell us in more detail, what kind of competitions are there now, how does all this happen?

Today there are two types of contests. There are weekly, regular competitions. They are run by two main sites - TopCoder and Codeforces. Each contest takes one and a half to two hours. There the participants are given several tasks to solve and send the program to the server. The organizers check if the program works.

TopCoder is the oldest and most famous site with weekly contests. They have the following rules. One hour and fifteen minutes is allotted to solve three problems.

The assignments are usually divided into very easy, medium and difficult. The organizers try to select them so that, say, five people solve all the problems, one hundred people - two, and all the rest solve at least one. Moreover, for each task it is important when you submit it - the later, the less points you get. This is how those people who have solved the same number of problems are divided. Then the points are added up. Common task worth 250 points. Average 500. Difficult 1000. On average, people from the first places get a thousand-something points for the competition.

Then they take a break of five minutes and another fifteen minutes are allotted to search for mistakes from others. You can open the solution of any person, for any problem in your "room". A “room” is when people participating in a competition are randomly split into groups of twenty. They are divided into "rooms". You can open any solution of any person from your "room". If the solution seems wrong to you, then you can drive in the input data on which it will be wrong. And if it really gives the wrong answer, you get 50 more points for it. This is, of course, less than the cost of the task. But this is again done to separate people. The main points are still awarded for solving problems, and not for finding errors.

After all this, the problems are checked on tests prepared by the jury. If the task doesn't work, the person gets 0 points.

There is also a second site, Russian, Codeforces. Their rules are slightly different, but the format is approximately the same - two hours and several tasks. If you like, this format can be called entertaining, in contrast to student Olympiads, which last for five hours.

But are there still large, annual contests?

Yes, besides the two described competitions that are held weekly, there are many more annual competitions. Usually they are arranged like this: some large company (Google, Yandex, TopСoder, IBM) holds a competition with several selection stages. The first stages take place over the Internet. And the final stage is already being held in a specific place, where all the finalists are taken. There are only five to ten such competitions, but they are long, so one of them happens all the time.

Are all these competitions individual?

Most of the competitions are now individual. Team competitions are mainly student competitions, the main one being ACM ICPC. And other student competitions are also usually made team competitions, because, roughly speaking, there is already a team there. It's easier to get people interested. Veteran competitions are usually personal.

The weekly competitions have a chess-like rating that is updated after each competition. Those who performed better get a plus, those who are worse get a minus. If you did not participate at all, the rating does not change. The system is built in such a way as to equalize people who visit often and rarely. There is no pressure to “participate constantly”. There are many people who are much older than me, they appear very rarely - once every two months - and they still have good ratingbecause they continue to be good at problem solving.

Yes, in the first place is Gena Korotkevich, a very smart student from Gomel, now he is studying at ITMO. Recently, at Codeforces, my result is worse, now I am sixth or fifth. There, too, Gena is in the first place.

Probably, playing online and offline is a completely different feeling and experience?

Sure. It seems to me very important positive side of sports programming is that all competitions end with an onsite round, where all the best come. Thanks to this, I met many cool people from all over the world. In general, the main "prize" in such competitions, it seems to me, is precisely meeting people. You spend time with them, communicate, learn something new. It is very funny that people from other countries, who often speak English poorly, are nevertheless very easy to understand because they have very similar interests.

In such competitions - with selections - more people usually participate than in regular ones. If a person has never participated anywhere, weekly competitions can be a problem. There are such problems that a person may not solve anything and get upset. In competitions with selections, everything is usually simpler, at least in the first stages. Their main idea is for everyone to have fun. Again, there is a tangible prize at the end - cash prizes for the first places. Plus a trip somewhere, for example to the Google office, is also quite a prize.

Does it happen that companies then try to use in life the developments from the solutions submitted by the contestants?

Rarely enough. The main goal of the companies that hold such competitions is simply to popularize programming. The second goal is to find new employees. But the second is not even so important. Usually a company organizes a competition just so that more people are interested in programming, and it's not even about those who directly participated in the competition. Therefore, such competitions are usually held by large companies.

Does competition change over time? Are they getting harder or, on the contrary, easier?

They get more complicated. More and more algorithms are considered to be something from the category “everyone should be able to do this”, “everyone knows it”. You need to think as much as ten years ago. It takes the same number of steps to build a solution, but the basic blocks that make up the solution have become more complex. People have learned more algorithms. Take, for example, the suffix tree: when it appeared, I was in school, and it seemed that this is a very cool algorithm, everyone who knows it is very smart and this is generally a revolution. Now the same problems are solved with the suffix automaton, which is a very simple algorithm that takes ten lines. That is, they learned to simplify standard things a lot. Therefore, now they are solving more complex problems.

About tasks and their compilation

How are the tasks for the competition composed? Are there compilers, people who already know how to do this, or is it some kind of crowdsourcing, where everyone can offer something of their own?

In the aforementioned weekly competitions, this is exactly how: everyone can offer their own problem. But there is a requirement that a person has previously participated in a sufficient number of competitions. A kind of check whether the person understands what the tasks should be about at all. Then you can send your assignments, and the jury will answer whether they can be used, whether they are suitable. If the problems are suitable, they are then given at competitions, and the author is paid money for this - not very large, but still.

Is it a special skill to come up with such tasks?

Oh yeah. You can come up with tasks based on solutions. Let's say you read some article in a scientific journal about an interesting algorithm. Or he simply found a certain algorithm and remembered that he had encountered it before, but had not seen it for a long time lately. You can come up with a task that requires its use.

The second way: when a problem arises in work or in life, and you understand that it can be used coolly. You may have to complicate something or change the restrictions, but then you get an interesting problem for the competition.

There are competitions of varying degrees of closeness to life. Usually the problem in a competition is not given in any formal terms, like "given: solve the equation such and such." Usually a certain background is given, a story. As in school textbooks on mathematics: "One pipe flows ten liters of water per minute." Therefore, first you need to somehow formalize this story, find a mathematical problem in it, and only then solve it.

There are other competitions as well. TopCoder calls this Marathon Match, and other companies also run similar contests. They are arranged a little differently. This is not a competition for algorithms, but for solving approximate problems. When there is no exact solution and you need to come up with the best option. Such competitions usually last two weeks or a month. You can send different solutions and observe that, yeah, now my solution is 20% better than the rest.

"Better" means faster, uses less memory and so on?

Yes. For example, you need to come up with a scheme for distributing bus traffic on the map of Moscow in order to use as few buses as possible. That is, the problem statement contains a certain parameter that needs to be optimized, but there is no single “correct solution”, only some approximate algorithms.

The same Topcoder held competitions together with NASA, and they say that the solutions that were offered to them were then really adapted and used on the ISS. There they were solving some specific problem, it seems, how to turn a solar battery so that it receives more energy.

Where to begin

From the point of view of training a good algorithmic programmer and participant in various contests, how to prepare yourself for this? If you imagine yourself in the shoes of a high school student or first year students?

I think the most standard way - try it. All competitions have an archive of previous contests, there are thousands of problems that can be solved at any time.

What if I take a task and don't know at all which side to approach it?

So, take it easier. They are different. There are problems that every second graduate of the school can solve. There are completely different levels of difficulty. It should be pretty easy to get in. There is no other way, it seems to me. Plus, this way you will immediately understand whether you like this activity or not.

What do you need to do to gain an algorithmic base? It is hardly necessary to immediately rush to read Knut.

It seems to me that you need to start with the tasks. Later, when you realize that you cannot solve any specific of them, in these competitions, each has an analysis. You can read the solution if you can't cope on your own. For example, the analysis indicates that a certain algorithm is used in solving the problem. You can read what this algorithm is, where else it is applied. So it is better than reading from the list "aha, I have an algorithm that I need to learn over the summer." Better to start from specific taskwhich you could not solve because you do not know any specific algorithm. This is more correct. You remember better, motivation is stronger. This way of learning algorithms is probably longer than the list, but it leads to better results.

If you want to "pump" yourself exactly according to algorithms, is there any literature, textbooks?

The most standard textbook is Cormen, Leiserson, Rivest with a donkey on the cover. "Algorithms: Construction and Analysis" is called. I don’t know, I haven’t studied for a long time, now there are probably new textbooks that could be better. But in my time, they used Cormen. The whip is more of a reference book. If something needs to be found and it is not found anywhere, most likely it will be there. But reading Knut in a row ... it's pretty sad.

Following the results of the regional semi-final of the ACM ICPC World Championship, the results of the All-Russian Olympiad for School Students in Programming became known. Within the walls of ITMO University, gold medals were awarded to children from Almaty, Astana and Moscow. Petersburgers shared the "silver" with their colleagues from Tbilisi, and the "bronze" went to the guys from Yekaterinburg, Izhevsk, Kremenchug and Vitebsk. The coaches of the St. Petersburg teams Andrei Lopatin and Andrei Stankevich, tutor of the Department of Computer Technologies at ITMO University Lidia Perovskaya, Dean of the Faculty information technologies and programming Vladimir Parfenov and world programming champions of different years told why the guys from the CIS have been breaking all records for the last 15 years.

ACM ICPC Winners from ITMO University

It's time to root for programmers

“Programming is the future: every home has a huge number of programmable devices, and these technologies continue to penetrate all areas of our lives. Just like engineers in the Soviet Union, programmers are now at the forefront of science and technology. Programming competitions are becoming more and more popular and spectacular sport, and the future is very promising, "- emphasizes Andrey Stankevich.

Lydia Perovskaya, as an experienced organizer of Olympiads of different levels, I agree with my colleague. According to her, programming competitions have a more complex structure than usual competitions. In the finals, teams of three most often compete, and there can be more than a hundred teams themselves. As the tutor of the Department of Computer Technologies is sure, there is a place for fans in sports programming: a person who understands programming can root for a team that is closer to him in the university, in the level of knowledge or strategy / brightness of the performance.

As the coach of the SPbU team notes Andrey Lopatin, programming contests are not only spectacular, but also truly rewarding. According to his observations, modern champions easily solve problems that seemed unsolvable 10 years ago. The efficiency and speed of the teams are growing, and the code is simplified, and this makes it possible to spend less time on developing and debugging programs. And this is already beneficial for large IT companies, for which it is important to reduce the cost of production processes.


“It is important that the guys can not only score well into the goal, but are at the cutting edge of technology, and every self-respecting large company holds its own major programming championship in order to find the best specialists later. After all, championship finalists are people who think quickly and find optimal solutions. Indeed, in life we \u200b\u200bneed not so much ideal solutions as optimal ones. Therefore, even those who did not receive prizes, but simply participated in one of the finals of major competitions, are very cool, and companies are literally fighting for them. ", - the coach summed up.

Victories inside and out

As noted Andrey Stankevich, sports programming is developing in waves. There are many development strategies for teams, but sometimes the key player influences the result. For example, thanks in large part to a talented student at ITMO University Gennady Korotkevich The team of the university twice became the absolute world champion of ACM ICPC. However, laurels also go to those who adhere to a long-term strategy, when one team has been honing their skills for many years and eventually deservedly breaks into the top - this is how the SPbU team became the absolute champion of ACM ICPC-2016. Therefore, there is nothing surprising when one of the teams or one of the players give way to others in the top: it means that someone got ahead thanks to long and hard work.


Generally speaking, the preparation of the children consists of training competitions, when participants solve the problems of tournaments of previous years, as well as theory - lectures, analysis of problems and other sometimes routine things. As Gennady Korotkevich adds, training camps, when teams from different cities of the post-Soviet space can unite and help each other improve, also play a significant role in the development of programmers with a university education.

“Communication between people plays a very important role in this sport. Teams from the CIS countries are successful because different universities come together, in fact, under the same roof, communicate and jointly do what they love. The training camp really develops, gives you a chance to prove yourself, to look at the task in a new way ", - the champion is sure.

As the director of the Center for the Development of IT Education at the Moscow Phystech Institute Alexei Maleev emphasizes, those who want to prove themselves in sports programming need to realize that they are waiting for 4-5 years of real plowing. And at the same time, no one can guarantee that in five years you will enter at least ten ACM ICPC. But this hard work, coupled with the cooperation of universities, allows graduates from Russia and the CIS countries to enter the global education market with a real trump card. And that is why the Russian school of programmers is in demand all over the world, the MIPT representative is sure.

ACM ICPC Champion agrees that sports programming benefits universities Niyaz Nigmatullin... According to an experienced participant in international contests, by how the university team performs in the championships, you can quickly understand what they can teach you at their alma mater. At the same time, you need to understand that sports programming is not at all what hundreds of students do, because only a few choose and go through the path of a sports programmer, Niyaz notes.


Economic question

“Now the question of the relevance of sports programming has moved into a purely economic aspect. The point is that you and I are at a certain critical point, when not long is left before a new round of information technology development. This is a world in which we will all soon find ourselves: the banking system, medicine will completely change, self-driving cars will appear, not to mention the fact that many professions will simply disappear - people will lose their jobs. But programmers will have a lot of it. And we see this already now: the demand for them is such that the salaries of physicists and mathematicians, even in the United States, are two times lower than those of programmers. And those countries that now have highly qualified personnel in the fieldIT will make a breakthrough in the next 10-20 years ", - Vladimir Parfenov is sure.

That is why Olympiads are needed. Vladimir Parfenov is sure to identify the best of the best, talents and those who just love programming and need support. In addition, talented children - that very future asset - are eager to compete and show themselves from an early age. There are 3,000 to 140 million such guys who will soon change the world in Russia alone, and the most important thing is to see those who can keep them company. After all, the rest of the world does not stand still, adds the dean of the Faculty of Information Technology and Programming - over the past 15 years, China has already made a colossal leap, and the United States remains on horseback due to its developed infrastructure.

“Our modern programmer starts working immediately in the fourth year, if he does not go to science, where, alas, the salary is still lower. At the same time, he receives a lot of offers from employers. Of course, if we are talking about St. Petersburg, our 400-500 IT companies are trying to create something new, and it is worth going to them. It is not uncommon for those who start working for large companies like Google to return home, sometimes with complaints. After all, it's one thing when you are sitting in the beautiful city of St. Petersburg, and quite another when you are in a village called Silicon Valley ... ", - the teacher laughs.


Doping

Despite endless questions about doping, young champions still point out that in sports programming, the main thing is to have a good head. For example, the 2016 world champion Stanislav Ershov admits that he loves to get enough sleep on the days of competitions, and also to eat sweets. At the same time, the young man notes that he does not dream of increased press attention and fame - like people of science, he prefers to stay away from the hype. Gennady Korotkevich, who is one of the few in the world who is able to make a living by sports programming, does not really believe in doping and is a medalist of many competitions. According to Gennady, it would be great if someday there were professional recommendations for athletes-programmers - on the regime or diet. In general, young people do not deny that in the future real doping for brain activity may appear more serious than chocolate, but they do not need it.

We are often asked about sports programming. What is the meaning of the Olympiads? How important are they when working on a real project? If important, is it too late for an 11-grader to start studying this direction? We, of course, passed the questions over to the experts.

Participation in the Olympiads develops the skills of working in a stressful situation, well, it loads the brain well. In general, during the preparation for the competition, I studied a fairly large number of algorithms and approaches to solving problems. In industrial development, you rarely have to deal with standard algorithms, at least you almost never need to implement them yourself. But knowing what is under the hood of a particular algorithm sometimes allows you to come up with some non-standard approach to solving a specific industrial problem. In any case, it is worth doing Olympiads regardless of whether these skills are important or not, it's just interesting 🙂

It's not too late to start studying in grade 11. A great example is the person with whom we played the ACM ICPC final together last year. He actively began to engage in Olympiads in the 2nd (!) Course and achieved very good results.

Promote Lower

Much depends on which project. Most (95%) projects are related to the automation of business processes, graphics, etc. In such projects, Olympiad skills practically do not play a role.

But there are projects in which it is required to solve a complex new problem - and here the experience of participation in the Olympiads is useful.

So it all depends on what kind of projects you have. The overwhelming majority of programmers do not have to deal with such projects.

Promote Lower

The Olympics are part of the sports programming world. As in any other sport, the meaning of the Olympiads, in my opinion, is to test oneself for strength, improve oneself and get moral satisfaction. I am sure that the experience of the Olympiads is useful in work, because constant training makes the brain more flexible and receptive to new tasks.

It is not too late for an eleventh grader to start participating in programming olympiads. I have many acquaintances who took up sports programming only at the university and achieved significant success. I myself took part in the first Olympiad at the end of the first year and I don’t think it was too late. If it happened in my last year, then I would be sorry.

Promote Lower

, microsoft technology evangelist, associate professor at Moscow Institute of Physics and Technology, Moscow Aviation Institute, teacher at the JUNIO-R children's camp

Programming Olympiads allow you to master well theoretical knowledge in the field of Computer Science, and they often help to enter a university. However, in practice, not all tasks require the skills acquired at the Olympiads.

There is such a concept - overqualification. If you have too good a theoretical knowledge of Computer Science, then you will be bored with solving everyday problems, and you can only realize your full potential in large companies such as Yandex, Mail.ru, or the same Microsoft. Therefore, the circle of employers you are interested in will be somewhat narrower, but the tasks to be solved will be much more interesting and global.

Contests like the Imagine Cup are better suited to gain real skills in working on projects. In this competition, you need to have rather an entrepreneurial talent in order to choose an interesting problem for solving, create a prototype of a software product and demonstrate it in the competition. In the long term, participation in such competitions develops teamwork skills and real work on projects well, and can also lead you to an entrepreneurial career path and your startup.

Grade 11 is a bit late, because there is too much time to do to enter the university, and it will be difficult to devote enough time to the Olympiads. But better late than never!

Promote Lower

The Olympics, like any sport, are extremely important for training willpower, focus, and other valuable qualities. Sports has nothing to do with applied programming, but it allows you to train in a truly competitive environment, which will then come in handy anywhere. It's never too late to start.

Promote Lower

An excerpt from ours, Stanislav answers the question “is it true that success at Olympiads in programming (mathematics) negatively correlates with work in the company? Do you have a lot of Olympiads in your team? "

Olympiads will not help directly. Just as knowledge of mathematical analysis will not help a person write programs in Java or Python. But Olympiad programming, if you like, is like sports sambo. It does not guarantee success in street fights, moreover, there are many examples when sambo athletes were severely injured in street fights, because there are no rules: they can stab and attack one of them. But a sambo athlete becomes a fighter much faster, having begun to study combat sambo (or other hand-to-hand combat), than a person who looks at the monitor screen with popcorn. Therefore, it is necessary to treat it exactly like this: Olympiad programming is good way improve your level. It will be easier for a person who does this to master a new field of computer science or programming method. This is a rewarding activity and should not be avoided. If a person works professionally in a company, makes products that are sold widely, it becomes like a hobby. A person who works for a company that produces products for reserve copyprobably in a few years becomes a world-class professional in this field. And Olympiad programming, if he starts to participate in it, is unlikely to help him much, so that he becomes a cut above his colleagues. But it's a rewarding hobby that develops the right skills.

In general, it's amazing how people refuse to study. When I was young, propaganda was very powerful: you have to learn, it is useful, knowledge is power, ignorance is darkness. I don't understand why your guys might have such questions. Knowledge is never superfluous. Ultimately, life is arranged in such a way that if a person understands something very, very deeply, it is easier for him to see how some area, which seems to be completely unrelated to him, works. Everything we do is ultimately similar. So, I was under the illusion about the builders until I started doing my first renovation. First and last. I found that the work of a builder in an apartment is very similar to the work of a team of programmers. And it is not only that all the problems that we face are at full height for the builders. And it's even worse there. Because the average level of the builder is below the average level of the programmer, in terms of education and general intelligence. They also make mistakes, they have bugs, there are both good and bad project managers. If it's bad, they can, figuratively, screw the toilet bowl to the ceiling, and then pretend that it was. Therefore, knowledge should not be avoided. Perhaps this particular knowledge will never be useful to me, but if I understood something, understood why this is so, and not otherwise, it will be useful to me at least as an analogy.

Promote Lower

This is already a very old holivar: are sports programmers suitable for harsh applied development, or are they some kind of beautiful white birds hovering in mathematical-algorithmic clouds and dying in more mundane conditions? There is a widespread myth that all sports programmers go to Google or at least Yandex, where they work with inspiration on search algorithms and others like them. Simple Belarusian outsourcing is not for them. Perhaps, if not a full stop, then at least a punctuation mark in this battle of opinions can put facts. We have collected information about all sports programmers in our country and, in terms of three criteria:

  • participated in the ACM ICPC finals;
  • spoke on behalf of the Belarusian University;
  • has already completed his studies at the university;

made a selection. The result is a list of twenty-one ACM ICPC finalists from Belarus. We were able to contact most of them and ask three simple questions:

  1. What is your current place of work and what is the position / essence of the work performed?
  2. Why this particular company / occupation?
  3. What are your plans for the future, how do you see it for yourself? Where would you like to move?

Which of them chose a managerial career, who remained faithful to sports programming, and who develops search algorithms, you will learn from "direct speech"belarusian finalists of the ACM ICPC.

Ivan Mikhnevich (ACM ICPC 2000)

  1. Wargaming Public Company Limited, Director.
  2. This is the result of growth in the group of companies from the very beginning of their working career.
  3. In reality, all this is already tired and it's time to start a new career, in a new place, in a new field (most likely, not IT).

Sergey Stepantsov (ACM ICPC 2000)

  1. I am currently working as Vice President Business Development at Intetics Co.
  2. Most of my career is associated with this particular company, here I managed to try myself in a variety of roles: I started as a testing specialist, and also worked as a programmer, project manager, and production unit manager. And as a result, he came to specialize in business development.
  3. I still don't feel old enough to stop developing myself :). I think that the future of the business part of my life will still delight you with many exciting twists and turns.

Vladimir Tankovich (ACM ICPC 2000, 2003)

  1. Now at Microsoft I work on Computer Vision algorithms for Kinecta. Prior to that, he was in search relevance.
  2. In this company since 2005. They brought me from the Republic of Belarus, and so far there was no point in switching. I joined this team because it allows me to engage in scientific work that does not go into a collection of articles, but into a finished product.
  3. There are no specific plans for the future. In IT, money is not a problem either in Minsk or here. So far, I am very interested in understanding Machine Learning and AI. It turns out that I do what I want almost all the time, and I also get paid well for it. That is, for the next 1-2 years I will do the same, and then we'll see. I get a lot of experience, and if I have an idea on how to reliably apply it, I will try a startup.

Alexey Kirkovsky (ACM ICPC 2002, 2005)

  1. NT LLC "LuxSoft", software engineer of the 2nd category.
  2. I really wanted to go to the famous Moscow bodyshop Luxoft, since since childhood I dreamed of doing hatch automation, but did not notice one letter and ended up in the Belarusian LuxSoft. There, without looking, I signed some papers, and now I work on a 20-year contract for a fixed salary in Belarusian rubles, which is enough only for gasoline.
  3. I plan to meet the standard for the number of lines per minute and become a software engineer of the 1st category. Then get a CCM for programming, which I will be assigned here, if there is not a single delay for work for the entire duration of the contract.

Alexey Danchenko (ACM ICPC 2002, 2005)

  1. NT OOO "LuxSoft". Software engineer. Recently I have been developing a domain-specific programming language for our product.
  2. The opportunity to work with friends on an interesting idea.
  3. Continue to enjoy life.

Evgeniy Gonchar (ACM ICPC 2003)

  1. Google Switzerland (Zurich), Senior Software Engineer. I am working on one of the web search infrastructure projects.
  2. From childhood he loved to program.
  3. I would like to advance in playing the electric guitar and once again go to New Zealand.

Ivan Metelsky (ACM ICPC 2003, 2004)

  1. TopCoder, Inc., Marathon / Algorithm Problem Coordinator. Launch of Marathon and Algorithm Competitions on TopCoder.
  2. In a sense, it just happened. More seriously - a good income, a relatively interesting job, it is difficult to find a better alternative.
  3. Plans for the future - it doesn't really matter where, but somewhere in the direction of somewhat less employment and more freedom of action. Perhaps some kind of your own business, not necessarily in IT.

Victoria Lebed (ACM ICPC 2004)

  1. I was and remain a mathematician. She was the only person in the team who did not touch the computer :) She did all the "side" work. I live and work in Paris. Now I have a temporary position at the University of Paris 7 - research and teaching. She recently received her PhD.
  2. This is an activity because it provides a rare opportunity to maintain personal and creative freedom.
  3. I try not to make plans for the future. Again, in order not to limit yourself to what-then a framework and not expose yourself personally to the burden of expectations, hopes and other things. I am finei represent the continuation of the path begun in the university and scientific environment, but I do not close the doorfor other options.

Maxim Osipov (ACM ICPC 2004)

  1. VironIT, director. Business management (mainly not operational, but aimed at changing sales processes, development, quality of work, etc.)
  2. The VironIT company, because this is my company, I am the owner. This is an occupation (non-operational management), because figuring out how to develop a business is the most interesting thing for me.
  3. Develop your company, switch to a product model, have a family, children. I see the future as interesting, difficult, but definitely positive.

Pavel Irzhavsky (ACM ICPC 2007, 2008)

  1. Lecturer at BSU, mathematician-programmer at Orientsoft, lecturer at ShAD, postgraduate student (formally, this is study, but in fact it is closer to work).
  2. Each lesson has both interesting and useful (besides the fact that they all bring income :)), and simple, which allows me to relax a little, and difficult, which allows me to develop. It seems to me that I become generally less effective when I start doing the same thing, roughly speaking, for 8 hours a day, and the daily change in occupation allows me to be at my peak.
  3. There are no significant changes in the plans for the future :)

Vladimir Kerus (ACM ICPC 2007, 2008)

  1. EPAM. Leading software engineer of the department mobile development... I am developing applications for Android.
  2. I love to learn new things, and in the current company it turns out to painlessly change the profile and find the right people-teachers.
  3. I have already planted a tree, I am saving up for the construction of a house, and I plan to have kids (ideally, my own Barcelona squad).

Sergey Tikhon (ACM ICPC 2009)

  1. EPAM Systems, Lead Software Engineer. Architect / developer of special projects.
  2. A friendly, strong team, interesting tasks, good opportunities for professional growth.
  3. Work in IT, but on the border with science, work on the implementation of Data Science in real applications and services ( machine learning, natural language processing, search technologies, modeling). Promotion, distribution and implementation of functional programming (blogging about F #).

Alexey Lobanov (ACM ICPC 2010)

  1. Yandex company, developer at Yandex.Maps. In parallel with this, I study at the graduate school of BSU and work as an assistant at the Department of DMA FPMI (I conduct practical classes in the course "Algorithms and data structures").
  2. Why Yandex: there are interesting tasks (including complex, science-intensive, algorithmic ones), comfortable working conditions and an excellent team. Why FPMI BSU: I believe that it is important to pass on your knowledge to the next generations of students.
  3. Plans for the future: successfully complete my postgraduate studies and try to defend the candidate's thesis.

Alexey Tolstikov (ACM ICPC 2010)

  1. BSU, assistant of the Department of Computational Mathematics, graduated from graduate school, teaching course« Parallel and distributed computing» (practice). Yandex,curator of academic programs, head of the Minsk branch of the School of Data Analysis (+ teacher in it), search developer.
  2. I can't do it in one sentence, but because: "I like it!"
  3. Not much to say. I move in all these directions.