Cyfrowy przełom – jak to się stało

To nie jest pierwszy hackathon, który wygrywam, nie jest to pierwszy, o którym piszę, i to z pewnością nie jest pierwszy post na habrze poświęcony „Cyfrowemu przełomowi”. Ale nie mogłem nie napisać. Uważam, że moje doświadczenie jest wystarczająco wyjątkowe, aby się nim podzielić. Prawdopodobnie jestem jedyną osobą na tym hackathonie, która wygrała etap regionalny i finał w ramach różnych drużyn. Chcecie wiedzieć, jak to się stało? Zapraszam do dalszej lektury.

Etap regionalny (Moskwa, 27 – 28 lipca 2019 roku).

Reklamę „Cyfrowego przełomu” po raz pierwszy zauważyłem gdzieś w marcu – kwietniu tego roku. Oczywiście, nie mogłem przejść obok tak dużego hackathonu i zarejestrowałem się na stronie. Tam też zapoznałem się z warunkami i programem konkursu. Okazało się, że aby wziąć udział w hackathonie, trzeba było przejść testy online, które zaczynały się 16 maja. I być może bym o tym z powodzeniem zapomniał, ponieważ przypomnienie o rozpoczęciu testów nie przyszło. Trzeba powiedzieć, że wszystkie LISTY, które od CP do mnie przychodziły, regularnie trafiały do folderu spam. Choć za każdym razem klikałem przycisk „nie jest to spam”. Nie wiem, jak im udało się osiągnąć taki rezultat, u mnie z wysyłkami na MailGun tak to nie działało. A co do istnienia serwisów typu isnotspam.com, wydaje się, że chłopaki w ogóle o tym nie wiedzą. Ale odbiegliśmy od tematu.

O rozpoczęciu testów przypomniano mi na jednym ze spotkań klubu startupowego, tam również omówiliśmy formowanie zespołu. Otwierając listę testów, najpierw zabrałem się za test z Javascriptu. Ogólnie rzecz biorąc, zadania były mniej więcej adekwatne (na przykład, jaki wynik otrzymamy, gdy zsumujemy w konsoli 1 + ‘1’). Jednak według mojego doświadczenia, wykorzystanie takich testów przy rekrutacji do pracy lub do zespołu podjąłbym z bardzo dużymi zastrzeżeniami. Chodzi o to, że w rzeczywistej pracy programista rzadko się z tym styka, a jego zdolność do szybkiego pisania kodu — te umiejętności w żaden sposób się nie pokrywają, a przygotowanie się do takich testów na rozmowy kwalifikacyjne można dość łatwo wyćwiczyć (wiem to z własnego doświadczenia). W każdym razie, do testu zabrałem się dość szybko, w niektórych przypadkach sprawdzałem się w konsoli. W teście z Pythona zadania były mniej więcej tego samego typu, również sprawdzałem się w konsoli, z zaskoczeniem zdobyłem więcej punktów niż w JS, chociaż w Pythonie nigdy nie programowałem profesjonalnie. Później, w rozmowach z uczestnikami słyszałem historie, jak silni programiści zdobywali niskie wyniki w testach, jak niektórzy ludzie dostawali listy informujące, że nie przeszli selekcji do CP, a potem i tak ich na to zapraszano. Jasne, że twórcy tych testów najprawdopodobniej nic nie słyszeli ani o teorii testów, ani o ich niezawodności i ważności, ani o tym, jak je testować, i pomysł z testami od początku byłby nieudany, nawet jeśli nie wziąć pod uwagę głównego celu hackathonu. A głównym celem hacka, jak się dowiedziałem później, było ustanowienie rekordu Guinnessa, a testy temu przeczyły.

