Toto nie je prvý hackathon, ktorý vyhrávam, nie je to prvý, o ktorom , a rozhodne to nie je prvý príspevok na Habr, venovaný „Digitálnemu prerazeniu“. Ale nemohol som sa nezapísať. Považujem svoju skúsenosť za dostatočne jedinečnú, aby som sa o ňu podelil. Pravdepodobne som jediný na tomto hackathone, kto vyhral regionálne kolo a finále v rámci rôznych tímov. Chcete vedieť, ako sa to stalo? Vitajte pod katom.
Regionálne kolo (Moskva, 27. - 28. júla 2019).
Reklamu „Digitálne prerazenie“ som prvýkrát zazrel niekde v marci - apríli tohto roka. Samozrejme, prejsť okolo takého veľkého hackathonu som nemohol a zaregistroval som sa na stránke. Tam som sa oboznámil s podmienkami a programom súťaže. Ukázalo sa, že na hackathon sa treba prihlásiť prostredníctvom online testovania, ktoré začínalo 16. mája. A možno by som na to tiež pokojne zabudol, pretože mi neprislo žiadne pripomenutie o začiatku testovania. A musím povedať, že všetky EMAILY, ktoré mi prišli od CP, stabilne končili v spame. Aj keď som vždy znova stláčal tlačidlo „nie je to nevyžiadaná pošta“. Neviem, ako sa im podarilo dosiahnuť taký výsledok, u mňa pri rozposielaní na MailGun to tak nefungovalo. A zdá sa, že chlapci nemajú ani potuchy o existencii služieb ako isnotspam.com. Ale odbočili sme.
Na začiatok testovania mi pripomenuli na jednom z stretnutí , tam sme diskutovali o tvorbe tímu. Otvoril som zoznam testov a prvé, čo som urobil, bolo, že som sa pustil do testu z JavaScriptu. Celkovo boli úlohy viac-menej primerané (napríklad, aký výsledok dostaneme, ak v konzole sčítame 1 + '1'). Na základe svojej skúsenosti by som však takéto testy pri výbere zamestnancov alebo do tímu bral s veľkými výhradami. Ide o to, že v reálnej práci sa programátor s takýmito vecami stretáva zriedka, pričom jeho schopnosť rýchlo napísať kód — tieto vedomosti vôbec korelujú, a natrénovať sa na takéto úlohy pre pohovory je celkom jednoduché (viem to zo seba). Nakoniec som test zvládol celkom rýchlo, v niektorých prípadoch som sa overoval v konzole. V teste z Pythonu boli úlohy približne rovnakého typu, tiež som sa kontroloval v konzole a s prekvapením som získal viac bodov než v JS, hoci som nikdy profesionálne neprogramoval v Pythone. Následne, pri rozhovoroch s účastníkmi, som počul príbehy, ako silní programátori získavali nízke skóre v testoch, ako niektorí ľudia dostávali e-maily o tom, že neprešli výberom do CP, a potom ich aj tak pozvali. Je jasné, že tvorcovia týchto testov pravdepodobne nepočuli ani o , ani o ich spoľahlivosti a validite, ani o tom, ako ich otestovať, a myšlienka s testami bola od začiatku zlyhaním, aj keby sme nielen zohľadnili hlavnú úlohu hackathonu. A hlavná úloha hacku, ako som sa neskôr dozvedel, bola dosiahnuť Guinnessov rekord, a testy tejto úlohe odporovali.
V istom okamihu po absolvovaní testov ma zavolali, spýtali sa, či sa zúčastním, upresnili detaily a povedali, ako sa dostať do chatu na zostavenie tímu. Čoskoro som sa prihlásil do chatu a stručne napísal o sebe. V chate to bola úplná katastrofa, vytvoril sa dojem, že organizátori priviedli množstvo náhodných ľudí prostredníctvom reklamy, ktorí nemajú s IT nič spoločné. Početní produktoví manažéri "úrovne Steve Jobs" (skutočná fráza z jedného vystúpenia účastníka) zverejňovali svoje príbehy, a normálnych vývojárov tam ani nebolo vidieť. Ale mal som šťastie, a čoskoro som sa pripojil k trom skúseným JS-programátorom. Spoznali sme sa na hackathone, v tom čase sme do tímu pridali dievča na inšpiráciu a riešenie organizačných otázok. Už si ani nepamätám prečo, ale vzali sme tému "Vyučovanie kybernetickej bezpečnosti" a dostali sme sa s ňou do dráhy "Veda a vzdelávanie 2". Po prvýkrát som sa ocitol v tíme štyroch silných programátorov a prvýkrát som pocítil, aké je ľahké víťaziť v takom zložení. Prišli sme nepripravení a do obeda sme sa hádali a nevedeli sme sa rozhodnúť, či budeme robiť mobilnú aplikáciu alebo web. V akejkoľvek inej situácii by som si myslel, že je to zlyhanie. Najdôležitejšie pre nás bolo pochopiť, čím budeme lepší ako konkurencia, veď okolo bolo plno tímov, ktoré vyvíjali testy, hry o kybernetickej bezpečnosti a podobné veci. Pozerajúc na to a googliac vzdelávacie programy a aplikácie, sme sa rozhodli, že našou hlavnou črtou budú tréningy podľa princípu požiarnej pohotovosti. Vybrali sme si celý rad funkcií, ktoré sa nám zdali zaujímavé na realizáciu (registrácia s overením emailu a hesla podľa hackerských databáz, posielanie phishingových e-mailov (vo forme správ od známych bánk), tréningy v oblasti sociálneho inžinierstva v chate). Po určení toho, čo robíme a pochopení, čím sa môžeme odlíšiť, sme celkom rýchlo napísali plnohodnotnú webovú aplikáciu, pričom som hráł v roli backendového vývojára, čo nebolo mojou zvyčajnou úlohou. Týmto spôsobom sme iste vyhrali svoju dráhu a spoločne s ďalšími tromi tímami sme sa dostali do finále v Kazani. Až neskôr, v Kazani, som sa dozvedel, že výber do finále bol fikcia, stretol som tam mnoho známych tvárí z tímov, ktoré tento výber neprešli. Dokonca sa u nás zaujímali novinári z 1. kanála. Pravda je, že v správe z neho ukázali našu aplikáciu len na 1 sekundu.

Tím Snowed, v ktorom som vyhral regionálne kolo
Finále (Kazaň, 27. – 29. septembra 2019)
Ale potom začali neúspechy. Všetci programátori z tímu Snowed mi priblížne mesiac po jednom oznámili, že sa nebudú môcť zúčastniť finále v Kazani. A začal som uvažovať o hľadaní nového tímu. Najprv som poslal výzvu do verejného chatu ruskej hack tímu a hoci som dostal dosť veľa reakcií a pozvánok do tímov, žiaden z nich ma nezaujal. Boli tam nesúladné tímy, ako napríklad produktový manažér, mobilný vývojár, frontendista, čo pripomínalo labuť, raka a šťuku z rozprávky. A boli aj tímy, ktoré mi nevyhovovali technológie (napríklad, s vývojom mobilnej aplikácie na Flutter). Nakoniec, v chate, ktorý som považoval za odpad (ten istý vkontakte, kde sa hľadali tímy na regionálne kolo), postli oznámenie o hľadaní frontendistu do tímu, a ja som napísal úplne náhodne. Chlapci sa ukázali byť doktorandi z Skoltech a okamžite navrhli stretnutie a zoznámenie. Páčilo sa mi to, tímy, ktoré uprednostňujú zoznámenie sa priamo na hackathone, pretože ma obvykle znepokojuje ich absencia motivácie. Stretli sme sa v „Grablách“ na Pjatnickej. Chlapci sa mi zdali rozumní, motivovaní, sebavedomí a presvedčení o víťazstve, a rozhodnutie som prijal práve tam. Ešte sme nevedeli, aké budú témy a úlohy vo finále, ale predpokladali sme, že si vyberieme niečo súvisiace s Machine Learning. Moja úloha bude pripraviť administrátorský panel pre túto záležitosť, takže som si išiel vopred pripraviť šablónu na základe antd-admin.
Do Kazane som išiel zadarmo, na náklady organizátorov. Musím povedať, že v chatoch a blogoch už bolo vyjadrených veľmi veľa nespokojnosti ohľadom nákupu vstupeniek a celkovo organizácie finále, nebudem to všetko opakovať.
Po príchode do Kazan Expo, po registrácii (mali sme malé problémy pri získaní badge) a po raňajkách, sme sa vybrali vybrať si stopu. Na slávnostné otvorenie, kde vystupovali oficiálne osobnosti, sme išli len na 10 minút. V skutočnosti sme už mali preferované stopy, ale zaujímali nás detaily. V stope č. 18 (Rostelekom) sa napríklad zistilo, že je potrebné vyvinúť mobilnú aplikáciu, hoci v krátkom opise to nebolo uvedené. Hlavný výber sme robili medzi stopou č. 8 Defektoskopia potrubí, PAO „Gazprom нефть“ a stopou č. 13 Perinatálne centrá, Účetná komora RF. Tam aj tam bol potrebný Data Science, a tam aj tam by sa dal pripojiť web. V stope č. 13 nás zastavila skutočnosť, že úloha v oblasti Data Science bola dosť slabá, museli sme parsovať rosstat a nebolo jasné, či je potrebný admin panel. A samotná hodnota úlohy vzbudzovala pochybnosti. Nakoniec sme sa rozhodli, že ako tím sme viac zameraní na stopu č. 8, tým skôr, že chlapci už mali skúsenosti s riešením podobných úloh. Začali sme tým, že sme premýšľali o scenári, podľa ktorého bude naše riešenie používať koncový používateľ. Ukázalo sa, že máme dva typy používateľov: technológov, ktorí sa zaujímajú o technické informácie, a manažérov, ktorým boli potrebné finančné ukazovatele. Keď sa objavila predstava o scenári, bolo jasné, čo robiť na fronte, čo nakresliť dizajnérovi a aké metódy sú potrebné na backend, stalo sa možné rozdeliť úlohy. Povinnosti v tíme sa rozdelili nasledovne: dvaja ľudia riešili ML s údajmi získanými od technických expertov, jeden človek písal backend v Pythone, ja som písal frontend v Reakte a antd a dizajnér navrhoval rozhrania. Dokonca sme si sadli tak, aby sa nám pohodlne komunikovalo a mohli sme riešiť svoje úlohy.
Prvé dni ubehli takmer nepozorovane. V komunikácii s technickými expertmi sa ukázalo, že túto úlohu (s "Gazprom Neft") už vyriešili, zaujímalo ich len, či ju možno vyriešiť lepšie. Nepoviem, že to znížilo motiváciu, ale zostal po tom istý pocit. Prekvapilo ma, že cez noc moderátori sekcií zaznamenávali pracujúce tímy (ako hovorili pre štatistiku), zvyčajne sa to na hackatonoch nepraktizuje. Ráno sme mali pripravený prototyp frontu, niektoré základy beku a prvé riešenie ML. V podstate už bolo čo ukázať expertom. Poobede v sobotu dizajnér navrhol už zjavne viac rozhraní, než by som stihol naprogramovať, a prepla sa na vytváranie prezentácie. Sobotný deň bol vyhradený na registráciu rekordu, a ráno nás všetkých pracujúcich v sále vykázali na chodbu, potom sa vstup a výstup zo sály realizoval na základe odznakov, pričom vojsť a vyjsť sme mohli iba raz za deň maximálne na hodinu. Nepoviem, že nám to spôsobilo nejaké podstatné nepríjemnosti, väčšinu dňa sme aj tak sedeli a pracovali. Strava bola naozaj veľmi skromná, na obed sme dostali pohár s vývarom, koláčik a jablko, ale opäť nás to veľmi nerozrušilo, boli sme sústredení na niečo iné.
Pravidelne nám dávali Red Bull, po dve plechovky na osobu, čo sa veľmi hodilo. Už dlho overený recept na hackathonoch energetik + káva nám umožnil programovať celú noc a nasledujúci deň byť čulí ako sklo. Na druhý deň sme v podstate len vylepšovali aplikáciu o nové funkcie, urobili sme analýzu finančných ukazovateľov a začali sme zobrazovať grafy štatistiky chýb v sieťach. V našom segmente neexistoval žiaden code review, odborníci hodnotili riešenie úlohy v štýle kaggle.com na základe presnosti predikcie, a frontend bol hodnotený vizuálne. Naše ML riešenie sa ukázalo ako najpresnejšie, možno práve to nám pomohlo stať sa lídrami. V noci z soboty na nedeľu sme pracovali do 2:00 ráno, a potom sme išli spať do bytu, ktorý sme používali ako základňu. Spali sme asi 5 hodín, v nedeľu o 9:00 sme už boli v Kazan Expo. Niečo som rýchlo doladil, ale väčšinu času mi zabrala príprava na predobranu. Predobrany prebiehali v dvoch prúdoch pred dvoma tímami odborníkov, poprosili nás, aby sme vystúpili poslední, pretože obe odborné tímy chceli počuť naše vystúpenie. Brali sme to ako dobré znamenie. Aplikáciu sme prezentovali z môjho notebooku, z bežiaceho dev servera, normálne nasadiť aplikáciu sme nestihli, aj keď to robili všetci.
Celkovo to prebehlo dobre, upozornili nás na momenty, v ktorých mohlo byť naše aplikáciu možné zlepšiť, a za čas pred obranou sme sa dokonca pokúsili niektoré z týchto poznámok zrealizovať. Obrana tiež prebehla prekvapivo hladko. Na základe predobrany sme vedeli, že sme v bodovom hodnotení vpredu, viedli sme v presnosti riešenia, mali sme dobrý frontend, dobrý dizajn a celkovo sme mali dobré predpoklady. Ďalším pozitívnym znamením bolo, že moderátorka z našej sekcie si pred vstupom do koncertnej sály spravila selfie s nami, vtedy som začal tušiť, že možno niečo vie))). Ale po obranách sme nepoznali svoje body, takže čas do momentu vyhlásenia našej tímu na pódiu prešiel celkom napäto. Na pódiu nám odovzdali kartón s nápisom 500000 rubľov a každému balíček s hrnčekom a nabíjačkou na mobil. Nepodarilo sa nám poriadne osláviť víťazstvo, rýchlo sme sa najedli a taxíkom odišli na vlak.

Tím WAICO vyhráva vo finále
Po návrate do Moskvy nás vyspovedali novinári z NTV. Natáčali celú hodinu na druhom poschodí kaviarne "Kvartal 44" na Polyanke, no v správach ukázali asi 10 sekúnd. Každopádne, je to veľký pokrok v porovnaní s regionálnou fázou.
Ak zhrniem celkové dojmy z Digitálneho prielomu, sú nasledujúce. Na podujatie boli vynaložené obrovské peniaze, nikdy som ešte nevidel hackathony takéhoto rozsahu. Ale povedať, že to bolo opodstatnené a že sa to naozaj vráti, nemôžem. Podstatná časť účastníkov, ktorí prišli do Kazane, boli len partypeople, ktorí nevedia nič robiť vlastnými rukami, a ktorých tam poslali kvôli prekonávaniu rekordov. Nemôžem povedať, že konkurencia vo finále bola vyššia než v regionálnej fáze. Tiež hodnotnosť a užitočnosť úloh niektorých dráh vyvoláva pochybnosti. Niektoré úlohy boli už dávno vyriešené na priemyselnej úrovni. Ako sa neskôr ukázalo, niektoré organizácie, ktoré viedli dráhy, ani nemali záujem o ich riešenie. A tento príbeh sa ešte neskončil, vedúce tímy z každej dráhy boli vybrané do preakcelerátora, pričom sa predpokladá, že z nich vzniknú PRIELOMOVÉ startupy. O tom, ako to dopadne, zatiaľ písať nemôžem, uvidíme, čo z toho bude.
Zdroj: habr.com
