Sportsprogrammering og motivasjon. Sportsprogrammering og motivasjon Om oppgaver og deres forberedelse

Alt er veldig komplisert og samtidig enkelt. Hvorfor eksisterer sportsprogrammering i det hele tatt? Ikke «hvorfor å håndtere det», nemlig «hvorfor det eksisterer som et fenomen». Hvorfor trengs det sport i det hele tatt, ta i det minste intellektuelle, i hvert fall fysiske typer. Noen vil si det for helse, utvikling, alt det der? Ja, det er så mange skader i profesjonell idrett at ingen helse er nok. For penger? Ja, de blir alle millionærer i løpet av et år. Det er bare én sann grunn: ønsket om å vinne, å være annerledes enn andre, å være bedre, mer perfekt, mer betydningsfull. Gjør noe bra for folket ditt. Alt annet er en konsekvens. Hvis det ikke var for dette ønsket, som genererer konkurranse som sådan, ville det ikke vært alt annet. Samme her.

Hva tiltrekker folk i begynnelsen. Litt interesse, nyhet, en slags «wow-effekt». Men det går over. For fremveksten av bærekraftig motivasjon er det nødvendig med dypere mekanismer. Ellers, hvis det er noe igjen, vil det bare være nok til "for moro"-timer.

Derfor er det første og viktigste som kan motivere en nybegynner muligheten til å bli best i din virksomhet! Ikke bare en koder, hvilke tusenvis av tusen, men en mester. Tross alt drømmer hver person om noe stort og meningsfylt. Kanskje den gutten i barndommen drømte om å score mål i Champions League, og denne jenta drømte om å fremføre sanger på Eurovision. Han gikk på en idrettsskole, og hun gikk på en musikkskole, men det gikk ikke. Men matematikk har alltid vært en stor suksess, men hva er det som er kult med å være en nerdnerd, og løse grove, interessante gåter for deg alene? Og for en utmerket student som drømte om å bli astronaut, trommet foreldrene hans, som ikke brydde seg om drømmen hans, at astronauten i det minste skulle vite hvilke fysiske lover raketter flyr, så han begynte å løse fysikk, jo mer han går med et smell. Og nå har alle kommet inn på universitetet, og et sted inne begynner tanken allerede å ringe alarmerende: "Hva så? Kan jeg ikke gjøre noe enestående her i livet?" Tross alt, stort sett kan enhver utdannet programmerer til og med erstattes på jobben. Og her er en sjanse: å spille for byen din, for et universitet, for hele Russland, å vinne, å nå semifinalen, finalen, å gjøre noe som hvis du ikke gjør det, så er det ingen andre Vil gjøre det.

Da vi først begynte å programmere, i 11. klasse, ble vi fortalt om og om igjen hvordan det hele begynte. Som for første gang gikk lagene våre til semifinale. Hvordan bestå den første oppgaven. Hvordan kom de til finalen for første gang. Hvordan reiste du til utlandet? Hvordan de kjempet på like vilkår med de beste hodene på planeten! Og hjertet mitt sank av ønsket om å bli i det minste litt som dem. Vi så på tabellene for finalen og navnene blinket foran øynene våre: MIT, Harvard, Stanford! Vil alle studere der? Men her er det som er enda kulere: å rive alle de anerkjente utenlandske lagene til helvete! Hvordan Tarasovs lag raserte laget til de største hockeyproffene fra Canada 7:3 i den aller første kampen i Super Series. Her er den, livets utfordring! Og det er alt mulig! Dette er virkeligheten! Og det er det som virkelig gjør livet verdt å leve. Og kanskje en dag vil de samme historiene bli fortalt til rekrutter om oss på vårt eget universitet. Og alle vil drømme om å bli som oss. Slik ser nybegynnere på OL.

Du vet, vi er alle vant til disse setningene: "VM-semifinalist", "vinner av det nordøstlige europeiske mesterskapet", etc. Vi er ikke overrasket over dette. Men for en tilfeldig person fra gaten er slike prestasjoner bare plass! Og nykommere er folk fra gaten. Så hvorfor ikke bruke det? Tross alt er det å komme til semifinalen i NEERC verdensmesterskap for mange deltakere for livet den høyeste toppen de har tatt, den høyeste tittelen de har vunnet. Dette var ingen spøk nå.

Du har ti tusen studenter, og her er muligheten til å bli en av de tre elitestudentene som skal representere universitetet og byen i verdens viktigste studentkonkurranse. Hver av dem er allerede, som de sier, "en slik i mange tusen"! En eliteavdeling av universitetet ditt.

Ja, da blir det arbeidstimer å slite ut, men hvem har sagt at det er lett å bli verdensmester? Slitasje vil gå av seg selv når en person vet at han beveger seg mot et verdig mål. Ingen vil løpe et maraton eller bestige Everest uten forberedelse. Alle forstår dette. Men hvis du består dette, vil du ha noe du kan respektere deg selv for. Samme her. Ikke mindre.

Først nå drar ingen til fjells bare for berøvelses skyld, men til et maraton - slik at de ikke kommer seg ut av sengen en uke senere. Ingen går inn i bokseringen for kjærligheten til å bli truffet i hodet. Få masochister. Alle disse menneskene er drevet av noe annet. Samt sportsprogrammerere. Nemlig: målet!

Så hvis du er en gitarlærer, bør du ikke fortelle elevene om hvordan fingrene dine vil gjøre vondt og la dem prøve å ta barren med en gang ("ja, du kan ikke? Det blir vanskelig!"). Men du kan se hvor kult det er å være sjelen til selskapet på en bålfest og med hvilke øyne jentene vil se på deg. Hvis du er SAF-instruktørpilot, bør du ikke umiddelbart laste om hvordan du vurderer for eksempel været. Prøv å formidle en følelse av flukt og romantikk.

