Nu este primul hackathon pe care îl câștig, nu este primul despre care , și cu siguranță nu este primul post pe Habr dedicat „Saltului Digital”. Dar nu am putut să nu scriu. Consider că experiența mea este suficient de unică pentru a fi împărtășită. Probabil că sunt singura persoană de la acest hackathon care a câștigat etapa regională și finala cu echipe diferite. Vrei să știi cum s-a întâmplat asta? Bine ai venit sub cat.
Etapa regională (Moscova, 27 - 28 iulie 2019).
Am văzut pentru prima dată reclama „Saltului Digital” undeva prin martie - aprilie a acestui an. Evident, nu puteam să trec pe lângă un hackathon atât de mare, așa că m-am înregistrat pe site. Acolo am luat cunoștință de condițiile și programul concursului. Am descoperit că, pentru a participa la hackathon, trebuia să trec un test online, care începea pe 16 mai. Și, poate, aș fi uitat de asta, deoarece nu am primit niciun email de reamintire despre începutul testării. Trebuie să spun că toate EMAIL-URILE care veneau de la CP ajungeau constant în folderul de spam. Deși apăsam de fiecare dată butonul „nu este spam”. Nu știu cum au reușit să obțină acest rezultat, la mine cu newsletter-ul pe MailGun nu a mers așa. Și pare că echipa nu știe de existența unor servicii precum isnotspam.com. Dar ne-am abătut de la subiect.
M-au reamintit despre începutul testării la una dintre întâlnirile , acolo am discutat și formarea echipei. Deschizând lista testelor, m-am așezat prima dată la testul de Javascript. În general, sarcinile erau mai mult sau mai puțin adecvate (de exemplu, ce rezultat va fi dacă aduni în consolă 1 + ‘1’). Dar, din experiența mea, a folosi astfel de teste în selecția pentru un loc de muncă sau într-o echipă, aș face-o cu foarte multe rezervări. Ceea ce se întâmplă este că, în munca reală, programatorul se confruntă rar cu astfel de lucruri; abilitatea lui de a scrie rapid cod nu coroborează deloc cu aceste cunoștințe, iar antrenamentul pentru astfel de teste pentru interviuri poate fi destul de ușor (așa cum știu din experiența mea). În general, am trecut prin test destul de repede, în unele cazuri verificându-mă în consolă. La testul de python, sarcinile erau de tip similar, de asemenea m-am verificat în consolă, surprinzător am obținut mai multe puncte decât la JS, deși niciodată nu am programat profesionist în python. Apoi, în discuțiile cu participanții, am auzit povești cum programatori puternici au obținut punctaje mici la teste, cum unii oameni primeau emailuri că nu au trecut selecția la CP și, totuși, erau invitați ulterior. Este evident că creatorii acestor teste, cel mai probabil, nu știau nimic despre , nici despre fiabilitatea și validitatea lor, nici despre cum să le testezi, și ideea cu testele a fost din start un eșec, chiar dacă nu luăm în considerare scopul principal al hackathon-ului. Iar scopul principal al hackathon-ului, așa cum am aflat mai târziu, a fost să stabilească un record Guinness, iar testele erau în contradicție cu acest obiectiv.
La un moment dat, după ce am trecut testele, m-au sunat, m-au întrebat dacă voi participa, mi-au clarificat detaliile și mi-au spus cum să mă alătur chat-ului pentru formarea echipei. În curând, am intrat în chat și am scris pe scurt despre mine. În chat era un haos total, mi s-a creat impresia că organizatorii au adus multă lume aleatoare prin publicitate, care nu are nimic de-a face cu IT-ul. Numeroși manageri de produs „de nivel Steve Jobs” (o frază reală dintr-o prezentare a unui participant) posteau povești despre ei, iar dezvoltatorii normali erau, practic, invizibili. Dar am avut noroc, și în scurt timp m-am alăturat a trei programatori JS experimentați. Ne-am cunoscut între noi la hackathon, atunci am adăugat în echipă o fată pentru inspirație și pentru a soluționa problemele organizatorice. Nu-mi mai amintesc de ce, dar am ales tema „Educația în domeniul securității cibernetice” și am intrat cu aceasta în track-ul „Știință și educație 2”. A fost prima dată când m-am aflat într-o echipă de 4 programatori puternici și am simțit pentru prima dată cât de ușor este să câștigi într-un astfel de grup. Am venit nepregătiți și până la prânz ne-am certat și nu am putut decide ce vom face: o aplicație mobilă sau un site web. În orice altă situație, m-aș fi gândit că este un eșec. Cel mai important pentru noi era să înțelegem cum putem fi mai buni decât concurenții, căci în jur erau multe echipe care lucrau la teste, jocuri în domeniul securității cibernetice și lucruri de genul. Privind la asta și căutând programe și aplicații educaționale, am decis că principala noastră caracteristică distinctivă vor fi antrenamentele bazate pe principiul alertei de incendiu. Am selectat o serie de caracteristici care ni s-au părut interesante pentru implementare (înregistrare cu verificarea email-ului și parola din bazele de date ale hackerilor, trimiterea de emailuri de phishing (sub formă de mesaje de la bănci cunoscute), antrenamente de inginerie socială în chat). După ce ne-am decis ce facem și am înțeles cu ce putem ieși în evidență, am scris rapid o aplicație web completă, iar eu am avut un rol neobișnuit pentru mine, acela de dezvoltator backend. Astfel, am câștigat cu încredere track-ul nostru și, împreună cu încă trei echipe, ne-am calificat pentru finala de la Kazan. Mai târziu, la Kazan, am aflat că selecția pentru finală a fost o ficțiune, am întâlnit acolo multe fețe cunoscute din echipele care nu au trecut de selecție. Chiar am avut o interviu cu jurnaliștii de la primul canal. Din păcate, în reportajul de la ei, aplicația noastră a fost arătată doar timp de 1 secundă.