W pewnym momencie po ukończeniu testów zadzwonili do mnie, zapytali, czy wezmę udział, wyjaśnili szczegóły i pokazali, jak wejść na czat w celu doboru zespołu. Niedługo później dołączyłem do czatu i krótko napisałem o sobie. Na czacie panował kompletny chaos, sprawiło to wrażenie, że organizatorzy przyciągnęli reklamami wiele przypadkowych ludzi, którzy nie mają nic wspólnego z IT. Liczni menedżerowie produktów „na poziomie Steve'a Jobsa” (prawdziwa fraza z jednej prezentacji uczestnika) publikowali opowieści o sobie, podczas gdy normalnych programistów nawet nie było widać. Ale miałem szczęście i wkrótce dołączyłem do trzech doświadczonych programistów JS. Poznaliśmy się dopiero na hackathonie, wtedy dodaliśmy do zespołu dziewczynę dla inspiracji i rozwiązania kwestii organizacyjnych. Już nie pamiętam, dlaczego, ale wybraliśmy temat „Szkolenie w dziedzinie cyberbezpieczeństwa” i dostaliśmy się do ścieżki „Nauka i edukacja 2”. Po raz pierwszy znalazłem się w zespole czterech silnych programistów i po raz pierwszy poczułem, jak łatwo jest wygrywać w takim składzie. Przyszliśmy nieprzygotowani i do obiadu kłóciliśmy się, nie mogliśmy się zdecydować, co będziemy robić: aplikację mobilną czy stronę internetową. W każdej innej sytuacji pomyślałbym, że to porażka. Najważniejsze dla nas było zrozumienie, czym będziemy lepsi od konkurencji, bo wokół było mnóstwo zespołów, które tworzyły testy, gry w dziedzinie cyberbezpieczeństwa i im podobne rzeczy. Patrząc na to i szukając programów edukacyjnych oraz aplikacji, postanowiliśmy, że naszą główną wyróżniającą cechą będą treningi w stylu alarmu pożarowego. Wybraliśmy szereg elementów, które wydawały nam się interesujące do realizacji (rejestracja z weryfikacją e-maila i hasła w bazach hackera, wysyłanie maili phishingowych (w formie wiadomości od znanych banków), treningi z inżynierii społecznej na czacie). Określając, co robimy i rozumiejąc, czym możemy się wyróżnić, dosyć szybko napisaliśmy pełnoprawną aplikację internetową, przy czym wystąpiłem w nietypowej dla siebie roli programisty backendowego. W ten sposób pewnie wygraliśmy swoją ścieżkę i jako część jeszcze trzech zespołów zakwalifikowaliśmy się do finału w Kazaniu. Później, w Kazaniu dowiedziałem się, że kwalifikacje do finału były fikcją, spotkałem tam wiele znanych twarzy z zespołów, które się do finału nie zakwalifikowały. Mieliśmy nawet wywiad z dziennikarzami z 1. kanału. W prawdzie w reportażu z tego tylko przez 1 sekundę pokazano naszą aplikację.

Cyfrowy przełom – jak to się stało
Zespół Snowed, z którym wygrałem regionalny etap

Finał (Kazań, 27-29 września 2019 roku)

Jednak potem zaczęły się niepowodzenia. Wszyscy programiści z zespołu Snowed przez około miesiąc, jeden po drugim, informowali, że nie będą mogli pojechać do Kazania na finał. Zastanawiałem się nad poszukiwaniem nowego zespołu. Na początku rzuciłem hasło na ogólnym czacie drużyny Russian Hack Team, i chociaż otrzymałem wiele odpowiedzi oraz zaproszeń do zespołów, to żaden z nich mnie nie zainteresował. Były zespoły niezrównoważone, jak na przykład: product manager, programista mobilny, frontendowiec – przypomina to historię o łabędziu, raczku i szczupaku. Były też zespoły, które nie pasowały mi pod kątem technologii (na przykład te z rozwojem aplikacji mobilnych na Flutter). W końcu, na czacie, który uważałem za bezsensowny (tym z Vkontakte, gdzie odbywało się łączenie zespołów do etapu regionalnego), zamieszczono ogłoszenie o poszukiwaniu frontendowca do zespołu, i ot tak napisałem. Chłopcy okazali się być doktorantami z politechniki i od razu zaproponowali spotkanie oraz zapoznanie się. To mi się spodobało, zespoły, które wolą poznawać się od razu na hackathonie, zazwyczaj niepokoją mnie brakiem motywacji. Spotkaliśmy się w „Grabli” na Piętnickiej. Chłopaki wydawali mi się kompetentni, zmotywowani, pewni siebie i zwycięstwa, więc decyzję podjąłem od razu. Jeszcze nie wiedzieliśmy, jakie będą ścieżki i zadania w finale, ale przypuszczaliśmy, że wybierzemy coś związanego z uczeniem maszynowym. Moim zadaniem było stworzenie do tego administratora, więc z wyprzedzeniem przygotowałem szablon oparty na antd-admin.
Do Kazania pojechałem bezpłatnie, na koszt organizatorów. Muszę powiedzieć, że na czatach i blogach wyrażono już wiele niezadowolenia dotyczącego zakupu biletów i ogólnej organizacji finału, nie będę tego wszystkiego powtarzał.

