Peter Norvig (Director of Research @ Google) przyznał, że wygrana w konkursach programistycznych negatywnie wpływa na pracę specjalistów IT w Google. Chociaż zwiększa szanse na zatrudnienie… A więc: warto się nimi sugerować przy zatrudnieniu programisty czy nie? Postaramy się odpowiedzieć na to pytanie na podstawie przykładów.
Zacząć należy od tego, że zawody czy też konkursy programistyczne mają zarówno swoich zwolenników, jak i przeciwników.
Wśród wad tego typu aktywności wymienia się przede wszystkim:
Jednocześnie nie ulega jednak wątpliwości, że konkursy programistyczne mają też sporo zalet. Oto część z nich:
Głównym kryterium podziału konkursów jest długość ich trwania. Możemy więc podzielić je na krótko- i długoterminowe. Te pierwsze trwają zwykle po kilka godzin. Czasem są to imprezy rozłożone na kilka dni, ale w danym dniu określona liczba zadań ma być wykonana w zamkniętym przedziale czasowym. Dłuższe – po kilka, czasami kilkanaście dni. Raczej rzadko występują rozbudowane konkursy, trwające po kilka miesięcy.
W tym artykule skupimy się jednak przede wszystkim nie na długości trwania zawodów, ale na ich celu oraz odbiorcach. Wierzymy, że taki podział pozwoli lepiej zrozumieć ich istotę oraz korzyści, jakie mogą wynikać z udziału w tego typu przedsięwzięciach.
(1)* Akademickie mistrzostwa świata w programowaniu zespołowym – ICPC (ang. International Collegiate Programming Contest) organizowane są od 1977 roku. Pieczę nad konkursem sprawuje fundacja ICPC z siedzibą na Uniwersytecie Baylora w Teksasie, USA. Składa się z eliminacji regionalnych (np. region Europy Środkowej) oraz Światowych Finałów, które są organizowane co roku na innym uniwersytecie.
W konkursie biorą udział 3-zespołowe grupy osób, pochodzące z jednej uczelni, z których każda ma status studenta i nie więcej niż 5 lat nauki akademickiej za sobą. W konkursie nie mogą brać udział studenci, którzy już 2 razy uczestniczyli w rundzie finałowej. Zadaniem zespołów jest rozwiązanie od 8 do 13 problemów programistycznych i wysłanie jak największej liczby poprawnie rozwiązanych do serwera. Wygrywa drużyna, która poprawnie rozwiąże jak najwięcej problemów. W przypadku remisu, bierze się też pod uwagę czas ich wykonania. W rundzie finałowej miejsca 1-4 otrzymują złote medale, miejsca 5-8 srebrne, a 9-12 – brązowe, ale z możliwością przyznania ich również za dalsze lokaty.
Polskie uniwersytety (Warszawski, Wrocławski, Jagielloński) mają na swoim koncie łącznie 6 złotych, 8 srebrnych i 7 brązowych “krążków” (stan po finałach w 2019 roku). Na dodatek, Uniwersytet Warszawski 2-krotnie zajął 1. miejsce w światowych finałach (w 2003 roku w składzie: Tomasz Czajka, Andrzej Gąsienica-Samek i Krzysztof Onak oraz w 2007 roku w składzie: Marek Cygan, Marcin Pilipczuk i Filip Wolski).
W tym konkursie bardzo ważna jest praca zespołowa (3-osobowe drużyny mają do dyspozycji tylko 1 komputer), co może być bardzo ważnym czynnikiem branym pod uwagę w procesie rekrutacji.
*9 tytułowych konkursów oznaczamy w tekście numerami.
(2) Międzynarodowa Olimpiada Informatyczna – druga co do wielkości na świecie (po matematycznej) olimpiada naukowa dla uczniów szkół średnich lub młodszych. Jeden z najbardziej prestiżowych konkursów programistycznych na świecie, patronuje mu m.in. UNESCO.
Każde państwo, biorące udział w Olimpiadzie, wystawia 4-osobową reprezentację, wybieraną na podstawie krajowych konkursów. W Polsce jest to Krajowa Olimpiada Informatyczna. Finały odbywają się w jednym mieście. Podczas 2-dniowej imprezy, każdego dnia drużyny mają do rozwiązania po 3 problemy algorytmiczno-programistyczne. Mają na to po 5 godzin. Każdy z uczestników działa samodzielnie, a uzyskane przez nich wyniki mają wpływ na klasyfikację generalną danego państwa po późniejszym ich zliczeniu. Uczestnik otrzymuje jednak medal niezależnie od wyników pozostałych członków zespołu. Medale przyznawane są pierwszym 50% uczestników w proporcjach 1:2:3:6 (złoto:srebro:brąz:brak medalu) – a więc złoto przypada w udziale pierwszej 1/12 uczestników.
Polska zajmuje 5. miejsce w tabeli wszech-czasów (stan po finałach w 2019 roku), z 40 złotymi, 41 srebrnymi i 31 brązowymi medalami na koncie. W tabeli indywidualnej multimedalistów znajdziemy 6 Polaków (Filip Wolski – 4 złote, Andrzej Gąsienica-Samek: 3 złote, 1 srebrny, Marcin Andrychowicz – 3 złote, Jarosław Kwiecień – 3 złote, Piotr Zieliński – 2 złote, 1 srebrny, Tomasz Czajka – 2 złote, 1 srebrny).
Co daje ten konkurs? Przede wszystkim wymaga od uczestników nie tylko samego programowania, ale kreatywnego spojrzenia na kod, ponieważ przy pracy nad bardzo dużą ilością danych, które są obecne w zadaniach, twórca rozwiązania musi wiedzieć, co “powiedzieć” komputerowi, aby otrzymać poprawne rozwiązanie problemu. “Najtrudniejsze nie jest bowiem samo programowanie, lecz matematyka, skryta pod nim” – powiedział dr Ben Burton, przygotowując program szkoleniowy dla Australii przed Olimpiadą w 2013 roku. Jego wypowiedź możemy znaleźć w artykule redaktora The Sydney Morning Herald, Franka Robsona, opisującego 25. edycję Olimpiady, odbywającą się w 2013 roku w Australii.
Od “niewinnych”, choć bardzo prestiżowych i uznanych na świecie zawodów dla uczniów i studentów, przechodzimy do świata biznesu. Tam swoje konkursy prowadzą także wielkie korporacje, takie jak Facebook czy Google:
(3) Facebook Hacker Cup – organizowany i sponsorowany przez Facebook, Inc. Ruszył w 2011 roku, a jego pierwotnym celem było wyłonienie najlepszych inżynierów, dla potencjalnego przyszłego zatrudnienia ich w firmie, na której czele stoi Mark Zuckerberg. Obecnie składa się z 5 etapów: kwalifikacji oraz 1., 2., 3. i finałowej – 4. rundy. W tym roku wszystkie rozgrywane są online.
Każdy etap stawia przed uczestnikami przynajmniej 4 algorytmiczne problemy, które muszą być rozwiązane w określonym przedziale czasowym (na wykonanie zadań w kwalifikacjach są 3 dni, w 1. rundzie – 24 godziny, a w kolejnych: 3, 3 i w finale – 4 godziny). Do 3. rundy awansuje TOP200 uczestników rundy nr 2, a do finałowej – TOP25 z rundy nr 3. Zwycięzca edycji 2020 otrzyma 20 000 USD, a kolejne miejsca:
Również tu Polacy mają swoje osiągnięcia. Tomek Czajka 2-krotnie zajął 2. miejsce, a Jakub Pachocki i Marcin Smulewicz po razie: 2. i 3. miejsce.
Uczestnicy Facebook Hacker Cup mogą używać dowolnego języka programowania i rozwiązywać zadania konkursowe na swój własny sposób, dlatego konkurs ten stanowi duże pole do popisu pod względem prezentacji swoich umiejętności i kreatywnych rozwiązań.
(4) Google Code Jam – organizowany i sponsorowany przez Google LLC. Analogicznie do konkursu Facebook’a, Code Jam również pierwotnie służył do wyłonienia przyszłych pracowników Google. Jego pierwsza edycja miała miejsca w Mountain View w USA (gdzie mieści się siedziba Google) w 2003 roku.
Ten konkurs również składa się z kilku etapów, podczas których uczestnicy mają za zadanie rozwiązać jak najwięcej problemów algorytmicznych w określonym przedziale czasowym. Wszystkie etapy poza finałowym (chyba, że obecnie pandemia uniemożliwi przeprowadzenie go stacjonarnie) odbywają się online za pośrednictwem platformy dostarczanej przez Google.
W 2021 roku struktura będzie wyglądała następująco: runda kwalifikacyjna (z której awans uzyska każdy, kto zdobędzie minimum 30 punktów), Runda 1 (w której każdy uczestnik może wybrać spośród 3 terminów, proponowanych przez organizatora – np. jeśli nie uda mu się awansować w pierwszym terminie, może spróbować w drugim, w najgorszym wypadku – w trzecim. Gdy już raz awansuje, nie może brać udziału w kolejnych “slotach” Rundy 1. Awans z każdego terminu uzyska 1500 pierwszych uczestników), Runda 2 (z której awans dalej uzyska 1000 najlepszych uczestników), Runda 3 (z której do finału awansuje TOP25 uczestników) oraz Runda finałowa, zwyczajowo rozgrywana stacjonarnie i na urządzeniach dostarczonych przez Google (poza klawiaturą, która może być dowolnie wybrana przez uczestnika).
Absolutnym mistrzem Code Jam jest Białorusin Gennady Korotkevich, który zwycięża w konkursie nieprzerwanie od 2014 roku. Wśród Polaków w konkursie zwyciężali Marek Cygan (2005) i Jakub Pachocki (2012), 2. miejsce w 2018 roku zajął Kamil Dębowski, a 3. lokatę wywalczył w 2011 roku Jakub Pachocki. Poza kwalifikacjami (na które każdy ma 27 godzin) i finałem (4 godziny), na rozwiązanie zadań w każdym etapie uczestnicy mają zaledwie 2,5 godziny. Na edycję 2021 przewidziano następujące nagrody pieniężne:
Zadania można rozwiązywać posługując się dowolnym językiem programowania, dostępnym na stronie konkursowej. Google Code Jam uczy przede wszystkim działania pod dużą presją czasu oraz odpowiedniego podejścia do kolejności wykonywania zadań. W finale mało kto jest bowiem w stanie zrealizować poprawnie wszystkie zadania i zmieścić się w czasie.
Wokół tzw. “competetive programming”, czyli programowania z elementem rywalizacji zbudowano także wiele społeczności (poniżej wskazujemy 3 przykłady: HackerRank, IEEE, CodeChef). Ich celem jest nie tyle sama rywalizacja, co w dużej mierze wzajemne wsparcie w rozwiązywaniu wszelkiego rodzaju problemów algorytmiczno-programistycznych. Część z tych społeczności opisujemy poniżej:
HackerRank to platforma, skupiająca się na zyskującym na znaczeniu trendzie grywalizacji w programowaniu. Oferuje rozwiązania zarówno dla klienta indywidualnego (programisty), jak i dla firm. Klient indywidualny może zarejestrować się i korzystać z platformy bezpłatnie. Udostępnia ona zarówno obszerną i zróżnicowaną bazę różnych problemów/zadań algorytmiczno-programistycznych do rozwiązania, jak również tzw. “CodeSprints”, czyli zawody programistyczne, podczas których zadania należy wykonać w określonym czasie.
Podobnie jak w grach, użytkownicy platformy otrzymują na bieżąco punkty i odznaki (rangi) za swoje osiągnięcia oraz są klasyfikowani w globalnym rankingu. Pod uwagę bierze się przede wszystkim dokładność i poprawność rozwiązywania problemów.
Platforma dysponuje również płatnym rozwiązaniem dla firm, czyli “HackerRank for Work”. Dzięki temu narzędziu pracodawca może np. wgrać na platformę określone zadanie, z którym musi się zmierzyć potencjalny kandydat w procesie rekrutacyjnym. To bardzo przydatna funkcjonalność, z której korzystały dotychczas takie marki jak Amazon, Facebook, Yahoo! czy EA Sports. Po wykonaniu zadania przez programistę, jego wynik jest automatycznie przesyłany do IT Rekrutera danej organizacji, który może wykorzystać ten element procesu rekrutacyjnego do dalszych rozmów z kandydatem.
(5) IEEEXtreme – coroczny hackathon (forma konkursowa) organizowany przez międzynarodowy Instytut Inżynierów Elektryków i Elektroników (ang. Institute of Electrical and Electronics Engineers, skr. IEEE).
Aby wziąć w nim udział, należy posiadać status studenta lub absolwenta z dowolnym dyplomem oraz być członkiem IEEE. Udział w konkursie jest bezpłatny, natomiast zapłacić należy za członkostwo w IEEE (różne stawki w zależności od kraju).
Konkurs trwa 24 godziny, podczas których zespoły o maksymalnej liczbie 3 osób muszą rozwiązać jak najwięcej problemów programistycznych, przygotowanych przez organizatora. Punkty przyznawane są za sposób rozwiązania zadania, czas, jaki był potrzebny na jego wykonanie oraz jego trudności. Sędziami oraz opiekunami zawodów są członkowie IEEE wyższego stopnia. Uczestnicy podczas wykonywania zadań nie mogą konsultować się z nikim z zewnątrz (poza swoim zespołem). Konkurs jest prowadzony w formie online, a rozwiązania wgrywa się za pośrednictwem zewnętrznej platformy (co ciekawe – ostatnio korzysta się ze wspomnianego już wyżej HackerRank).
CodeChef: to społeczność powołana do życia w 2009 roku przez indyjską firmę Directi, obecnie działająca jako filia firmy Unacademy. Pierwotnie powołana w celu wsparcia edukacyjnego dla programistów poprzez organizację różnego rodzaju zawodów, prowadzonych w duchu zdrowej rywalizacji i budowania wspierającej się społeczności. CodeChef znane jest ze swojego wsparcia dla szkół i uniwersytetów.
Pośród licznych inicjatyw warto wspomnieć o powołanym w 2010 roku i działającym do dziś programie “Go For Gold”. Jego celem było wsparcie indyjskich zespołów w celu osiągnięcia przez nie jak najlepszego wyniku podczas prestiżowych Akademickich Mistrzostwa Świata w programowaniu zespołowym (wspominane na samym początku). Poza tym, CodeChef, podobnie jak HackerRank, organizuje na swojej platformie zarówno różnego rodzaju konkursy programistyczne, jak i udostępnia swoją platformę dla firm (np. w celach wsparcia rekrutacji) oraz uczelni i szkół (np. w celach prowadzenia konkursów).
Na końcu warto wspomnieć o 2 flagowych inicjatywach CodeChef:
Drogi Czytelniku: jak mogłeś się przekonać – nie każdy zarzut, a także nie każda zaleta, wymienione we wstępie, pokrywają się ze wszystkimi rodzajami i przykładami konkursów programistycznych. Z pewnością wiele z nich stanowi wartość dodaną dla kandydata, który aplikuje do naszej organizacji. Warto więc podczas rozmów kwalifikacyjnych zwrócić uwagę na to, czy w swojej karierze zawodowej nasz potencjalny, przyszły pracownik brał udział w tego typu aktywnościach. Tym bardziej, że wiele z nich jest dostępna online, a uczestnictwo w nich często wiąże się z chęcią rozwoju swoich umiejętności i próbowania swoich sił w nowych wyzwaniach (co samo w sobie dobrze świadczy o kandydacie).
Nie możemy jednak zapomnieć, by dokładnie zweryfikować, jakiego dokładnie rodzaju był to konkurs oraz co konkretnie wyniósł z niego programista (o czym najlepiej niech sam opowie). Powyższe informacje powinny w tym pomóc i mam nadzieję, że jeszcze nie raz wrócisz do tego tekstu 🙂
A jeśli szukasz już pracy w IT, dowiedz się, jak przebiega rekrutacja. Zobacz case study Akamai – rekrutacja service architecta i inne case studies z rekrutacji.