Echipa Snowed, cu care am câștigat etapa regională
Finala (Kazan, 27 – 29 septembrie 2019)
Dar apoi au început eșecurile. Toți programatorii din echipa Snowed, timp de aproximativ o lună, unul câte unul, au anunțat că nu vor putea merge la Kazan pentru finală. Și m-am gândit să caut o echipă nouă. La început, am făcut un apel în chatul general al echipei Russian Hack Team, și deși am primit destul de multe răspunsuri și invitații în echipe, nimeni nu m-a captivat. Au fost echipe dezechilibrate, cum ar fi, un product manager, un dezvoltator mobil, un frontend developer, asemănătoare basmului cu lebăda, racul și știuca. Au fost de asemenea echipe care nu mi s-au potrivit din punct de vedere tehnologic (de exemplu, cu dezvoltarea aplicației mobile pe Flutter). În cele din urmă, în chatul pe care îl consideram plin de zgomot (acela de pe VK, unde se organizau echipe pentru etapa regională), a fost postat un anunț despre căutarea unui frontend developer, iar eu am scris pur și simplu din întâmplare. Baietii s-au dovedit a fi doctoranzi la Skoltech și imediat au propus să ne întâlnim și să ne cunoaștem. Mi-a plăcut, echipele care preferă să se cunoască direct la hackathon, de obicei mă fac să am îndoieli în ceea ce privește motivația lor. Ne-am întâlnit la 'Grabli' pe Piatițkaia. Băieții mi s-au părut inteligenți, motivați, încrezători în sine și în victorie, iar decizia am luat-o chiar acolo. Nu știam încă ce track-uri și sarcini vor fi în finală, dar presupuneam că vom alege ceva legat de Machine Learning. Iar sarcina mea va fi să dezvolt un panou de administrare pentru acest lucru, așa că m-am pregătit din timp cu o mostră bazată pe antd-admin.
Am mers la Kazan gratuit, din partea organizatorilor. Trebuie să spun că în chat-uri și bloguri au fost exprimări foarte multe de nemulțumire cu privire la achiziționarea biletelor și, în general, la organizarea finalei, nu voi repeta totul.
Ajungând la Kazan Expo, după ce m-am registrat (am avut mici probleme cu obținerea badge-ului) și am luat micul dejun, am început să alegem un track. La deschiderea solemnă, unde au vorbit persoanele oficiale, ne-am oprit doar timp de 10 minute. De fapt, aveam deja favorite în ceea ce privește track-urile, dar eram interesați de detalii. În track-ul Nr. 18 (Rostelecom), de exemplu, s-a dovedit că trebuie să dezvoltăm o aplicație mobilă, deși acest lucru nu era menționat în descrierea scurtă. Principala noastră alegere a fost între track-ul Nr. 8, Defectoscopia conductelor, PАО „Gazprom Neft” și track-ul Nr. 13, Centre perinatale, Camera de Conturi a Federației Ruse. La ambele era nevoie de Data Science, și la ambele s-ar fi putut integra web-ul. În track-ul Nr. 13, ne-a oprit faptul că sarcina de Data Science era destul de slabă, trebuia să parseze Rosstat și nu era clar dacă era necesară o interfață de administrare. De asemenea, valoarea sarcinii în sine ridica semne de întrebare. În final, am decis că, ca echipă, suntem mai bine pregătiți pentru track-ul Nr. 8, mai ales că colegii aveau deja experiență în rezolvarea unor astfel de sarcini. Am început prin a ne gândi la scenariul conform căruia aplicația noastră va fi utilizată de utilizatorul final. Se părea că vom avea două tipuri de utilizatori: tehnici, care erau interesați de informațiile tehnice și manageri, care aveau nevoie de indicatori financiari. Când a apărut viziunea asupra scenariului, a devenit clar ce trebuie să facem pe frontend, ce să desenăm designerului și ce metode sunt necesare pe backend, astfel că a devenit posibilă distribuirea sarcinilor. Responsabilitățile din echipă s-au împărțit astfel: două persoane se ocupau de ML cu datele furnizate de experții tehnici, o persoană scria backend-ul în Python, eu dezvoltam frontend-ul în React și Ant Design, iar designerul crea interfețele. Chiar ne-am așezat astfel încât să ne fie mai ușor să comunicăm, rezolvând sarcinile noastre.
Primele 24 de ore au trecut aproape neobservate. În discuțiile cu experții tehnici, am aflat că această problemă (de către „Gazprom Neft”) deja a fost rezolvată, ei sunt doar interesați dacă poate fi rezolvată mai bine. Nu pot spune că acest lucru a redus motivația, dar a lăsat o impresie. M-a surprins că noaptea moderatorii secțiunilor notau echipele care lucrau (așa cum spuneau, pentru statistică), de obicei, la hackathoane acest lucru nu se practică. Până dimineața, aveam un prototip al frontului, câteva elemente ale back-end-ului, prima soluție de ML. În general, aveam deja ceva de arătat experților. În a doua jumătate a zilei de sâmbătă, designerul a desenat deja evident mai multe interfețe decât aș fi reușit eu să codez și s-a concentrat pe crearea prezentării. Sâmbăta a fost rezervată pentru înregistrarea recordului, iar dimineața, toți cei care lucrau în sală au fost scoși în coridor, iar intrarea și ieșirea din sală s-au efectuat pe baza unor legitimații, iar ieșirea în timpul zilei era permisă timp de maximum o oră. Nu pot spune că ne-a provocat vreo neplăcere considerabilă, în mare parte a zilei am stat oricum și am muncit. Mâncarea a fost, într-adevăr, foarte sărăcăcioasă; la prânz am primit un pahar cu supă, o plăcintă și o măr, dar din nou, asta nu ne-a supărat foarte tare, eram concentrați pe altceva.
Periodic, they handed out red bull, two cans per person, which was very timely. The long-tried recipe of energy drink + coffee, allowed us to code all night and the following day, feeling fresh as a daisy. On the second day, we were essentially just adding new features to the application, calculated financial indicators, and started generating graphs for defect statistics in the pipelines. There wasn't a formal code review in our track; experts evaluated problem-solving in the style of kaggle.com based on prediction accuracy, while the frontend was visually assessed. Our ML solution turned out to be the most accurate, perhaps this is what allowed us to break into the leaders. On the night from Saturday to Sunday, we worked until 2 AM, and then went to sleep at the apartment we were using as a base. We slept for about 5 hours, and on Sunday at 9 AM we were already at Kazan Expo. I was hastily tying things up, but most of the time was spent preparing for the pre-defense. The pre-defenses took place in two streams, before two teams of experts; we were asked to present last as both teams wanted to hear us. We took this as a good sign. The application was shown from my laptop, from the running dev server; we didn’t have time to properly deploy the application, although everyone did the same.
Overall, everything went well, they pointed out areas where we could improve our application, and in the time before the defense, we even tried to implement some of that feedback. The defense also went surprisingly smoothly. Following the pre-defense, we knew that in terms of points we were ahead; we led in accuracy, had a good frontend, nice design, and overall, good feelings. Another favorable sign was that the female moderator from our section took a selfie with us before entering the concert hall; that’s when I suspected she possibly knew something))). But we didn’t know our scores after the defense, so the time until our team's announcement from the stage was a bit tense. On stage, a card with the inscription 500,000 rubles was handed out, and each of us received a bag with a mug and a phone charger. We couldn't fully enjoy and celebrate our victory; we quickly had dinner and took a taxi to the train.

The team WAICO wins in the final
După întoarcerea la Moscova, jurnaliștii de la NTV ne-au intervievat. Au filmat timp de o oră la etajul doi al cafenelei „Cartierul 44” de pe Polianka, dar la știri au arătat doar vreo 10 secunde. Întrucât, totuși, este un progres semnificativ comparativ cu etapa regională.
Dacă ar fi să rezum impresiile generale despre Digital Breakthrough, acestea ar fi următoarele. S-au cheltuit pur și simplu sume exorbitante pentru acest eveniment; nu am mai văzut hackathoane de o asemenea anvergură. Dar nu pot spune că este justificat și că va aduce cu adevărat profit. O parte semnificativă dintre participanții veniti la Kazan erau pur și simplu petrecăreți care nu știu să facă nimic cu mâinile lor și care au fost aduși pentru a stabili un record. Nu pot spune că competiția din finală a fost mai mare decât la etapa regională. De asemenea, valoarea și utilitatea sarcinilor unor track-uri ridică semne de întrebare. Unele sarcini fuseseră deja rezolvate la nivel industrial de mult. Așa cum s-a dovedit ulterior, unele organizații care au condus track-urile nu erau nici măcar interesate de rezolvarea acestora. Iar povestea aceasta nu s-a încheiat, echipele câștigătoare din fiecare track au fost selectate pentru preaccelerator, și se presupune că din ele vor rezulta start-up-uri INOVATOARE. Dar deocamdată nu sunt pregătit să scriu despre asta, vom vedea ce va ieși.
Sursa: habr.com