Po przyjeździe do Kazan Expo, zarejestrowaniu się (miałem niewielkie problemy z uzyskaniem identyfikatora) i po śniadaniu, poszliśmy wybrać ścieżkę. Na uroczyste otwarcie, na które przybyli oficjele, weszliśmy tylko na 10 minut. W rzeczywistości mieliśmy już ulubione ścieżki, ale interesowały nas szczegóły. W ścieżce nr 18 (Rostelecom) okazało się, że trzeba opracować aplikację mobilną, chociaż w krótkim opisie tego nie było. Główny wybór robiliśmy między ścieżką nr 8 Diagnostyka rur, PJSC „Gazprom Nafta” oraz ścieżką nr 13 Centrum perinatalne, Najwyższa Izba Kontroli RF. W obu przypadkach potrzebny był Data Science, i w obu przypadkach można było by dołączyć web. W ścieżce nr 13 zatrzymało nas to, że zadanie z Data Science było tam dość słabe, trzeba było parsować rosstat i nie było jasne, czy potrzebny jest panel administracyjny. Sama wartość zadania budziła wątpliwości. Ostatecznie zdecydowaliśmy, że jako zespół lepiej pasujemy do ścieżki 8, tym bardziej, że chłopaki mieli już doświadczenie w rozwiązywaniu podobnych problemów. Zaczęliśmy od przemyślenia scenariusza, według którego nasze aplikacje będą używać użytkownicy końcowi. Okazało się, że będziemy mieli dwa rodzaje użytkowników: techników, którzy interesowali się informacjami technicznymi, oraz menedżerów, którzy potrzebowali wskaźników finansowych. Kiedy pojawiła się wizja scenariusza, stało się jasne, co robić na froncie, co rysować projektantowi i jakie metody są potrzebne na zapleczu, co pozwoliło na przydzielenie zadań. Obowiązki w zespole rozłożyły się w następujący sposób: dwie osoby zajmowały się ML z danymi otrzymanymi od ekspertów technicznych, jedna osoba pisała backend w Pythonie, ja pisałem frontend w React i antd, a projektant rysował interfejsy. Usiadaliśmy tak, aby łatwiej było nam się komunikować, rozwiązując swoje zadania.

Pierwszy dzień minął praktycznie niezauważenie. W rozmowach z ekspertami technicznymi ustalono, że to zadanie (przez Gazprom Neft) zostało już rozwiązane, po prostu interesuje ich, czy można je rozwiązać lepiej. Nie powiem, że to zmniejszyło naszą motywację, ale pozostawiło pewien niedosyt. Zaskoczyło mnie, że w nocy moderatorzy sekcji oceniali działające zespoły (jak mówili, dla potrzeb statystyki), co zazwyczaj nie jest praktykowane na hackathonach. Do rana mieliśmy gotowy prototyp frontu, pewne elementy backendu oraz pierwsze rozwiązanie ML. W sumie było już co pokazać ekspertom. W drugiej połowie soboty grafik narysował już wyraźnie więcej interfejsów, niż byłbym w stanie zakodować, i przeszedł do tworzenia prezentacji. Sobota była przeznaczona na rejestrację rekordu, więc rano wszystkich pracujących w sali wygoniono na korytarz, a wejście i wyjście z sali odbywało się na podstawie identyfikatorów, przy czym w ciągu dnia można było wyjść maksymalnie na godzinę. Nie powiem, że sprawiło nam to jakieś istotne niedogodności, ponieważ większość dnia i tak spędziliśmy na pracy. Wyżywienie rzeczywiście było bardzo skromne, na obiad dostaliśmy kubek z bulionem, pasztecik i jabłko, ale znowu, nie bardzo nas to zmartwiło, byliśmy skupieni na czymś innym.