Samme her. Hvis du forklarer balanserte trær og på slutten av forelesningen sier: «Men en olympiade kan skrive dette», vil ingen forstå deg. Du vil kjøre gjennom fem timer lange konkurranser og analyser - de vil kjede seg og dra, på jakt etter barndomsdrømmen andre steder. Noen vil forbli, men uten entusiasme. Så å løse gåter er fortsatt mer interessant enn å løse noen kryssord eller henge rundt i sosiale nettverk i applikasjoner. Du vil tvile på nytten, suksessen - tvilen din vil bli overført til rekrutter. Hvis du selv er overbevist om at ICPC er kulere, større, mer betydningsfull enn alle vitenskapelige studentkonferanser og fora til sammen, at det er mulig å vinne, at det allerede har fungert (eller det fungerte ikke, men alle venter for det) - de vil tro deg også. Det viktigste er å tro på alt dette selv.

Det er faktisk veldig bra når det er konkurranse. Enda bedre er det når det allerede er finalister ved universitetet, og det er unge og grønne. Ungdommene vil sove og se den første konkurransen, hvor de til slutt vil, minst i fem minutter, men omgå de gamle fisene! For nybegynnere er det lykke å bare være i monitoren over dem i et minutt.

Dette er det grunnleggende om motivasjon. Dette er algoritmiske oppgaver som ingen vet hvordan de skal løse når du hopper ut av sengen klokken tre om morgenen, slår på datamaskinen for å fullføre koden, endelig består denne fordømte 80. testen og blir akseptert, og så føler du deg litt som Mendeleev , som hadde innsikt i en drøm. Dette er et år med forberedelser, kun fem timer det var alt for, og en avgjørende oppgave, overlevert i siste liten. Det er en ære å representere byen og landet ditt i det du er best på. Vel, da - de finner ut av det selv. Som handlet bare for å få en skorpe og få en normal jobb, vil fortsatt neppe trenge deg. Alle resten, og som Mirzayanov skrev, både matematikere og spillere kommer, hvis de elsker prosessen, hvis de finner ekko av en barndomsdrøm, hvis de ikke er redde for vanskeligheter, hvis de er klare til å spille, velkommen.

Dette er allerede en veldig gammel holivar: er sportsprogrammerere egnet for tøff anvendt utvikling, eller er de en slags vakre hvite fugler som svever i matematisk-algoritmiske skyer og dør under mer verdslige forhold? Det er en vanlig myte at alle sportsprogrammerere går til Google, eller i det minste Yandex, hvor de jobber med inspirasjon på søkealgoritmer og lignende. Enkel hviterussisk outsourcing er ikke for dem. Kanskje, om ikke en periode, så kan i det minste et skilletegn i denne meningskampen sette fakta. Vi samlet informasjon om alle sportsprogrammerere i landet vårt og ved å bruke tre kriterier:

  • deltok i ACM ICPC-finalen;
  • talte på vegne av det hviterussiske universitetet;
  • har allerede fullført studiene ved universitetet;

gjort et valg. Resultatet var en liste over tjueen ACM ICPC-finalister fra Hviterussland. Vi var i stand til å kontakte de fleste av dem og stille tre enkle spørsmål:

  1. Hva er din nåværende arbeidsplass og hva er stillingen / essensen av arbeidet som utføres?
  2. Hvorfor akkurat denne bedriften/yrket?
  3. Hva er dine planer for fremtiden, hvordan ser du på det selv? Hvor vil du flytte?

Hvem av dem valgte en lederkarriere, som forble trofast mot sportsprogrammering, og hvem som fortsatt utvikler søkealgoritmer, vil du lære av "direkte tale"Hviterussiske ACM ICPC-finalister.

Ivan Mikhnevich (ACM ICPC 2000)

  1. Wargaming Public Company Limited, direktør.
  2. Dette er et resultat av vekst i konsernet helt fra begynnelsen av hans arbeidskarriere.
  3. Virkelig, alt dette er allerede slitent, og det er på tide å starte en ny karriere, på et nytt sted, i et nytt område (mest sannsynlig ikke IT).

Sergey Stepantsov (ACM ICPC 2000)

  1. Jeg jobber for tiden som Vice President Business Development hos Intetics Co.
  2. Mesteparten av min karriere er knyttet til dette selskapet, her klarte jeg å prøve meg i en rekke roller: Jeg begynte som testspesialist, og jobbet også som programmerer, prosjektleder, leder for produksjonsavdelingen. Og kom etter hvert til å spesialisere seg på forretningsutvikling.
  3. Jeg føler meg fortsatt ikke gammel nok til å stoppe selvutviklingen :). Jeg tror at fremtiden til forretningsdelen av livet mitt fortsatt vil glede meg med mange spennende vendinger.

Vladimir Tankovich (ACM ICPC 2000, 2003)

  1. Nå hos Microsoft jobber jeg med Computer Vision-algoritmer for Kinecta. Før det var det søkerelevans.
  2. I dette selskapet siden 2005. De hentet meg fra republikken Hviterussland, og så langt var det ingen vits i å flytte. Jeg ble med i dette teamet fordi det lar deg gjøre vitenskapelig arbeid som ikke går inn i en samling av artikler, men til et ferdig produkt.
  3. Det er ingen konkrete planer for fremtiden. Innen IT er ikke penger et problem både i Minsk og her. Så langt er jeg veldig interessert i å forstå Machine Learning og AI. Det viser seg at jeg gjør nesten hele tiden det jeg vil, og jeg får også godt betalt for det. Det vil si at de neste 1-2 årene skal jeg gjøre det samme, så får vi se. Jeg får mye erfaring, og hvis jeg har en ide om hvordan jeg kan bruke den på en pålitelig måte, vil jeg prøve en oppstart.

Alexey Kirkovsky (ACM ICPC 2002, 2005)

  1. NT LLC "LuxSoft", programvareingeniør i 2. kategori.
  2. Jeg ønsket virkelig å gå til det berømte verkstedet LuxSoft i Moskva, for siden barndommen har jeg drømt om å automatisere luker, men jeg la ikke merke til en bokstav og endte opp i den hviterussiske LuxSoft. Der, uten å se, signerte jeg noen papirer, og nå jobber jeg under en 20-årskontrakt for en fast lønn i hviterussiske rubler, som bare er nok for bensin.
  3. Jeg planlegger å oppfylle standarden for antall linjer per minutt og bli programvareingeniør i 1. kategori. Da får du en CCM i programmering, som jeg får tildelt her dersom det ikke er en eneste forsinkelse for arbeid i hele kontraktens varighet.

Alexey Danchenko (ACM ICPC 2002, 2005)

  1. NT LLC "LuxSoft". Programvare ingeniør. Nylig har jeg utviklet et domenespesifikt programmeringsspråk for produktet vårt.
  2. Muligheten til å jobbe med venner om implementeringen av en interessant idé.
  3. Fortsett å nyte livet.

Evgeny Gonchar (ACM ICPC 2003)

  1. Google Sveits (Zürich), senior programvareingeniør. Jeg jobber med et av nettsøkinfrastrukturprosjektene.
  2. Jeg har elsket programmering siden barndommen.
  3. Jeg vil gjerne komme videre i å spille elektrisk gitar og reise til New Zealand igjen.

Ivan Metelsky (ACM ICPC 2003, 2004)

  1. TopCoder, Inc., Marathon/Algorithm Problem Coordinator. Lansering av maraton- og algoritmekonkurranser på TopCoder.
  2. På en måte bare skjedde det. Mer seriøst - en god inntekt, en relativt interessant jobb, det er vanskelig å finne et bedre alternativ.
  3. Planer for fremtiden – det spiller egentlig ingen rolle hvor, men et sted i retning av noe mindre sysselsetting og større handlefrihet. Kanskje en slags virksomhet, ikke nødvendigvis innen IT.

Victoria Lebed (ACM ICPC 2004)

  1. Jeg var og er fortsatt matematiker. Hun var den eneste personen i teamet som ikke rørte datamaskinen :) Hun gjorde alt "sidearbeidet". Jeg bor og jobber i Paris. Nå har jeg et vikariat ved University of Paris 7 – forskning og undervisning. Nylig mottatt doktorgrad.
  2. Dette er et yrke fordi det gir en sjelden mulighet til å bevare personlig og kreativ frihet.
  3. Jeg prøver å ikke legge noen planer for fremtiden. Igjen, for ikke å begrense deg til noenderetter rammene og ikke utsette deg personlig under byrden av forventninger, forhåpninger og andre ting. jeg har det braJeg ser for meg fortsettelsen av den påbegynte veien i det universitetsvitenskapelige miljøet, men jeg lukker ikke døren for andre alternativer.

Maxim Osipov (ACM ICPC 2004)

  1. VironIT, direktør. Bedriftsledelse (hovedsakelig ikke operativ, men rettet mot å endre prosessene for salg, utvikling, kvaliteten på arbeidet, etc.)
  2. VironIT-selskap, fordi dette er firmaet mitt, er jeg eieren. Dette er et yrke (ikke-operativ ledelse), fordi det å finne ut hvordan man kan utvikle en virksomhet er det mest interessante for meg.
  3. Utvikle din bedrift, bytt blant annet til en produktmodell, stift familie, barn. Jeg ser på fremtiden som interessant, utfordrende, men definitivt positiv.

Pavel Irzhavsky (ACM ICPC 2007, 2008)

  1. Foreleser ved Belarusian State University, matematiker-programmerer ved Orientsoft, lærer ved ShAD, doktorgradsstudent (formelt sett er dette en studie, men faktisk er det nærmere jobb).
  2. Hver leksjon har både interessant og nyttig (foruten det faktum at de alle gir inntekt :)), og enkel, slik at jeg kan slappe av litt, og kompleks, slik at jeg kan utvikle meg. Det virker for meg som om jeg generelt blir mindre effektiv når jeg begynner å gjøre det samme, grovt sett, 8 timer om dagen, og den daglige endringen av aktivitet gjør at jeg kan være på topp.
  3. Det er ingen vesentlige endringer i planene for fremtiden :)

Vladimir Kerus (ACM ICPC 2007, 2008)

  1. EPAM. Ledende programvareingeniør i avdelingen for mobilutvikling. Jeg utvikler applikasjoner for Android.
  2. Jeg liker å lære nye ting, og i den nåværende bedriften viser det seg å smertefritt endre profilen og finne de rette menneskene-lærerne.
  3. Jeg har allerede plantet et tre, jeg sparer for å bygge et hus, jeg planlegger å få barn (ideelt sett mitt eget Barcelona-lag).

Sergey Tikhon (ACM ICPC 2009)

  1. EPAM Systems, ledende programvareingeniør. Arkitekt/utvikler av spesialprosjekter.
  2. Hyggelig, sterkt team, interessante oppgaver, gode muligheter for faglig vekst.
  3. Arbeid innen IT, men på grensen til vitenskap, arbeid med implementering av Data Science i reelle applikasjoner og tjenester (maskinlæring, naturlig språkbehandling, søketeknologi, modellering). Propaganda, distribusjon og implementering av funksjonell programmering (jeg blogger på F#).

Alexey Lobanov (ACM ICPC 2010)

  1. Yandex-selskap, utvikler hos Yandex.Maps. Samtidig er jeg en doktorgradsstudent ved det hviterussiske statsuniversitetet og jobber som assistent ved DMA-avdelingen til FPMI (jeg gjennomfører praktiske klasser på kurset "Algorithms and Data Structures").
  2. Hvorfor Yandex: det er interessante oppgaver her (inkludert komplekse, kunnskapsintensive, algoritmiske), komfortable arbeidsforhold og et utmerket team. Hvorfor FPMI BSU: Jeg tror det er viktig å gi kunnskapen din videre til neste generasjoner studenter.
  3. Planer for fremtiden: fullføre PhD-studiene mine og prøve å forsvare min Ph.D.

Alexey Tolstikov (ACM ICPC 2010)

  1. Hviterussisk statsuniversitet, assistent ved Institutt for beregningsmatematikk, fullførte doktorgradsstudier, kursundervisning« Parallell og distribuert databehandling» (øve på). Yandex,kurator for akademiske programmer, leder for Minsk-grenen til School of Data Analysis (+ lærer i den), søkeutvikler.
  2. Jeg vil ikke kunne i én setning, men fordi: "Jeg liker det!"
  3. Ikke mye å si. Jeg beveger meg i alle disse retningene.

De sier at da han ble født, så Donald Knuth selv på ham. De sier at da han ble invitert til å jobbe hos Google, skrev han om hele søkealgoritmen 16 ganger på 15 minutter. De sier at han følger fremgangen til kvantedatabehandling med et smil, fordi de ved synet av tallene hans, av frykt, faktoriserer seg selv. Men en ting vet vi sikkert: Peter er en ekte gud for sportsprogrammering.

Fakta

  • Vinner av en rekke mesterskap, Piotr vant TopCoder to ganger og tok andreplassen i ACM ICPC to ganger.
  • På fritiden har Petr en blogg om vanlige konkurranser kalt Algorithmic Problems for Dummies: petr-mitrichev.blogspot.ru.
  • Mitrichev jobber nå i Google, hvor han fokuserer på søkekvalitet. Peter hjelper også til med å forberede Google Code Jam-konkurransen.

Mange tror at sportsprogrammerere er tøffinger, ekte nerder som forstår algoritmer og løser komplekse problemer. Men de sier også at det er veldig vanskelig for dem å søke seg et sted senere. Dette er sant?

Sportsprogrammering og generelt det vi gjør på olympiadene er virkelig ikke den typen ting du kan leve av. På den annen side er programmering, som enhver annen sport, utvikling for en person. Takket være ham blir en person smartere, bedre til å programmere, bedre på jakt etter feil i programmer. Etter en slik forberedelse er det lettere å jobbe og gjøre andre interessante ting.

Algoritmer er definitivt anvendelige i praktiseringen av en programmerer, selv om jeg på jobb også har møtt algoritmer som er mer kompliserte enn de som er i olympiader. Men på olympiadene er vi begrenset av algoritmer som grovt sett kan skrives på en halvtime eller en time. Derfor brukes ganske spesifikke, begrensede sett med algoritmer der i oppgaver. I det virkelige liv er alt bare mer... stort.

På hvilket språk skrev du løsninger på problemer?

På Java. På skolen skrev jeg i Pascal, for da visste jeg ikke noe annet. Og så, når det var nødvendig å velge hva de skulle bytte til, viste Java seg å være nærmere Pascal.

I et konkurransemiljø må du skrive et program på 20-30 minutter, og det skal umiddelbart fungere riktig. Derfor er det veldig viktig at språket ikke tillater å plante insekter. C++, som de fleste bruker, er annerledes ved at det er ganske enkelt å skrive feil program i den. Du kan ved et uhell glemme noe, tilordne feil type til en variabel, men alt dette vil på en eller annen måte kompilere og på en eller annen måte fungere. Mest sannsynlig ikke på den måten du forventer.

I Java, hvis du gjør en feil eller skrivefeil, vil programmet mest sannsynlig ikke kompilere. Her er alt strengere, som i tilfellet med Pascal. Det virket mer passende for meg. Den andre siden av medaljen er at Java-programmer ofte kjører halvannen ganger langsommere enn C++-programmer. Noen ganger er ikke disse en og en halv gangene nok til at programmet passer inn i tilstanden til problemet.

Alle kan velge et programmeringsspråk, ikke sant?

Det er restriksjoner. Selvfølgelig er det forskjellige konkurranser ... ta Google Code Jam, for eksempel. Da vi bestemte oss for hvordan vi best skulle gjøre det, kom vi på ideen om at vi kan jobbe på alle språk. Du laster ned inndatafilen med oppgavedataene til datamaskinen, kjører programmet på datamaskinen og sender deretter resultatet til serveren. Uansett hvilken kompilator/tolk du har på datamaskinen din, kan du bruke den. Ulempen med dette systemet er at folk har forskjellige datamaskiner. Noen har en datamaskin som er ti ganger kraftigere enn en annen. Derfor er det nødvendig å lage problemer der feil løsning avviker fra den riktige i hastighet med minst hundre ganger. Slik at hvis en person har en datamaskin ti ganger tregere, fungerte den riktige løsningen for ham, eller feil løsning fungerte fortsatt ikke på en datamaskin ti ganger raskere. Derfor trenger vi oppgaver med et stort gap mellom riktige og feilaktige løsninger når det gjelder hastighet.

Topcoder, Codeforces og ACM bruker et standard system hvor du sender inn kildekode og de kjører den på serveren sin. Her er du begrenset av hva de har på serveren. De fleste av deltakerne, 70-80% bruker C++, ytterligere 20% bruker Java, det er svært få andre språk. Dette, ser det ut til, er en slik syklus - nye mennesker som kommer til konkurranser begynner å kommunisere med andre, eldre deltakere, de lærer nybegynnere hva de kan gjøre selv. Som et resultat begynner også nye mennesker å bruke de samme språkene. Så disse to språkene er ikke spesielt egnet for konkurranser, det skjedde bare historisk.

Betyr det at alt gjelder i det virkelige liv? Tross alt er det absolutt vanskelig å finne en jobb der denne kunnskapen vil være nyttig. Ja, du kan gå til Google eller Yandex, men er det allerede vanskeligere å komme til en hvilken som helst bank?

Det virker for meg som om dette er en veldig nyttig del av ferdigheten, den delen som er ansvarlig for muligheten til å skrive et program første gang, uten feil, eller å finne en feil i en venns program. Selv jobbet jeg ikke i bank, men det ser ut til at slike ferdigheter ville være nyttige der også. Selv om selvfølgelig ikke algoritmene i seg selv brukes i noe arbeid. Men personlig hjelper denne bakgrunnen meg mye.

Du hadde sikkert en spesiell historie, hvordan kom du inn på Google?

Ja, det er ingen historie, alt var som de andre. Nå gjør jeg søket (den generelle delen av det, som ikke avhenger av land og språk), men jeg kan dessverre ikke si noe om det, siden dette er en veldig konfidensiell del.

Sportsprogrammering: fordeler og ulemper

La meg prøve å stille deg et dumt spørsmål :). Hvorfor trenger du å gjøre sportsprogrammering, hva synes du?

Alt her er veldig enkelt og ligner på enhver annen sport. Du må gjøre det hvis du liker det, hvis du liker det. Det bør ikke være et mål i seg selv. Du må oppfatte sportsprogrammering som en måte å ha det bra, møte interessante mennesker og så videre.

Og hvis du prøver å komme med en grunn til hvorfor du ikke bør bruke tid på sportsprogrammering?

Jeg tror du må være klar over at dette ikke er hovedsaken i livet. Ha noen andre mål enn dette. Hvis noe begynner å oppta absolutt hele livet ditt, er dette sannsynligvis allerede en grunn til å tenke på i det minste å ta en pause.

Men hva sier praksis, er det for eksempel mulig å bygge en karriere rundt sportsprogrammering?

Det er flere personer i Russland som profesjonelt trener nye sportsprogrammerere - trenere. Andrei Stankevich, Misha Mirzayanov og andre. Alle underviser ved universiteter, men de bruker en betydelig del av arbeidstiden på å forberede studenter og skoleelever til programmeringskonkurranser. For dem er dette virkelig en jobb og, kan man si, en karriere.

Har du tenkt på dette selv? Ingen steder deltar du i juryen eller som kompilator av problemer?

Jeg prøvde å undervise skoleelever på 57. skolen, hvor jeg selv studerte. Jeg prøvde å forberede lag til olympiadene. Nå i Moskva er dette emnet veldig aktivt - det er team ved Moscow State University, Physicotechnical Institute, Higher School of Economics. Men jeg kom dårlig overens med undervisning.

Når det gjelder konkurransene, hjelper jeg først og fremst med oppgaver for Google Code Jam, for konkurransen vår. I tillegg hjelper jeg til med ACM-semifinalen, som finner sted i St. Petersburg. Dette er et utvalg blant russiske lag og lag fra det tidligere USSR for finalen.

Er det mulig å tjene penger i konkurranser? Tross alt gir de pengepremier for seieren.

For liten sjanse. Én premie for ti tusen deltakere?.. Jeg vil ikke kalle det inntjening. Regn med dette som hovedinntektskilden ... det virker for meg som om det ikke er noen sjanse.

Men det er som sagt mange forskjellige konkurranser. Den samme Topcoder holderr. La oss si at du må utvikle en komponent for et program som gjør noe. Basert på resultatene vurderer de hvem som lyktes, og bruker den beste - denne løsningen kjøpes av oppdragsgiver og betaler penger til den som tok denne avgjørelsen. Folk som gjør dette på heltid, slik jeg forstår det, tjener ganske bra.

Konkurranser i dag

Fortell oss mer om hva konkurranser er nå, hvordan skjer det hele?

I dag er det to typer konkurranser. Det er ukentlige, vanlige konkurranser. De holdes av to hovedsider - TopCoder og Codeforces. Hver konkurranse tar en og en halv til to timer. Der får deltakerne flere problemer de skal løse og sende programmet til serveren. Arrangørene sjekker om programmet fungerer.

TopCoder er den eldste og mest kjente siden med ukentlige konkurranser. De har følgende regler. En time og femten minutter er avsatt til å løse tre oppgaver.

Oppgaver er vanligvis delt inn i veldig lett, middels og vanskelig. Arrangørene prøver å velge dem slik at for eksempel fem personer løser alle problemene, hundre personer - to, og alle resten løser minst én. Dessuten er det viktig for hver oppgave når du sender den - jo senere, jo færre poeng får du. Så de menneskene som løste like mange oppgaver er delt. Deretter legges poengene sammen. En vanlig oppgave koster 250 poeng. Snitt 500. Vanskelig 1000. I snitt får folk fra førsteplassene tusen og noe poeng per konkurranse.

Deretter tar de en pause i fem minutter og ytterligere femten minutter er avsatt til å finne feil fra andre. Du kan åpne løsningen til enhver person, for enhver oppgave i "rommet". Et "rom" er når personer som deltar i en konkurranse blir tilfeldig delt inn i grupper på tjue. De er delt inn i "rom". Du kan åpne hvilken som helst løsning for enhver person fra "rommet". Hvis løsningen virker feil for deg, kan du kjøre inn inngangsdataene som det blir feil på. Og hvis det gir et feil svar, får du ytterligere 50 poeng for det. Dette er selvfølgelig mindre enn kostnadene for oppgaven. Men dette er igjen gjort for å skille folk. Hovedpoengene gis fortsatt for å løse problemer, og ikke for å finne feil.

Etter alt dette blir oppgavene kontrollert på prøver utarbeidet av juryen. Hvis oppgaven ikke fungerer, får personen 0 poeng.

Det er også et annet nettsted, russisk, - Codeforces. Reglene deres er litt forskjellige, men formatet er omtrent det samme - to timer og flere oppgaver. Hvis du vil, kan dette formatet kalles underholdende, i motsetning til studentolympiader, som varer i fem timer.

Men er det fortsatt store, årlige konkurranser?

Ja, i tillegg til de to beskrevne konkurransene som går ukentlig, er det mange flere årlige konkurranser. Vanligvis er de arrangert slik: et stort selskap (Google, Yandex, TopСoder, IBM) holder en konkurranse med flere valgstadier. De første trinnene er online. Og siste etappe holdes allerede på et bestemt sted hvor alle finalistene blir tatt. Det er bare fem eller ti slike konkurranser, men de er lange, så noen av dem skjer hele tiden.

Er alle disse konkurransene individuelle?

De fleste konkurranser er nå individuelle. Lagkonkurranser er hovedsakelig studentkonkurranser, den viktigste er ACM ICPC. Og andre studentkonkurranser lages også vanligvis som lagkonkurranser, for grovt sett er det allerede et lag der. Dette gjør det lettere å få folk interessert. Veterankonkurranser er vanligvis personlige.

Ukentlige konkurranser har en vurdering, som i sjakk, som oppdateres etter hver konkurranse. De som presterte bedre får pluss, de som presterer dårligere får minus. Hvis du ikke deltok i det hele tatt, endres ikke vurderingen. Systemet er utformet på en slik måte at det utjevner personer som besøker ofte og sjelden. Det er ikke noe press om å "delta hele tiden". Det er mange mennesker som er mye eldre enn meg, de dukker opp veldig sjelden - en gang annenhver måned - og fortsatt har de en god vurdering, fordi de fortsetter å løse problemer godt.

Ja, i første omgang er Gena Korotkevich, en veldig smart student fra Gomel, nå studerer han ved ITMO. Hos Codeforces har jeg hatt et dårligere resultat i det siste, nå er jeg sjette eller femte. Også der er Gena i første rekke.

Kanskje det å spille online og offline er en helt annen følelse og opplevelse?

Sikkert. Det virker for meg som en veldig viktig positiv side ved sportsprogrammering er at alle konkurranser avsluttes med en runde på stedet, hvor alle de beste kommer sammen. Takket være dette møtte jeg mange kule mennesker fra hele verden. Generelt ser det ut til at hovedpremien i slike konkurranser er å møte mennesker. Du tilbringer tid med dem, kommuniserer, lærer noe nytt. Det er veldig morsomt at folk fra andre land, som ofte snakker dårlig engelsk, likevel er veldig lette å forstå, fordi de har veldig like interesser.

I slike konkurranser – med kåringer – deltar vanligvis flere enn i vanlige. Hvis en person aldri har deltatt noe sted, kan ukentlige konkurranser være et problem. Det er slike oppgaver at en person ikke kan løse noe og bli opprørt. I konkurranser med kåringer er alt som regel lettere, i alle fall i de tidlige stadiene. Hovedtanken deres er at alle skal ha det gøy. Igjen er det en håndgripelig premie på slutten - pengepremier for førsteplasser. I tillegg er en tur et sted, for eksempel til Google-kontoret, også litt av en premie.

Skjer det at bedrifter da prøver å bruke utviklingen fra løsningene som deltakerne har sendt inn i livet?

Ganske sjelden. Hovedmålet til selskaper som holder slike konkurranser er ganske enkelt å popularisere programmering. Det andre målet er å finne nye medarbeidere. Men det andre er ikke engang så viktig. Vanligvis arrangerer en bedrift en konkurranse spesifikt for å få flere til å interessere seg for programmering, og det handler ikke engang om de som direkte deltok i konkurransen. Derfor holdes slike konkurranser vanligvis av store selskaper.

Endrer konkurranser seg over tid? Blir de vanskeligere eller tvert imot lettere?

De blir vanskeligere. Flere og flere algoritmer anses å være noe fra kategorien "alle burde kunne gjøre dette", "alle vet dette". Du må tenke så mye som for ti år siden. Det kreves like mange trinn for å bygge en løsning, men byggeklossene som utgjør løsningen er blitt mer komplekse. Folk har lært flere algoritmer. Ta for eksempel suffiksetreet: da det dukket opp, var jeg på skolen, og det virket som om dette er en veldig kul algoritme, alle som kan det er veldig smarte og dette er generelt en revolusjon. Nå løses de samme problemene ved hjelp av en suffiksautomat, og dette er en veldig enkel algoritme som tar ti linjer. Det vil si at standard ting har lært seg å forenkle. Derfor løser de nå mer komplekse problemer.

Om oppgaver og deres forberedelse

Hvordan er oppgavene for konkurransen? Finnes det kompilatorer, folk som allerede vet hvordan man gjør dette, eller er det en slags crowdsourcing, hvor alle kan tilby noe eget?

I de nevnte ukentlige konkurransene er dette akkurat tilfelle: alle kan tilby sitt eget problem. Men det er krav om at en person tidligere har deltatt i tilstrekkelig antall konkurranser. En slags sjekk om en person forstår hva oppgaver skal handle om generelt. Etter det kan du sende oppgavene dine, og juryen vil svare på om de kan brukes, om de egner seg. Hvis problemene egner seg, gis de så på konkurranser, og forfatteren får betalt penger for dette - ikke veldig stort, men likevel.

Å tenke på slike oppgaver er en spesiell ferdighet, er det ikke?

Å ja. Du kan komme med problemer basert på løsninger. La oss si at du leser en artikkel i et vitenskapelig tidsskrift om en interessant algoritme. Eller han fant bare en viss algoritme og husket at han hadde kommet over den før, men nylig hadde han ikke sett den på lenge. Du kan komme opp med en oppgave som krever bruk.

Den andre måten: når et visst problem oppstår i jobben eller i livet, og du skjønner at det kan være kult å bruke. Du må kanskje komplisere noe eller endre restriksjonene, men da får du en interessant oppgave for konkurrentene.

Det er konkurranser av ulik grad av nærhet til livet. Vanligvis er oppgaven ved konkurranser ikke gitt i noen formelle termer, som "gitt: løs en ligning slik og slik". Vanligvis er en viss bakgrunn, en historie, bare gitt. Som i skolens lærebøker om matematikk: "Ti liter vann i minuttet strømmer gjennom ett rør." Derfor må du først på en eller annen måte formalisere denne historien, finne et matematisk problem i den, og først deretter løse den.

Det er andre konkurranser også. TopCoder kaller det en Marathon Match, og andre selskaper kjører lignende konkurranser også. De er satt opp litt annerledes. Dette er allerede en konkurranse ikke i algoritmer, men i å løse omtrentlige problemer. Når det ikke er noen eksakt løsning og du må finne et alternativ så godt som mulig. Slike konkurranser varer vanligvis i to uker, en måned. Du kan sende forskjellige løsninger og se at, ja, nå er løsningen min 20 % bedre enn de andre.

"Bedre" - i betydningen raskere, bruker mindre minne, og så videre?

Ja. For eksempel må du komme opp med en ordning for fordeling av busstrafikk på et kart over Moskva for å bruke så få busser som mulig. Det vil si at i tilstanden til problemet er det en viss parameter som må optimaliseres, men det er ingen enkelt "riktig løsning", bare noen omtrentlige algoritmer.

Den samme Topcoderen holdt konkurranser med NASA, og de sier at løsningene de ble tilbudt da virkelig ble tilpasset og brukt på ISS. De løste et spesifikt problem, ser det ut til, hvordan man snur solbatteriet slik at det får mer energi.

Hvor du skal begynne

Fra synspunktet om å forberede en god algoritmisk programmerer og deltaker i forskjellige konkurranser - hvordan forberede deg på dette? Hvis du ser for deg selv i stedet for en videregående elev eller førsteårsstudenter?

Jeg tror den mest standard måten er å prøve det. Alle konkurranser har et arkiv med tidligere konkurranser tilgjengelig, det er tusenvis av problemer som kan løses når som helst.

Hva om jeg tar en oppgave og ikke vet hvordan jeg skal gripe den an?

Så ta det før. De er forskjellige. Det er oppgaver som annenhver skoleutdannet kan løse. Det er helt forskjellige vanskelighetsgrader. Å komme inn skal være ganske enkelt. Det er ingen annen måte, virker det for meg. Pluss, på denne måten vil du umiddelbart forstå om du liker denne aktiviteten eller ikke.

Hva må gjøres for å få en algoritmisk base? Det er neppe nødvendig umiddelbart å skynde seg å lese Knuth.

Det virker for meg som det er nødvendig å starte med oppgaver. Først senere, når du innser at du ikke kan løse noen spesielle av dem, har hver og en i disse konkurransene en analyse. Du kan lese løsningen hvis du ikke klarer det på egen hånd. For eksempel er det i analysen indikert at en viss algoritme brukes til å løse problemet. Du kan lese hva denne algoritmen er, hvor ellers den brukes. Dette er bedre enn å lese gjennom listen "ja, jeg har en algoritme som jeg må lære meg i løpet av sommeren." Det er bedre å ta utgangspunkt i et spesifikt problem som du ikke kunne løse fordi du ikke kjenner noen spesiell algoritme. Dette er mer riktig. Du husker bedre, motivasjonen er sterkere. Denne måten å studere algoritmer på er nok lengre enn listen, men den fører til bedre resultater.

Hvis du vil "pumpe" deg selv med algoritmer, finnes det litteratur, lærebøker?

Den mest standard læreboken - Cormen, Leyzerson, Rivest med et esel på omslaget. «Algorithms: Construction and Analysis» kalles. Jeg vet ikke, jeg har ikke studert på lenge, nå er det sikkert nye lærebøker som kan bli bedre. Men i min tid brukte de Kormen. Pisken er snarere en slags oppslagsbok. Hvis noe trenger å bli funnet og det er ingen steder å finne, er sjansen stor for at det vil være der. Men å lese Knuth på rad... det er en ganske trist ting å gjøre.

Etter resultatene fra de regionale semifinalene i ACM ICPC verdensmesterskap, ble resultatene fra den all-russiske olympiade for skoleelever i programmering kjent. Innenfor murene til ITMO-universitetet ble det delt ut gullmedaljer til barn fra Almaty, Astana og Moskva. Petersburgerne delte "sølvet" med kolleger fra Tbilisi, og "bronsen" gikk til gutta fra Jekaterinburg, Izhevsk, Kremenchug og Vitebsk. St. Petersburg-lagtrenerne Andrey Lopatin og Andrey Stankevich, lærer ved Institutt for datateknologi ved ITMO-universitetet Lidia Perovskaya, dekan ved fakultetet for informasjonsteknologi og programmering Vladimir Parfyonov, og verdensmestere i programmering fra forskjellige år fortalte hvorfor gutta fra CIS har slått alle rekorder de siste 15 årene.

ACM ICPC-vinnere fra ITMO University

Det er på tide å rote til programmererne

"Programmering er fremtiden: hvert hjem har et stort antall programmerbare enheter, og disse teknologiene fortsetter å trenge inn i alle områder av livet vårt. Akkurat som ingeniører i Sovjetunionen, er programmerere nå i forkant av vitenskap og teknologi. Programmeringskonkurranser blir en stadig mer populær og spektakulær sport, og fremtiden er veldig lovende.»- legger vekt på Andrei Stankevich.

Lydia Perovskaya, Som en erfaren arrangør av olympiader på ulike nivåer er jeg enig med min kollega. Ifølge henne har programmeringskonkurranser en mer kompleks struktur enn vanlige konkurranser. I finalen kjemper oftest lag på tre personer, og lagene selv kan være mer enn hundre. Som veilederen ved Institutt for datateknologi er sikker på, er det et sted for fans innen sportsprogrammering: en person som forstår programmering kan rote seg til et lag som er nærmere ham når det gjelder universitet, kunnskapsnivå eller strategi/lysstyrke. opptreden.

Som treneren for St Petersburg University-laget bemerker Andrey Lopatin, programmeringskonkurranser er ikke bare spektakulære, men også veldig nyttige. I følge hans observasjoner løser moderne mestere enkelt problemer som virket uløselige for 10 år siden. Effektiviteten og hastigheten på kommandoer vokser, og koden er forenklet, noe som gjør det mulig å bruke mindre tid på å utvikle og feilsøke programmer. Og dette er allerede gunstig for store IT-selskaper som det er viktig å redusere kostnadene for produksjonsprosesser for.


«Det er viktig at gutta ikke bare er flinke til å score ballen i mål, men er i forkant av teknologien, og hvert stort selskap med respekt for seg selv holder sitt eget store programmeringsmesterskap for å finne de beste spesialistene. Mesterskapsfinalister er tross alt mennesker som tenker raskt og finner optimale løsninger. Faktisk, i livet trenger vi ikke så mye ideelle løsninger som optimale. Derfor er selv de som ikke mottok premier, men bare deltok i en av finalene i store konkurranser, veldig kule, og selskaper kjemper bokstavelig talt om dem.», konkluderte treneren.

Seier fra og til

Som notert Andrei Stankevich, sportsprogrammering utvikler seg i bølger. Det er mange lagutviklingsstrategier, men noen ganger påvirker en nøkkelspiller resultatet. For eksempel, mye takket være den talentfulle ITMO-universitetsstudenten Gennady Korotkevich universitetslaget ble den absolutte verdensmesteren ACM ICPC to ganger. Men laurbærene går også til de som følger en langsiktig strategi, når ett lag har finpusset sine ferdigheter i mange år og til slutt fortjent bryter inn i toppen - slik ble St Petersburg University-laget den absolutte mester for ACM ICPC-2016. Derfor er det ikke overraskende når ett av lagene eller en av spillerne viker til toppen av de andre: Det betyr at noen har tatt ledelsen takket være lang og hardt arbeid.


Generelt sett består forberedelsene til gutta av treningskonkurranser, når deltakerne løser problemer fra tidligere års turneringer, samt teori - forelesninger, problemanalyse og andre til tider rutinemessige ting. Som Gennady Korotkevich legger til, spiller leirer også en betydelig rolle i utviklingen av universitetsutdannede programmerere, når lag fra forskjellige byer i det post-sovjetiske rommet kan forene seg og hjelpe hverandre med å forbedre seg.

«Kommunikasjon mellom mennesker spiller en veldig viktig rolle i denne sporten. Team fra CIS-landene er vellykkede fordi forskjellige universiteter samles, faktisk under ett tak, kommuniserer og gjør det de elsker sammen. Treningsleirer utvikler seg virkelig, gir deg en sjanse til å bevise deg selv, se på oppgaven på en ny måte", er mesteren sikker.

Som Aleksey Maleev, direktør for Senter for utvikling av IT-utdanning ved Moscow Phystech, understreker, må de som ønsker å bevise seg innen sportsprogrammering være klar over at 4-5 år med ekte pløying venter dem. Og samtidig kan ingen garantere at du om fem år kommer inn i minst de ti beste ACM ICPC. Men dette harde arbeidet, kombinert med samarbeid med universiteter, lar kandidater fra Russland og CIS-landene komme inn på det globale utdanningsmarkedet med et ekte trumfkort. Og det er derfor den russiske skolen for programmerere er etterspurt over hele verden, er representanten for Moskva-instituttet for fysikk og teknologi sikker.

ACM ICPC-mester er enig i at sportsprogrammering er til fordel for universiteter Niyaz Nigmatullin. I følge en erfaren deltaker i internasjonale konkurranser kan du, forresten, universitetslaget presterer i mesterskapene raskt forstå hva de kan lære deg på deres alma mater. Samtidig må du forstå at sportsprogrammering slett ikke er det hundrevis av studenter gjør, fordi bare noen få velger og går gjennom banen til en sportsprogrammerer, bemerker Niyaz.


økonomisk spørsmål

"Nå har spørsmålet om relevansen av sportsprogrammering beveget seg over i et rent økonomisk aspekt. Saken er at vi er på et visst kritisk punkt, når det ikke er lang tid igjen før en ny runde med informasjonsteknologiutvikling. Dette er verdenen vi alle snart vil finne oss i: banksystemet, medisinen vil endre seg fullstendig, ubemannede kjøretøy vil dukke opp, for ikke å nevne det faktum at mange yrker rett og slett vil forsvinne - folk vil miste jobben. Men programmerere vil virkelig ha mye av det. Og vi ser dette allerede nå: etterspørselen etter dem er slik at lønnen til fysikere og matematikere, selv i USA, er to ganger lavere enn programmerere. Og de landene som nå har høyt kvalifisert personell på feltetIT vil få et gjennombrudd i løpet av de neste 10-20 årene.", - Vladimir Parfenov er sikker.

Derfor trengs OL. For å identifisere det beste av det beste, talenter og de som bare elsker programmering og trenger støtte, er Vladimir Parfenov sikker. I tillegg er talentfulle barn - selve den fremtidige ressursen - ivrige etter å konkurrere og bevise seg fra en tidlig alder. Det er 3000 av 140 millioner slike karer som snart vil forandre verden bare i Russland, og det viktigste er å se de som kan holde dem med selskap. Tross alt står ikke resten av verden stille, legger dekanen ved fakultetet for informasjonsteknologi og programmering til - i løpet av de siste 15 årene har Kina allerede gjort et enormt gjennombrudd, og USA forblir på hesteryggen på grunn av det utviklet infrastruktur.

"Vår moderne programmerer begynner å jobbe umiddelbart på det fjerde året, hvis han ikke går inn i naturfag, hvor lønnen dessverre fortsatt er lavere. Samtidig får han mange tilbud fra arbeidsgivere. Selvfølgelig, hvis vi snakker om St. Petersburg, prøver våre 400-500 IT-selskaper å skape noe nytt, og det er verdt å bli med dem. Det er ikke uvanlig at de som begynner å jobbe i store selskaper som Google, vender tilbake til hjemlandet, noen ganger klager. Tross alt er det én ting når du sitter i den vakre byen St. Petersburg, og noe helt annet når du er i en landsby som heter Silicon Valley ... " ler læreren.


Kult

Til tross for de endeløse spørsmålene om doping, påpeker unge mestere fortsatt at i sportsprogrammering er hovedsaken at hodet fungerer bra. Så for eksempel innrømmer verdensmesteren i 2016 Stanislav Ershov at han liker å få nok søvn på konkurransedagene, og også spise søtsaker. Samtidig bemerker den unge mannen at han ikke drømmer om økt medieoppmerksomhet og berømmelse - som vitenskapsmenn foretrekker han å holde seg unna hypen. Gennady Korotkevich, en prisvinner av mange konkurranser, som er en av få mennesker i verden som er i stand til å tjene til livets opphold på sportsprogrammering, tror egentlig ikke på doping. I følge Gennady ville det være flott om det en dag ville komme profesjonelle anbefalinger for idrettsutøvere-programmerere - om diett eller ernæring. Generelt benekter ikke unge mennesker at det i fremtiden kan være et ekte dop for hjerneaktivitet som er mer alvorlig enn sjokolade, men de trenger det ikke.