There would be no happiness, but sports programming helped

A month ago, the next ACM-ICPC Programming World Cup ended ( results), which brilliantly performed by the teams of St. Petersburg and Yekaterinburg. Teams from Moscow, Perm, Novosibirsk, Saratov and Samara showed themselves a little worse. The team from Tomsk had an excellent result, the only way to the final of which was already a surprise for many. Note that almost all cities are millionaires; they have large universities and interesting companies to work with. Now imagine that you have lived all your childhood in a city with a population of 50 thousand people, then you move to a neighboring city with a small university with dubious quality of education, and the prospect of working at a factory for 20 thousand rubles a month looms ahead. There are effective ways to get out of this dark path, and one of them is ACM-ICPC. I want to share my story, tell how the ACM-ICPC experience in everyday work helps and how these competitions became my ticket to life. If you are a first-second year student and choose between earning money and preparing for programming tournaments, then I hope this article will help you decide.


Photo icpcnews icpcnews / CC

First I’ll tell you a little about myself. I studied at the most ordinary school in the most ordinary small town. I did not know about any programming competitions until I entered a university in a neighboring city. The names of the city and the university do not matter, since this story could occur in any province. I was lucky that I joined the ACM-ICPC participants on time, and at the university I knew about these competitions firsthand. Despite the fact that no more than one team trained regularly, that there was no competition among students, that there were no winners of All-Russian school olympiads among them, the teams won medals of the World Cup several times. So I managed to go a long way from a redneck to the final of ACM-ICPC, and after growing up to team lead in a large federal company. My teammates also had a successful life: one is a leading programmer in the same company, and the other got a job at Google. The guys from the teams that preceded us feel great both in Russia and abroad, working in well-known companies or opening their own. I repeat: none of them showed any supertalent at school age. All that unites them is a huge number of solved programming problems for the student years. And they are a vivid example of the fact that, even studying in the most ordinary university in a hopeless city, you can get out into the light. none of them showed any supertalent at school age. All that unites them is a huge number of solved programming problems for the student years. And they are a vivid example of the fact that, even studying in the most ordinary university in a hopeless city, you can get out into the light. none of them showed any supertalent at school age. All that unites them is a huge number of solved programming problems for the student years. And they are a vivid example of the fact that, even studying in the most ordinary university in a hopeless city, you can get out into the light.


Photo by icpcnews icpcnews / CC

So what should you do if you study at a university that is not capable of giving you a decent education? Develop yourself! It’s not enough for you to record lectures, solve laboratory tests, and cram tickets. Read books, learn technology, deepen fundamental knowledge. In the end, you can play sports or play KVN, it’s better than burning your free time to no avail. One way to develop is by participating in programming competitions. You can participate from tournament to tournament, or you can do it professionally, up to five days a week. Further, I will talk specifically about professionals.

Sometimes I go to tournaments with students and see that often after the first or second year they lose interest in competitions and try to get a job as soon as possible. For such students, ACM is associated with algorithms and only with them, and since they are most likely to never be useful at work, participation in tournaments is of no practical use. More than once or twice, I heard the question: “Here you have been participating in ACM for several years. So have these algorithms come in handy for you? ” The first thing to learn is classic algorithms - this is just a small part of ACM. This is a tool that helps solve problems. Exactly the same as a programming language, without knowledge of which it is impossible to write a solution. Most of the tasks are unique, their solution is not based on the use of some well-known algorithm, for each task, you need to invent your own algorithm by embedding classic ones into it as a small part of the overall solution. Most likely, you will not have to write a Dijkstra algorithm or a tree of segments at work, but in ACM you will use them only as bricks, not a foundation.

It is widely believed ( 1 , 2 , 3 ) that former ACMs write awful code because they are so used to competitions where time is running out and there is no time to think about quality. However, with the same success, we can say that racing drivers do not know how to drive around the city according to the rules, and skaters - to skate in a circle along with everyone else. Firstly, it is individual. Secondly, often for solving it is necessary to write so much code that it is simply impossible to save on quality: it will take a lot of precious time to correct errors (and world champions hold the same opinion) In addition, modern development environments stimulate writing decently and make it easy and fast. ACMs are not stupid guys, and they understand that on a real project the code must be of high quality, and they quickly learn from colleagues how to observe this quality. Already at least not slower than students who have not seen anything in life except laboratory work. On our project, a quarter of the developers are ACM-schiki, and all of them, as a rule, painlessly pass the code review.

So what gives ACM? Firstly, fundamental knowledge and mathematical apparatus. We were not told in lectures about the complexity of algorithms, we did not study the theory of graphs, and did not deal with optimization methods. ACM closes this gigantic gap thanks to a huge number of problems in computational and discrete mathematics, probability theory, various topics from theoretical computer science. Each task requires an analysis of the computational complexity of the algorithm and makes you think about the effectiveness of the data structures used. Thanks to their experience, ACMs don’t think about the complexity of operations of built-in data structures - they get these values ​​from the cache of their memory. They know their device and the intricacies of work, because they have come across more than one feature of the implementation in a particular version of the compiler. I am amazed at the interviewsbirthday paradox . Many candidates don’t understand at all how they use what they use every day, suspecting that List is under the hoodlinked list and index access is a slow operation. One can’t even talk about any database device.

Secondly, ACM develops the speed of thinking and typing. This is facilitated by the fact that there is not enough time in competitions, but there are many tasks, so you can’t hesitate. In addition, in few places during your studies you will be able to write as much code as during preparation for tournaments. There are few places where you can pump up quick wits as much. Thanks to this, in industrial development ACM-schiki can quickly create prototypes, refactor code, and combining these skills can work effectively on TDD , because the first two parts of TDD are in the spirit of competition: come up with tests for different cases, and then write any code, which passes them.

Third, ACM develops mindfulness. In tournaments, the wrong code is punished by a fine, so it is very important to write the correct code. It is very important to be able to test it. It is very important to quickly find bugs. None of the 16 developers of our project find more bugs at the review stage than ACM-shchiki. It’s just a skill developed over the years, and it is very valuable in industrial development.

Fourth, having achieved significant development in ACM, you can easily pass an interview in many world IT companies. At Google and Yandex, for example, interviews are almost entirely composed of ACM-like tasks. Even if you do not want to get into these companies, going to an interview is very cool. So, for example, I first went abroad thanks to the invitation of Google for an interview in Zurich.

In the end, ACM provides many non-technical goodies: trips around the country, friends and acquaintances from different cities, fluent reading in English (most tasks are written in English), prizes at tournaments, increased scholarships, respect from teachers, classmates and colleagues. ACM-ICPC brings variety to life.


Photo icpcnews icpcnews / CC

Finally, it is worth noting an important point: ACM does not guarantee anything. This is not some kind of magic pill, it is just a tool. You may be able to solve problems very well, but without the ability to communicate with people, you still won’t get into a team in which you can grow and develop. The ACM experience is just the perfect complement to your skills. This is a good line in the resume, you will be noticed, you will easily pass a technical interview, but you can easily fail to communicate with managers. And far from the fact that participation in tournaments will help you with your studies. Quite the contrary: if this movement is not developed in your university, if teachers have never heard of it, then combining training with study will be incredibly difficult, and management will be extremely reluctant to allocate money for trips to tournaments. But everyone once started from scratch,

Everything changes when significant success comes. These successes are almost the only noticeable achievement of the regional university, and the leadership begins to meet some difficult issues, teachers turn a blind eye to the labs that have not been handed over and are favorably disposed to exams. If at the same time there is also a good leader in the university, then he seeks increased scholarships and sponsorship support: all the years in senior courses I could not only not work, but also accumulate savings. But for all this, you need to work hard, make great efforts, and then everything will work out. ACM-ICPC is a great combination of interesting and useful extracurricular activities.

If you are a student of a little-known university in a godforsaken city, then ask yourself the question: “What are my prospects?” If you are not happy with the answer, if you want to be in a “cool company”, if you are ready to set ambitious goals and solve complex tasks, and not engage in routine, if you want to be proud of your work and not just do it if you don’t want to go to waste spend your student years, the ACM-ICPC will give you a huge chance to achieve all this. Start by participating in Codeforces tournaments- the most popular platform in Russia for conducting and discussing programming competitions. Find a leader, assemble a team, participate in regional tournaments, train. Your participation in ACM will last only a few years, but its echoes will make themselves felt for a very, very long time. For me, ACM-ICPC has become a major investment in life, for you it will at least turn into a useful and exciting experience.

Also popular now: