Programmering af olympiader - hjælper de i rigtigt arbejde? Pyotr Mitrichev - Legend of Sports Programming At komme med sådanne problemer er en særlig færdighed.

"Vi vil ikke gå til Facebook og Google": Hvorfor nogle af de bedste programmører i verden bor og arbejder i Jekaterinburg

Et interessant interview med vinderne af World Programming Championship fra Ural Federal University.

Jeg har altid været interesseret i at forstå, hvorfor programmeringskonkurrencer er så populære i Rusland (mere præcist i det post-sovjetiske rum generelt) (sandsynligvis er det udtryk, der bruges i denne artikel, bedre egnet: "sportsprogrammering"), på trods af det faktum at jeg i det forfaldne Vesten taler om dem I lang tid vidste jeg det ikke engang, og da jeg vidste det, følte jeg mig af en eller anden grund slet ikke tiltrukket af det. Det er som en helt adskilt verden. I mange år deltog jeg aktivt i forskellige online programmeringsfællesskaber, for eksempel hang jeg på mailinglisterne for forskellige open source-projekter, mødte nogle gange folk i det virkelige liv, men der var aldrig nogen snak om TopCoder, f.eks.. Det faktum, at TopCoder eksisterer, fandt jeg ud af fra en russisk LJ, efter min mening (og efter at have lært om det, gik jeg ikke med det samme og akut, oprettede en konto og deltog ikke.) Det er på en eller anden måde meget sjovt og interessant at forstå hvorfor.

En del af denne popularitet forklares af nogle bemærkninger fra dette interview, efter min mening:

"Hvorfor viste UrFU det bedste resultat denne gang? Står stjernerne på linje?"

Mikhail Rubinchik: Vi har et fantastisk hold. Oleg, Lesha og alle de andre er meget stærke fyre. Oleg er nu på sit sjette år, han begyndte at studere på det andet, men på det tredje havde han allerede et anstændigt niveau.[...]

"Hvilket er tættest på dig? En startup? Eller en stor virksomhed?"

Oleg Merkuryev: Jeg har slet ikke arbejdet nogen steder. Og jeg skal ikke arbejde nogen steder i de næste seks måneder. Jeg går på efterskole, jeg skal læse lidt naturvidenskab, ellers brugte jeg generelt al min tid på sportsprogrammering.

De der. det føles virkelig som en sport først og fremmest. Herunder nogle vilde begrænsninger, der er typiske for sportskonkurrencer:

"Lad os tale lidt om selve mesterskabet. Tre personer på holdet. En computer. Hvorfor en? Hvorfor ikke tre?"

Mikhail Rubinchik: Det besluttede juryen engang. Det var tredive år siden.

Oleg Merkuryev: Så var der måske yderligere grunde, som ikke eksisterer nu. Og så var selv én computer pr. hold meget, men ikke meget pr. person.

[...]Du kan bruge en printer ved VM. Den første person satte sig ned, skrev en løsning, det virkede ikke. Han skal finde fejlen. Det er dyrt at læse fra en computer, men vi har kun én ressource. Derfor printer de det ud på en printer og læser det på et stykke papir.

Nå, jeg forstår ikke, hvordan det kan være så attraktivt. Programmering er en kreativ aktivitet. Der var intet program, og nu er der et. Du kunne ikke gøre noget med en computer, men nu kan du det. Er det lige meget, om det tog 20 minutter eller 40? Det er bare et eller andet uinteressant aspekt.

Nej, jeg kan forestille mig de begrænsninger, der bringer sportsspænding - men på niveau med flere dage og virkelig svære, interessante opgaver. Ligesom Ludum Dare konkurrencen - skriv et spil på to dage. Eller ICFP-programmeringskonkurrencen, de giver tre dage, og betingelserne er normalt forbløffende. Sammenlign dette med VM's opgaver i sportsprogrammering. Hvis du konkurrerer i minutter og sekunder (også med en computer mellem tre), så kommer opgaverne sådan her ud - den snedige brug af flere standardalgoritmer med et eller andet tricky "twist".

Generelt er dette en mærkelig verden. Giv mig ikke skylden, dem, der er ærefrygt for ham. Men jeg forstod ikke og forstår ikke.

Dette er allerede en meget gammel holivar: er sportsprogrammører velegnede til barsk anvendt udvikling, eller er de sådanne smukke hvide fugle, der svæver i matematisk-algoritmiske skyer og omkommer under mere verdslige forhold? Der er en almindelig myte, der siger, at alle sportsprogrammører går til Google eller i hvert fald til Yandex, hvor de arbejder med inspiration på søgealgoritmer og lignende. Simpel hviderussisk outsourcing er ikke for dem. Måske, hvis ikke en ende, så kan i det mindste et tegnsætningstegn i denne kamp af meninger sættes af fakta. Vi indsamlede oplysninger om alle sportsprogrammører i vores land og baseret på tre kriterier:

  • deltog i ACM ICPC-finalerne;
  • talte på vegne af det hviderussiske universitet;
  • har allerede afsluttet sine studier ved universitetet;

foretaget et valg. Resultatet var en liste over enogtyve ACM ICPC-finalister fra Hviderusland. Vi var i stand til at kontakte de fleste af dem og stille tre enkle spørgsmål:

  1. Hvad er dit nuværende arbejdssted, og hvad er stillingen/essensen af ​​det udførte arbejde?
  2. Hvorfor denne virksomhed/beskæftigelse?
  3. Hvad er dine planer for fremtiden, hvordan ser du det selv? Hvor vil du gerne hen?

Nogle af dem valgte en lederkarriere, nogle forblev tro mod sportsprogrammering, og hvem der rent faktisk udvikler søgealgoritmer, vil du finde ud af fra "direkte tale"Hviderussiske finalister i ACM ICPC.

Ivan Mikhnevich (ACM ICPC 2000)

  1. Wargaming Public Company Limited, direktør.
  2. Dette er resultatet af vækst i koncernen af ​​virksomheder lige fra begyndelsen af ​​min arbejdskarriere.
  3. I virkeligheden er jeg allerede træt af alt dette, og det er tid til at starte en ny karriere, et nyt sted, i et nyt felt (sandsynligvis ikke IT).

Sergey Stepantsov (ACM ICPC 2000)

  1. Jeg arbejder i øjeblikket som Vice President Business Development hos Intetics Co.
  2. Det meste af min karriere er forbundet med denne virksomhed, hvor jeg formåede at prøve mig selv i en række forskellige roller: Jeg startede som testspecialist og arbejdede også som programmør, projektleder og leder af en produktionsafdeling. Og efterhånden kom jeg til at specialisere mig i forretningsudvikling.
  3. Jeg føler mig stadig ikke gammel nok til at stoppe med at udvikle mig :). Jeg tror, ​​at fremtiden for forretningsdelen af ​​mit liv stadig vil glæde mig med mange spændende vendinger.

Vladimir Tankovich (ACM ICPC 2000, 2003)

  1. I øjeblikket hos Microsoft arbejder jeg på Computer Vision-algoritmer til Kinecta. Før det var jeg i søgerelevans.
  2. Jeg har været hos dette firma siden 2005. De bragte mig fra Republikken Hviderusland, og der var ingen mening i at flytte endnu. Jeg sluttede mig til dette team, fordi det giver mig mulighed for at udføre videnskabeligt arbejde, som ikke går ind i en samling af artikler, men til et færdigt produkt.
  3. Der er ingen konkrete planer for fremtiden. Inden for IT er penge ikke et problem, både i Minsk og her. Indtil videre er jeg meget interesseret i at forstå Machine Learning og AI. Det viser sig, at jeg gør, hvad jeg vil, næsten hele tiden, og jeg får også godt betalt for det. Det vil sige, de næste 1-2 år vil jeg gøre det samme, og så må vi se. Jeg får en masse erfaring, og hvis jeg har en idé om, hvordan jeg kan anvende det pålideligt, vil jeg prøve en startup.

Alexey Kirkovsky (ACM ICPC 2002, 2005)

  1. NT LLC "LuxSoft", softwareingeniør af 2. kategori.
  2. Jeg ønskede virkelig at gå til den berømte Moskva body shop LuxSoft, da jeg siden barndommen drømte om at automatisere luger, men jeg lagde ikke mærke til et bogstav og endte i den hviderussiske LuxSoft. Der skrev jeg under på nogle papirer uden at kigge, og nu arbejder jeg under en 20-årig kontrakt til en fast løn i hviderussiske rubler, som kun rækker til benzin.
  3. Jeg planlægger at opfylde standarden for antallet af linjer i minuttet og blive softwareingeniør i 1. kategori. Så få et CMS i programmering, som jeg får tildelt her, hvis der ikke er en enkelt forsinkelse til at arbejde i hele kontraktens varighed.

Alexey Danchenko (ACM ICPC 2002, 2005)

  1. NT LLC "LuxSoft" Software ingeniør. For nylig har jeg udviklet et domænespecifikt programmeringssprog til vores produkt.
  2. En mulighed for at arbejde sammen med venner for at implementere en interessant idé.
  3. Fortsæt med at nyde livet.

Evgeniy Gonchar (ACM ICPC 2003)

  1. Google Switzerland (Zürich), Senior Software Engineer. Jeg arbejder på et af websøgningsinfrastrukturprojekterne.
  2. Siden barndommen har jeg elsket at programmere.
  3. Jeg vil gerne komme videre med at spille elektrisk guitar og tage til New Zealand igen.

Ivan Metelsky (ACM ICPC 2003, 2004)

  1. TopCoder, Inc., Marathon/Algorithm Problem Coordinator. Lancering af maraton- og algoritmekonkurrencer på TopCoder.
  2. På en måde skete det bare sådan. Mere seriøst, god indkomst, relativt interessant arbejde, det er svært at finde et bedre alternativ.
  3. Planer for fremtiden - det er lige meget hvor, men et sted i retning af noget mindre travlhed og mere handlefrihed. Måske en form for virksomhed, ikke nødvendigvis inden for IT.

Victoria Lebed (ACM ICPC 2004)

  1. Jeg var og forbliver matematiker. Hun var den eneste person på holdet, der ikke rørte ved computeren :) Hun lavede alt "sidearbejdet". Jeg bor og arbejder i Paris. Nu har jeg et vikariat på University of Paris 7 - forskning og undervisning. Modtog for nylig min ph.d.
  2. Denne aktivitet er, fordi den giver en sjælden mulighed for at bevare personlig og kreativ frihed.
  3. Jeg prøver ikke at lægge nogen planer for fremtiden. Igen, for ikke at begrænse dig til evtså inden for rammerne og ikke udsætte dig selv personligt for byrden af ​​forventninger, håb og andet. jeg har det fintJeg forestiller mig at fortsætte den rejse, jeg har påbegyndt i universitets- og videnskabeligt miljø, men jeg lukker ikke døren for andre muligheder.

Maxim Osipov (ACM ICPC 2004)

  1. VironIT, direktør. Forretningsledelse (hovedsageligt ikke operationel, men rettet mod at ændre salgsprocesser, udvikling, kvaliteten af ​​arbejdet osv.)
  2. VironIT-virksomhed, fordi det er min virksomhed, er jeg ejeren. Dette er en klasse (ikke-operationel ledelse), fordi det er det mest interessante for mig at finde ud af, hvordan man kan udvikle en virksomhed.
  3. Udvikl din virksomhed, skift blandt andet til en produktmodel, stift familie og børn. Jeg ser fremtiden som interessant, svær, men bestemt positiv.

Pavel Irzhavsky (ACM ICPC 2007, 2008)

  1. Lærer på BSU, matematiker-programmør hos Orientsoft, lærer på ShAD, kandidatstuderende (formelt er dette studie, men faktisk er det tættere på arbejde).
  2. Hver aktivitet har noget interessant og nyttigt (udover det faktum, at de alle genererer indkomst :)), enkle, der giver mig mulighed for at slappe lidt af, og komplekse, der giver mig mulighed for at udvikle mig. Jeg tror, ​​jeg generelt bliver mindre effektiv, når jeg begynder at gøre det samme i groft sagt 8 timer om dagen, og at skifte aktiviteter dagligt giver mig mulighed for at være i top.
  3. Der er ingen væsentlige ændringer i planerne for fremtiden :)

Vladimir Kerus (ACM ICPC 2007, 2008)

  1. EPAM. Ledende softwareingeniør i mobiludviklingsafdelingen. Jeg udvikler applikationer til Android.
  2. Jeg elsker at lære nye ting, og i min nuværende virksomhed kan jeg nemt ændre min profil og finde de rigtige mennesker-lærere.
  3. Jeg har allerede plantet et træ, jeg sparer op til at bygge et hus, jeg planlægger at få børn (ideelt set mit eget Barcelona-hold).

Sergey Tikhon (ACM ICPC 2009)

  1. EPAM Systems, ledende softwareingeniør. Arkitekt/special projektudvikler.
  2. Venligt, stærkt team, interessante opgaver, gode muligheder for faglig udvikling.
  3. Arbejde inden for IT, men på grænsen til videnskab, arbejde med implementering af Data Science i rigtige applikationer og tjenester (machine learning, naturlig sprogbehandling, søgeteknologier, modellering). Propaganda, formidling og implementering af funktionel programmering (jeg driver en blog på F#).

Alexey Lobanov (ACM ICPC 2010)

  1. Yandex virksomhed, udvikler af Yandex.Maps. Sideløbende med dette læser jeg på ph.d.-skolen i BSU og arbejder som assistent på Institut for DMA FPMI (jeg underviser i praktiske timer i kurset “Algorithms and Data Structures”).
  2. Hvorfor Yandex: der er interessante opgaver (herunder komplekse, videntunge, algoritmiske), komfortable arbejdsforhold og et fremragende team. Hvorfor FPMI BSU: Jeg synes, det er vigtigt at give min viden videre til de næste generationer af studerende.
  3. Planer for fremtiden: Gennemfør kandidatskolen med succes og prøv at forsvare en ph.d.

Alexey Tolstikov (ACM ICPC 2010)

  1. BSU, assistent ved Institut for Beregningsmatematik, er uddannet fra kandidatskolen, undervise i kurset« Parallel og distribueret databehandling» (øve sig). Yandex,kurator for akademiske programmer, leder af Minsk-afdelingen af ​​School of Data Analysis (+ lærer der), søgeudvikler.
  2. Jeg kan ikke gøre det i én sætning, men fordi: "Jeg kan lide det!"
  3. Ikke meget at sige. Jeg bevæger mig i alle disse retninger.

Alt er meget kompliceret og samtidig enkelt. Hvorfor eksisterer sportsprogrammering overhovedet? Ikke "hvorfor bøvle med det", men netop "hvorfor eksisterer det som et fænomen." Hvorfor er der overhovedet brug for sport, hvad enten det er intellektuelt eller fysisk. Nogen vil sige det for sundhed, udvikling, alt det der? Ja, der er så mange skader i professionel sport, at intet helbred er nok. For penge? Ja, alle der bliver millionærer på et år. Den sande grund er én: ønsket om at vinde, at være anderledes end andre, at være bedre, mere perfekt, mere betydningsfuld. Gør noget godt for dit folk. Alt andet er en konsekvens. Hvis det ikke var for dette ønske, som giver anledning til konkurrence som sådan, ville alt andet ikke eksistere. Det er det samme her.

Hvad tiltrækker folk i starten. En slags interesse, nyhed, en slags "wow"-effekt. Men det går over. For at bæredygtig motivation kan opstå, kræves der dybere mekanismer. Ellers, hvis der er noget tilbage, rækker det kun til "for sjov" aktiviteter.

Derfor er det første og vigtigste, du kan gøre for at motivere en nybegynder, muligheden for at blive den bedste inden for dit felt! Ikke bare en koder, som tusinder af tusinder, men en mester. Når alt kommer til alt, drømmer enhver person om noget stort og meningsfuldt. Måske drømte den dreng som barn om at score mål i Champions League, og denne pige drømte om at synge sange til Eurovision. Han gik på en idrætsskole, og hun gik på en musikskole, men det lykkedes ikke. Men matematik gik altid med et brag, men hvad er fedt ved at være en nørd, der løser abstrude problemer, som er interessante for dig alene? Og til en fremragende elev, der drømte om at blive astronaut, tromlede hans forældre, som var ligeglade med hans drøm, ind i ham, at en astronaut i det mindste skulle vide, efter hvilke fysiske love raketter flyver, så han begyndte at løse fysik, alle de mere så gik han med et brag. Og nu er de alle kommet ind på universitetet, og et eller andet sted inde begynder tanken allerede at ringe alarmerende: "Hvad så? Skal jeg virkelig ikke gøre noget fremragende her i livet?" Når alt kommer til alt, i det store og hele kan enhver uddannet programmør udskiftes på arbejdet. Og her er din chance: at konkurrere for din by, for dit universitet, for hele Rusland, at vinde, at nå semifinalerne, finalerne, at gøre noget, som hvis du ikke gør det, så vil ingen andre gør det.

Da vi først begyndte at programmere, i 11. klasse, fik vi igen og igen at vide, hvordan det hele begyndte. For første gang gik vores hold til semifinalerne. Hvordan klarede du den første opgave? Hvordan de kom til finalen for første gang. Hvordan vi tog til udlandet. Hvordan vi kæmpede på lige fod med de bedste hjerner på planeten! Og mit hjerte sank af ønsket om at blive i det mindste lidt ligesom dem. Vi kiggede på finalebordene, og navnene blinkede for vores øjne: MIT, Harvard, Stanford! Drømmer alle om at studere der? Men her er det, der er meget sejere: riv alle de berygtede udenlandske hold ad helvede til! Hvordan Tarasovs hold, i den allerførste kamp i superserien, ødelagde holdet af de største hockeyprofessionelle fra Canada 7:3. Her er den, vores livs udfordring! Og dette er alt muligt! Dette er virkeligheden! Og det er det, der gør livet virkelig værd at leve. Og måske en dag på vores eget universitet vil de samme historier blive fortalt til rekrutter om os. Og alle vil drømme om at blive som os. Det er præcis sådan, nytilkomne ser på OL.

Du ved, vi er alle vant til disse sætninger: "semifinalist af verdensmesterskabet", "prisvinder af det nordøstlige europæiske mesterskab" osv. Det burde ikke overraske os. Men for en tilfældig person på gaden er sådanne præstationer bare plads! Og de nyankomne er folkene fra gaden. Så hvorfor ikke bruge det? Når alt kommer til alt, er det for mange deltagere at komme til semifinalen i NEERC World Championship resten af ​​deres liv det højeste toppunkt, de har opnået, den højeste titel, de har vundet. Det var nu ikke en joke.

Du har ti tusinde studerende, og her er muligheden for at blive en af ​​de tre elitestuderende, der skal repræsentere universitetet og byen ved verdens største studenterkonkurrence. Hver af dem er allerede, som de siger, "en af ​​slagsen i mange tusinde"! Eliteafdelingen på dit universitet.

Ja, så bliver der timers hårdt arbejde, men hvem sagde, at det er nemt at blive verdensmester? At arbejde hårdt vil ske af sig selv, når en person ved, at han bevæger sig mod et værdigt mål. Ingen vil løbe et maraton eller bestige Everest uden forberedelse. Alle forstår dette. Men hvis du går igennem dette, vil du have noget, du kan respektere dig selv for. Det er det samme her. Ikke mindre.

Men ingen tager til bjergene bare for strabadsernes skyld eller til et maraton for ikke at komme ud af sengen i en uge. Ingen går ind i bokseringen af ​​kærligheden til at blive slået i hovedet. Der er få masochister. Alle disse mennesker er drevet af noget andet. Ligesom sportsprogrammører. Nemlig: mål!

Så hvis du er guitarlærer, så skal du ikke fortælle dine elever, hvordan deres fingre vil gøre ondt og lade dem prøve at tage fat med det samme ("ja, det kan du ikke? Det bliver svært!"). Men du kan se, hvor fedt det er at være festens liv til en fest omkring bålet, og med hvilke øjne pigerne vil se på dig. Hvis man er SAF-instruktørpilot, så skal man ikke umiddelbart tale om, hvordan man vurderer fx vejret. Prøv at formidle følelsen af ​​flugt og romantik.

Det er det samme her. Hvis du forklarer balancerede træer og i slutningen af ​​forelæsningen siger: "En olympiade-elev kan skrive dette," vil ingen forstå dig. Hvis du bruger fem timer på at konkurrere og analysere, vil de kede sig og gå og lede efter deres barndomsdrøm et andet sted. Nogle vil blive tilbage, men uden entusiasme. Så det er stadig mere interessant at løse problemer end at løse nogle krydsord eller hænge rundt på sociale netværk i apps. Hvis du tvivler på din brugbarhed, din succes, vil din tvivl blive givet videre til rekrutterne. Hvis du selv er overbevist om, at ICPC er sejere, større, mere betydningsfuld end alle videnskabelige studenterkonferencer og fora tilsammen, at det er muligt at vinde, at det allerede har virket (eller ikke har virket, men alle venter på det) - de vil også tro dig. Det vigtigste er at tro på alt dette selv.

Det er faktisk meget godt, når der er konkurrence. Det er endnu bedre, når universitetet allerede har finalister, og der er unge og grønne. De unge vil sove og se den første konkurrence, hvor de endelig, i hvert fald i fem minutter, skal slå de gamle! For helt nybegyndere er det allerede lykke at være i monitoren over dem i et minut.

Dette er det grundlæggende i motivation. Det er algoritmiske problemer, som ingen ved, hvordan de skal løse, når du klokken tre om morgenen hopper ud af sengen, tænder computeren for at færdiggøre koden, endelig består denne forbandede 80. test og bliver accepteret, og så har du lidt lyst. Mendeleev, der havde åbenbaringen i en drøm. Dette er et år med forberedelse, kun fem timer, som det hele var til, og en afgørende opgave, der blev afleveret i sidste øjeblik. Det er en ære at repræsentere din by og dit land i det, du er bedst til. Nå, så finder de ud af det selv. Det er usandsynligt, at du har brug for nogen, der søgte, bare for at få en grad og få et normalt job. Alle andre, og som Mirzayanov skrev, matematikere og spillere kommer, hvis de elsker processen, hvis de finder ekkoer af en barndomsdrøm, hvis de ikke er bange for vanskeligheder, hvis de er klar til at spille, velkommen.

Vi bliver ofte spurgt om sportsprogrammering. Hvad er meningen med OL? Hvor vigtige er de, når de arbejder på et rigtigt projekt? Hvis de er vigtige, er det så for sent for en 11. klasse at begynde at studere dette område? Vi har naturligvis henvist spørgsmålene til eksperterne.

Deltagelse i Olympiads udvikler færdigheder til at arbejde i stressede situationer, og det belaster hjernen meget. Generelt under forberedelsen til konkurrencen studerede jeg et ret stort antal algoritmer og tilgange til at løse problemer. I industriel udvikling skal du sjældent beskæftige dig med standardalgoritmer; i det mindste behøver du næsten aldrig selv implementere dem. Men at vide, hvad der er under hætten af ​​en bestemt algoritme, giver dig nogle gange mulighed for at komme med en ikke-standard tilgang til at løse et specifikt industrielt problem. Under alle omstændigheder er det værd at deltage i Olympiaderne, uanset om disse færdigheder er vigtige eller ej, det er bare interessant :)

Det er ikke for sent at begynde at studere i 11. klasse. Et vidunderligt eksempel er den person, som vi spillede ACM ICPC-finalerne med sidste år. Han begyndte aktivt at deltage i Olympiads i sit 2. (!) år og opnåede meget gode resultater.

Fremme nedrykning

Meget afhænger af, hvilken slags projekt. Størstedelen (95%) af projekterne er relateret til automatisering af forretningsprocesser, grafik mv. I sådanne projekter spiller olympiadefærdigheder praktisk talt ingen rolle.

Men der er projekter, hvor det er nødvendigt at løse et komplekst nyt problem – og her er erfaringerne med at deltage i Olympiads nyttige.

Så det kommer helt an på, hvilken slags projekter du vil have. Langt de fleste programmører skal ikke beskæftige sig med sådanne projekter.

Fremme nedrykning

OL er en del af verden af ​​sportsprogrammering. Som i enhver anden sport er pointen med OL efter min mening at teste sin styrke, forbedre sig selv og modtage moralsk tilfredsstillelse. Jeg er sikker på, at OL-oplevelsen er brugbar i arbejdet, fordi konstant træning gør hjernen mere fleksibel og modtagelig for nye opgaver.

Det er ikke for sent for en ellevte klasse at begynde at deltage i programmeringskonkurrencer. Jeg har mange venner, der kun begyndte at programmere sport på universitetet og opnåede betydelig succes. Jeg deltog selv i den første olympiade i slutningen af ​​mit første år, og jeg synes ikke, det var for sent. Hvis dette var sket i mit sidste år, så ville jeg have fortrudt det.

Fremme nedrykning

, teknologievangelist for Microsoft, lektor ved MIPT, MAI, lærer ved JUNIO-R børnelejren

Programmering Olympiads giver dig mulighed for at mestre teoretisk viden inden for datalogi, og de hjælper dig ofte med at komme ind på et universitet. Men i praksis er det ikke alle opgaver, der kræver de færdigheder, man opnår ved olympiaderne.

Der er sådan noget som overkvalifikation. Hvis du har for meget teoretisk viden om datalogi, vil du kede dig med at løse hverdagsproblemer, og du vil kun være i stand til fuldt ud at realisere dit potentiale i store virksomheder, såsom Yandex, Mail.ru eller samme Microsoft. Derfor bliver kredsen af ​​arbejdsgivere, du interesserer dig for, noget snævrere, men opgaverne, der bliver løst, bliver meget mere interessante og mere globale.

For at opnå reelle færdigheder i at arbejde på projekter er konkurrencer som Imagine Cup bedre egnede. I denne konkurrence skal du have mere et iværksættertalent for at vælge et interessant problem at løse, skabe en prototype af et softwareprodukt og demonstrere det ved konkurrencen. På længere sigt er deltagelse i sådanne konkurrencer godt for at udvikle færdigheder i teamwork og reelt arbejde på projekter, og kan også føre dig til en iværksætterkarriere og til din egen startup.

11. klasse er lidt forsinket, fordi der er for meget at lave for at komme ind på et universitet, og det bliver svært at afsætte nok tid til olympiaderne. Men bedre sent end aldrig!

Fremme nedrykning

OL, som enhver sport, er ekstremt vigtig for træning af viljestyrke, fokus og andre værdifulde egenskaber. Sportsprogrammering har intet at gøre med anvendt programmering, men det giver dig mulighed for at træne i et virkelig konkurrencepræget miljø, som senere vil være nyttigt overalt. Det er aldrig for sent at starte.

Fremme nedrykning

Et uddrag fra vores, Stanislav besvarer spørgsmålet "er det rigtigt, at succes ved programmering (matematik) konkurrencer er negativt korreleret med arbejde i en virksomhed? Har du mange olympiske atleter på dit hold?”

OL hjælper ikke direkte. Ligesom viden om matematisk analyse ikke vil hjælpe en person med at skrive programmer i Java eller Python. Men OL-programmering, hvis du vil, er ligesom sportssambo. Det garanterer ikke succes i gadekampe; desuden er der mange eksempler på, at sambo-atleter blev brutalt lemlæstet i gadekampe, fordi der ikke er nogen regler: de kan slå med en kniv, og tre af dem angriber en. Men en sambo-atlet bliver en fighter meget hurtigere ved at begynde at studere kampsambo (eller anden hånd-til-hånd kampsport) end en person, der ser på monitorskærmen med popcorn. Derfor skal du behandle det præcis sådan: Olympiadeprogrammering er en god måde at forbedre dit niveau på. Det vil være lettere for en person, der gør dette, at mestre et nyt område inden for datalogi eller en programmeringsmetode. Dette er en gavnlig aktivitet og bør ikke undgås. Hvis en person arbejder professionelt i en virksomhed og laver produkter, der sælges bredt, bliver det som en hobby. En person, der arbejder for en virksomhed, der producerer backup-produkter, bliver sandsynligvis en professionel i verdensklasse på dette område inden for få år. Og olympiadeprogrammering, hvis han begynder at deltage i det, vil næppe hjælpe ham meget til at få ham til at stå med hoved og skuldre over sine kolleger. Men dette er en nyttig hobby, der udvikler de nødvendige færdigheder.

Generelt er det utroligt, hvordan folk nægter at lære. Da jeg var ung, var propagandaen meget stærk: du skal studere, det er nyttigt, viden er magt, uvidenhed er mørke. Jeg forstår ikke, hvorfor dine fyre kan have sådanne spørgsmål. Viden er aldrig overflødig. I sidste ende er livet struktureret på en sådan måde, at hvis en person forstår noget meget, meget dybt, er det lettere for ham at se, hvordan et helt, tilsyneladende ikke-relateret område fungerer. Alt, hvad vi gør, ender med at blive ens. Så jeg var under en illusion om bygherrer, indtil jeg begyndte at lave min første renovering. Første og sidste. Jeg opdagede, at bygningsarbejderes arbejde i en lejlighed ligner meget arbejdet hos et team af programmører. Og ikke nok med det, alle de problemer, vi står over for, står bygherrer over for i fuld kraft. Og der er det endnu værre. Fordi det gennemsnitlige niveau for en bygherre er lavere end det gennemsnitlige niveau for en programmør, hvad angår uddannelse og generel intelligens. De laver også fejl, de har fejl, der er både gode og dårlige projektledere. Hvis det er slemt, kan de billedligt talt skrue toilettet i loftet, og så lade som om det var sådan. Derfor er der ingen grund til at undgå viden. Måske vil denne særlige viden aldrig være nyttig for mig, men hvis jeg forstår noget, så forstå hvorfor det er sådan og ikke på anden måde, vil det være nyttigt for mig i det mindste i form af en analogi.

Fremme nedrykning

De siger, at da han blev født, kom Donald Knuth selv for at se ham. De siger, at da han blev inviteret til at arbejde hos Google, omskrev han hele søgealgoritmen 16 gange på 15 minutter. De siger, at han ser fremskridtet med kvantecomputere med et smil, for når han ser det, sætter tallene sig selv af frygt. Men vi ved én ting med sikkerhed: Peter er en rigtig gud for sportsprogrammering.

Data

  • Som vinder af adskillige mesterskaber vandt Peter to gange TopCoder og to gange vandt han andenpladsen i ACM ICPC.
  • I sin fritid skriver Peter en blog om regelmæssige konkurrencer "Algorithmic Problemer for Dummies": petr-mitrichev.blogspot.ru.
  • Mitrichev arbejder i øjeblikket hos Google, hvor han arbejder med søgekvalitet. Peter hjælper også med at forberede Google Code Jam-konkurrencer.

Mange mennesker tror, ​​at sportsprogrammører er seje fyre, rigtige nørder, der forstår algoritmer og løser komplekse problemer. Men de siger også, at det er meget svært for dem at anvende sig selv et sted senere. Det er rigtigt?

Sportsprogrammering, og generelt det, vi laver ved OL, er virkelig ikke noget, du kan leve af. På den anden side er programmering, som enhver anden sport, udvikling for en person. Takket være det bliver en person klogere, en bedre programmør og bedre til at finde fejl i programmer. Efter sådan forberedelse er det lettere at arbejde og gøre andre interessante ting.

Algoritmer er absolut anvendelige i praksis som en programmør, selvom jeg på arbejdet også har stødt på algoritmer, der er mere komplekse end dem, der findes i Olympiads. Men ved olympiaderne er vi begrænset til algoritmer, der groft sagt kan skrives på en halv time til en time. Derfor bruger opgaver der et meget specifikt, begrænset sæt algoritmer. I det virkelige liv er tingene bare mere ... ekspansive.

Hvilket sprog skrev du løsninger på problemer på?

I Java. I skolen skrev jeg i Pascal, fordi jeg ikke vidste andet på det tidspunkt. Og så, da det var nødvendigt at vælge, hvad man skulle skifte til, viste Java sig at være tættere på Pascal.

I et konkurrencepræget miljø skal du skrive et program på 20-30 minutter, og det burde virke korrekt med det samme. Derfor er det meget vigtigt, at sproget ikke tillader, at der plantes insekter. C++, som de fleste bruger, er anderledes ved, at det er ret nemt at skrive det forkerte program. Du kan ved et uheld glemme noget, tildele den forkerte type til en variabel, men alt dette vil på en eller anden måde kompilere og på en eller anden måde fungere. Mest sandsynligt ikke på den måde, du forventer.

I Java, hvis du laver en fejl eller tastefejl, vil programmet højst sandsynligt simpelthen ikke kompilere. Alt er strengere her, som i tilfældet med Pascal. Dette forekom mig mere passende. Den anden side af medaljen er, at Java-programmer ofte kører halvanden gang langsommere end C++-programmer. Nogle gange er disse halvanden gange ikke nok til, at programmet passer ind i problemets betingelser.

Alle kan vælge deres eget programmeringssprog, ikke?

Der er begrænsninger. Selvfølgelig er der forskellige konkurrencer... lad os tage Google Code Jam, for eksempel. Da vi besluttede, hvordan vi bedst skulle lave det, kom vi på ideen om, at vi kunne arbejde på ethvert sprog. Du downloader inputfilen med opgavedata til din computer, kører dit program på computeren og sender derefter resultatet til serveren. Uanset hvilken compiler/tolk du har på din computer, det er det du kan bruge. Ulempen ved dette system er, at folk har forskellige computere. Nogle mennesker har en computer, der er ti gange stærkere end andre. Derfor er vi nødt til at skabe problemer, hvor den forkerte løsning adskiller sig fra den rigtige løsning i hastighed med mindst hundrede gange. Så hvis en person har en computer ti gange langsommere, vil den rigtige løsning virke for ham, eller på en computer ti gange hurtigere, vil den forkerte løsning stadig ikke fungere. Derfor har vi brug for problemer med et stort mellemrum mellem den korrekte og forkerte løsning hastighedsmæssigt.

Topcoder, Codeforces og ACM bruger et standard system, hvor du sender kildekoden, og de kører den på deres server. Her er du begrænset af hvad de har på serveren. De fleste af deltagerne, 70-80 % bruger C++, yderligere 20 % bruger Java og meget få andre sprog. Dette, ser det ud til, er en cyklus – nye mennesker, der kommer til konkurrencer, begynder at kommunikere med andre, ældre deltagere, som lærer de nytilkomne, hvad de selv kan. Som et resultat begynder nye mennesker også at bruge de samme sprog. Så det er ikke sådan, at disse to sprog er særligt velegnede til konkurrencer, det er bare sådan, det skete historisk.

Så, gælder alt dette i livet? Det er jo nok svært at finde et job, hvor denne viden ville være nyttig. Ja, du kan gå til Google eller Yandex, men er det sværere at komme til enhver bank?

Det forekommer mig, at dette er en meget nyttig del af færdigheden, den del, der er ansvarlig for evnen til at skrive et program første gang, uden fejl, eller at finde en fejl i en vens program. Jeg har ikke selv arbejdet i en bank, men det forekommer mig, at sådanne færdigheder også ville være nyttige der. Selvom algoritmerne selvfølgelig ikke rigtig bruges i alle job. Men personligt hjælper denne baggrund mig meget.

Du havde sikkert en speciel historie om, hvordan du kom ind på Google?

Ja, der er ingen historie, alt var det samme som andre. Nu laver jeg søgningen (den generelle del af den, som ikke afhænger af land og sprog), men jeg kan desværre ikke fortælle noget om det, da dette er en meget fortrolig del.

Sportsprogrammering: fordele og ulemper

Lad mig prøve at stille dig et dumt spørgsmål :). Hvorfor mener du, at sportsprogrammering skal laves?

Alt her er meget enkelt og ligner enhver anden sport. Du skal gøre det, hvis du kan lide det, hvis du får glæde af det. Dette bør ikke være et mål i sig selv. Du skal tænke på sportsprogrammering som en måde at have det sjovt på, møde interessante mennesker og så videre.

Hvad hvis du prøver at finde på en grund til, hvorfor du ikke skal spilde tid på sportsprogrammering?

Jeg tror, ​​du skal være opmærksom på, at det ikke er det vigtigste i livet. Hav nogle andre mål end dette. Hvis noget begynder at fylde hele dit liv, er det nok en grund til at overveje i det mindste at tage en pause.

Men hvad siger praksis?Er det for eksempel muligt at opbygge en karriere omkring sportsprogrammering?

Der er flere mennesker i Rusland, som er professionelt involveret i at træne nye sportsprogrammører - trænere. Andrey Stankevich, Misha Mirzayanov og andre. De underviser alle på universiteter, men de bruger en betydelig del af deres arbejdstid på at forberede studerende og skolebørn til programmeringskonkurrencer. For dem er dette virkelig et job og, kan man sige, en karriere.

Har du nogensinde selv tænkt over dette? Deltager du nogensinde i en jury eller som problemskribent?

Jeg forsøgte at undervise skolebørn på skole nr. 57, hvor jeg selv studerede. Jeg forsøgte at forberede hold til OL. Nu i Moskva er dette emne meget aktivt - der er hold på Moscow State University, Physics and Technology og Higher School of Economics. Men på en eller anden måde fungerede undervisningen ikke for mig.

Hvad angår konkurrencerne, hjælper jeg først og fremmest med at lave problemer til Google Code Jam, til vores konkurrence. Derudover hjælper jeg med ACM-semifinalerne, som finder sted i St. Petersborg. Dette er et udvalg blandt russiske hold og hold fra det tidligere USSR til finalen.

Er det muligt at tjene penge på konkurrencer? De giver jo pengepræmier for at vinde.

Sandsynligheden er for lav. Én præmie til ti tusinde deltagere?.. Jeg vil ikke kalde det indtjening. Regner med dette som den vigtigste indtægtskilde... det forekommer mig, at der ikke er nogen chance.

Men der er som sagt mange forskellige konkurrencer. Den samme Topcoder afholder programudviklingskonkurrencer. Lad os sige, at du skal udvikle en komponent til et program, der gør dette. Ud fra resultaterne vurderer de, hvem der fik hvad, og det bedste bliver brugt - kunden køber denne løsning og betaler penge til den, der har truffet denne beslutning. Folk, der gør dette på fuld tid, som jeg forstår det, tjener ganske anstændige penge.

Konkurrencer i dag

Fortæl os mere detaljeret, hvilken slags konkurrencer er der nu, hvordan foregår det hele?

I dag er der to typer konkurrencer. Der er ugentlige, faste konkurrencer. De udføres af to hovedsider - TopCoder og Codeforces. Hver konkurrence tager halvanden til to timer. Der får deltagerne flere problemer at løse og sende programmet til serveren. Arrangørerne tjekker om programmet virker.

TopCoder er den ældste og mest berømte side med ugentlige konkurrencer. De har følgende regler. En time og femten minutter er afsat til at løse tre problemer.

Opgaver er normalt opdelt i meget simple, medium og svære. Arrangørerne forsøger at udvælge dem, så f.eks. fem personer løser alle problemerne, hundrede mennesker løser to, og alle andre løser mindst én. Desuden er det vigtigt for hver opgave, hvornår du afleverer den - jo senere, jo færre point får du. Sådan er de mennesker, der har løst det samme antal problemer, opdelt. Derefter summeres pointene. En normal opgave er 250 point værd. Gennemsnit 500. Svært 1000. I gennemsnit får folk på førstepladsen tusindvis af point pr. konkurrence.

Så holder de en pause på fem minutter, og yderligere femten minutter går med at lede efter fejl hos andre. Du kan åbne enhver persons løsning for ethvert problem i dit "værelse". Et "rum" er, hvor personer, der deltager i en konkurrence, tilfældigt opdeles i grupper på tyve. De er opdelt i "rum". Du kan åbne enhver løsning for enhver person fra dit "værelse". Hvis løsningen virker forkert for dig, så kan du indtaste de inputdata, som den vil være forkert på. Og hvis det faktisk giver det forkerte svar, får du yderligere 50 point for det. Dette er naturligvis mindre end omkostningerne ved opgaven. Men dette gøres igen for at splitte folk. Hovedpointene gives stadig for at løse problemer, og ikke for at finde fejl.

Efter alt dette testes opgaverne på test udarbejdet af juryen. Hvis opgaven ikke virker, får personen 0 point.

Der er også et andet websted, Russian, Codeforces. Deres regler er lidt anderledes, men formatet er omtrent det samme - to timer og flere opgaver. Hvis du vil, kan dette format kaldes underholdende, i modsætning til elevkonkurrencer, der varer fem timer.

Men er der stadig store, årlige konkurrencer?

Ja, udover de to beskrevne konkurrencer, der finder sted ugentligt, er der mange flere årlige konkurrencer. Normalt er de struktureret sådan: en vis stor virksomhed (Google, Yandex, TopСoder, IBM) afholder en konkurrence med flere udvælgelsesstadier. De første etaper foregår online. Og sidste etape afholdes allerede et bestemt sted, hvor alle finalisterne er taget. Der er kun fem til ti sådanne konkurrencer, men de er lange, så en af ​​dem sker hele tiden.

Er alle disse konkurrencer individuelle?

De fleste konkurrencer er nu individuelle. Holdkonkurrencer er hovedsageligt elevkonkurrencer, hvor den vigtigste er ACM ICPC. Og andre elevkonkurrencer bliver som regel også lavet om til holdkonkurrencer, fordi de groft sagt allerede har et hold. Dette gør det lettere at interessere folk. Veterankonkurrencer er normalt personlige.

Ugentlige konkurrencer har en rating, ligesom skak, som opdateres efter hver konkurrence. De, der klarede sig bedre, får et plus, dem, der klarede sig dårligere, får et minus. Hvis du slet ikke deltog, ændres vurderingen ikke. Systemet er bygget på en sådan måde, at det udligner folk, der besøger ofte og sjældent. Der er intet pres for at "skal deltage hele tiden." Der er mange mennesker, der er meget ældre end mig, de optræder meget sjældent - en gang hver anden måned - og stadig har de en god vurdering, fordi de fortsætter med at løse problemer godt.

Ja, på førstepladsen er Gena Korotkevich, en meget smart studerende fra Gomel, nu studerer han på ITMO. Mine resultater på Codeforces har været dårligere på det seneste; nu er jeg sjette eller femte. Også der kommer Gena først.

Sandsynligvis er det en helt anden følelse og oplevelse at spille online og offline?

Sikkert. Det forekommer mig, at en meget vigtig positiv side af sportsprogrammering er, at alle konkurrencer slutter med en onsite runde, hvor alt det bedste mødes. Takket være dette mødte jeg en masse seje mennesker fra hele verden. Generelt er hovedpræmien i sådanne konkurrencer, det forekommer mig, netop at møde mennesker. Du bruger tid sammen med dem, kommunikerer, lærer noget nyt. Det er meget sjovt, at folk fra andre lande, som ofte taler engelsk dårligt, alligevel er meget nemme at forstå, fordi de har meget ens interesser.

I sådanne konkurrencer - med udtagelser - er der normalt flere, der deltager end i almindelige. Hvis en person aldrig har deltaget nogen steder, kan ugentlige konkurrencer være et problem. Der er sådanne problemer, at en person måske ikke løser noget og bliver ked af det. I konkurrencer med kvalifikation er alt normalt mere enkelt, i hvert fald i de første stadier. Deres hovedidé er, at alle skal have det sjovt. Igen er der en håndgribelig præmie til sidst - pengepræmier til førstepladsen. Plus, en tur et sted, for eksempel til Google-kontoret, er også noget af en præmie.

Sker det, at virksomheder så forsøger at bruge udviklingen fra de løsninger, som konkurrenterne har indsendt i livet?

Ganske sjældent. Hovedmålet for virksomheder, der afholder sådanne konkurrencer, er simpelthen at popularisere programmering. Det andet mål er at finde nye medarbejdere. Men den anden er ikke engang så vigtig. Typisk arrangerer en virksomhed en konkurrence netop for at få flere til at interessere sig for programmering, og vi taler ikke engang om dem, der direkte deltog i konkurrencen. Det er derfor, sådanne konkurrencer normalt afholdes af store virksomheder.

Ændrer konkurrencer sig over tid? Bliver de sværere eller omvendt nemmere?

De bliver mere komplekse. Flere og flere algoritmer betragtes som noget fra kategorien "alle burde kunne gøre det her", "alle ved dette". Du skal tænke lige så meget, som du gjorde for ti år siden. Antallet af trin, der kræves for at bygge en løsning, er det samme, men de grundlæggende blokke, der udgør løsningen, er blevet mere komplekse. Folk har lært flere algoritmer. Tag for eksempel suffikstræet: da det dukkede op, var jeg i skole, og det så ud til, at dette var en meget cool algoritme, alle, der vidste det, var meget smarte, og det var generelt en revolution. Nu er de samme problemer løst ved hjælp af en suffiksautomat, og dette er en meget simpel algoritme, der tager ti linjer. Det vil sige, at de har lært at forenkle standardting i høj grad. Derfor bliver mere komplekse problemer nu løst.

Om opgaver og deres forberedelse

Hvordan er opgaver til konkurrencer sammensat? Er der compilere, folk der allerede ved hvordan man gør dette, eller er det en slags crowdsourcing, hvor alle kan tilbyde noget af deres eget?

I de nævnte ugentlige konkurrencer er dette netop tilfældet: Alle kan foreslå deres egen opgave. Men der er et krav om, at en person tidligere har deltaget i et tilstrækkeligt antal konkurrencer. En slags tjek for at se, om en person forstår, hvad opgaverne skal handle om. Bagefter kan du aflevere dine opgaver, og juryen svarer på, om de kan bruges, og om de er egnede. Hvis problemerne er passende, gives de så ved konkurrencer, og forfatteren får penge for det - ikke ret meget, men alligevel.

At komme med sådanne problemer er en særlig færdighed, er det ikke?

Oh yeah. Du kan komme med problemer baseret på løsninger. Lad os sige, at du læser en artikel i et videnskabeligt tidsskrift om en interessant algoritme. Eller jeg fandt bare en bestemt algoritme og huskede, at jeg havde stødt på den før, men for nylig har jeg ikke set den i lang tid. Du kan finde på en opgave, der kræver dens brug.

Den anden måde: når et bestemt problem opstår i arbejdet eller i livet, og du indser, at det kan bruges på en cool måde. Du skal muligvis komplicere tingene eller ændre på begrænsningerne, men så vil det vise sig at være et interessant problem for konkurrenterne.

Der er konkurrencer af forskellig grad af nærhed til livet. Normalt er opgaven ved konkurrencer ikke givet i nogle formelle termer, som "givet: løs sådan og sådan en ligning." Normalt gives en bestemt baggrund eller historie. Som i skolebøger i matematik: "Ti liter vand strømmer i minuttet gennem et rør." Derfor skal du først på en eller anden måde formalisere denne historie, finde et matematisk problem i den og først derefter løse den.

Der er andre konkurrencer. TopCoder kalder det Marathon Match, og andre virksomheder afholder også lignende konkurrencer. De er designet lidt anderledes. Dette er ikke længere en konkurrence i algoritmer, men i løsning af omtrentlige problemer. Når der ikke er nogen nøjagtig løsning, og du skal finde den bedst mulige løsning. Sådanne konkurrencer varer normalt to uger eller en måned. Du kan sende forskellige løsninger og se, at ja, nu er min løsning 20% ​​bedre end de andre.

Betyder "bedre" hurtigere, bruger mindre hukommelse osv.?

Ja. For eksempel skal du komme med en ordning for fordeling af bustrafik på kortet over Moskva for at bruge så få busser som muligt. Det vil sige, at der i problemformuleringen er en bestemt parameter, der skal optimeres, men der er ingen enkelt "korrekt løsning", kun nogle tilnærmede algoritmer.

Samme Topcoder holdt konkurrencer sammen med NASA, og de fortæller, at de løsninger, de blev tilbudt, så faktisk blev tilpasset og brugt på ISS. Der løste de et specifikt problem, det ser ud til, hvordan man roterer et solcellebatteri, så det får mere energi.

Hvor skal man begynde

Ud fra synspunktet om at forberede en god algoritmisk programmør og deltager i forskellige konkurrencer - hvordan forbereder du dig selv til dette? Hvis du forestiller dig dig selv i stedet for en gymnasieelev eller førsteårselever?

Det forekommer mig, at den mest standard måde er at prøve. Alle konkurrencer har et arkiv med tidligere afholdte konkurrencer til rådighed; der er tusindvis af problemer, der kan løses til enhver tid.

Hvad hvis jeg påtager mig en opgave og ikke engang ved, hvordan jeg skal gribe den an?

Så tag det lettere. De er forskellige. Der er problemer, som hver anden uddannede kan løse. Der er helt forskellige sværhedsgrader. Det burde være ret nemt at blive involveret. Der er ingen anden måde, forekommer det mig. Plus, på denne måde vil du straks forstå, om du kan lide denne aktivitet eller ej.

Hvad skal der gøres for at få en algoritmisk base? Der er næppe behov for straks at skynde sig at læse Knuth.

Det forekommer mig, at vi skal starte med opgaver. Først senere, når du indser, at du ikke kan løse nogen specifik af dem, har hver af disse konkurrencer en analyse. Du kan læse løsningen, hvis du ikke kan klare dig selv. For eksempel indikerer analysen, at en bestemt algoritme bruges til at løse problemet. Du kan læse, hvad denne algoritme er, og hvor den ellers bruges. Dette er bedre end at læse fra listen "ja, jeg har en algoritme, som jeg skal studere i løbet af sommeren." Det er bedre at tage udgangspunkt i et specifikt problem, som du ikke kunne løse, fordi du ikke kender en bestemt algoritme. Dette er mere korrekt. Du husker bedre, din motivation er stærkere. Denne metode til at lære algoritmer tager sandsynligvis længere tid end listen, men den fører til bedre resultater.

Hvis du vil "pumpe op" dig selv ved hjælp af algoritmer, er der så nogen litteratur eller lærebøger?

Den mest standard lærebog er Cormen, Leiserson, Rivest med et æsel på omslaget. "Algorithms: Construction and Analysis" kaldes. Jeg ved det ikke, jeg har ikke studeret ret længe, ​​nu er der sikkert nye lærebøger, der kan være bedre. Men i min tid brugte de Cormen. Knut er snarere en slags opslagsbog. Hvis du har brug for at finde noget, og det ikke er nogen steder, er chancerne for, at det vil være der. Men at læse Knuth i træk... det er en ret trist oplevelse.