Regularly, we were given Red Bull, two cans per person, which came in handy. The tried-and-true recipe of energy drink + coffee, tested at hackathons, allowed us to code all night and the following day, feeling as fresh as a daisy. On the second day, we were virtually just adding new features to the application, calculating financial indicators, and starting to display graphs on defect statistics in the main pipelines. There wasn't much of a code review in our track; experts assessed the task solution in a Kaggle.com style, based on prediction accuracy, while the frontend was evaluated visually. Our ML solution turned out to be the most accurate, possibly allowing us to take the lead. On the night from Saturday to Sunday, we worked until 2 AM and then went to sleep at the apartment we used as a base. We slept for about 5 hours, and by Sunday at 9 AM, we were already at Kazan Expo. I was hastily finishing up some things, but most of the time was spent preparing for the pre-defense. The pre-defenses were held in two streams, in front of two teams of experts; we were asked to go last as both teams wanted to hear us. We took this as a good sign. The application was shown from my laptop, running a dev server; we didn’t have time to properly deploy the application, but everyone did the same.

Overall, everything went well; we were pointed out moments where we could improve our application, and in the time leading up to the defense, we even tried to implement some of those suggestions. The defense itself was surprisingly smooth. Following the pre-defense, we knew we were ahead in points; we led in the accuracy of the solution, had a good frontend, nice design, and generally had positive feelings. Another favorable sign was that the moderator from our section took a selfie with us before entering the concert hall, which made me suspect she might know something))). However, 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, we were handed a cardboard cutout with the inscription of 500,000 rubles, and each of us received a package with a mug and a phone charger. We didn't get to enjoy our victory and celebrate it properly; we quickly had dinner and took a taxi to the train.

Cyfrowy przełom – jak to się stało
The WAICO team wins the finals

Po powrocie do Moskwy brali z nami wywiad dziennikarze z NTV. Filmowali przez całą godzinę na drugim piętrze kawiarni „Kwartal 44” na Poliance, ale w wiadomościach pokazali zaledwie 10 sekund. Z drugiej strony to duży postęp w porównaniu do etapu regionalnego.

Podsumowując ogólne wrażenia z Cyfrowego Przełomu, można powiedzieć, że są one następujące. Na to wydarzenie wydano ogromne pieniądze, nigdy wcześniej nie widziałem hackathonów takiej skali. Nie mogę jednak powiedzieć, że to się opłaci i że rzeczywiście przyniesie zyski. Znaczna część uczestników, którzy przyjechali do Kazania, to po prostu imprezowicze, którzy nie potrafią nic zrobić własnymi rękami i zostali zwerbowani dla ustanowienia rekordu. Nie mogę powiedzieć, że konkurencja w finale była wyższa niż na etapie regionalnym. Wartość i użyteczność zadań niektórych torów budzą wątpliwości. Niektóre zadania zostały rozwiązane już dawno na poziomie przemysłowym. Jak się później okazało, niektóre organizacje prowadzące tory nie były nawet zainteresowane ich rozwiązaniem. Historia ta jeszcze się nie skończyła, zespoły liderzy z każdego toru zostały wybrane do preakseleratora, a ma z nich powstać INNOWACYJNE startupy. Na razie nie jestem gotowy, by o tym pisać, zobaczymy, co z tego będzie.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster