inhire.ioBlogPraca w ITJak odczarowujemy algorytmy w Syncronie – wywiad z Łukaszem Siczkiem

Jak odczarowujemy algorytmy w Syncronie – wywiad z Łukaszem Siczkiem

Praca w IT
23/11/2022

Sztuka programowania wymaga znajomości kodu od każdego, ale co z budzącymi postrach algorytmami? Wielu programistów uważa, że algorytmy nie są im potrzebne w codziennej pracy, a ci najbardziej doświadczeni specjaliści mają ich blade wspomnienie jedynie ze studiów. Łukasz Siczek jest jednym z tych programistów, którzy uważają inaczej. Jako Principal Software Engineer w firmie Syncron, chciałby podzielić się swoją perspektywą, dlaczego znajomość algorytmów jest istotna w karierze i jak wygląda ich zastosowanie na przykładzie jego codziennej pracy.

Czy doświadczonemu programiście potrzebna jest znajomość algorytmów?

Wielu doświadczonych programistów na co dzień nie pracuje z algorytmami. Projektują złożone systemy i implementują kluczowe funkcjonalności. Twierdzą, że znajomość algorytmów była potrzebna jedynie na studiach.

Moje doświadczenie pokazuje mi, że tak nie jest. Myślę, że rozumienie algorytmów jest potrzebne każdemu programiście. Zauważmy, że przecież każdy kod, który realizuje funkcjonalność danej aplikacji, korzysta z algorytmów najczęściej wbudowanych w język programowania. Warto jest świadomie dobierać narzędzia do problemu. Tylko wtedy możemy przygotować najlepsze rozwiązanie.

Chcemy, żeby nasze aplikacje miały możliwie jak najwięcej użytkowników. Przy zwiększonym ruchu w systemie mogą pojawić się obszary, które działają zauważalnie wolno. Wówczas bardzo częstym rozwiązaniem jest zwiększenie mocy obliczeniowej obsługującej system, co wiąże się z dodatkowymi kosztami.

Nakłady pieniężne przeznaczone na utrzymanie infrastruktury są często bagatelizowane w zestawieniu z kosztami czasu pracy programisty. Nie jest to błędem w przypadku małych systemów, lecz gdy mówimy o złożonych aplikacjach przetwarzających terabajty danych, koszty wynikające z nieoptymalnych rozwiązań mogą okazać się astronomiczne.

Dlatego właśnie w Syncronie zwracamy się ku innemu rozwiązaniu: możemy przeanalizować budowę aplikacji i zaproponować algorytm bardziej wydajny obliczeniowo i niewymagający zmian w infrastrukturze. W rezultacie, system będzie działać szybciej bez konieczności zwiększania mocy obliczeniowej, co pozwoli nam lepiej zainwestować zaoszczędzone pieniądze.

Czy w Syncronie wykorzystuje się algorytmy w codziennej pracy?

Tak, nasz główny system – Syncron Inventory – ma za zadanie pomagać ogromnym przedsiębiorstwom w zarządzaniu procesami magazynowymi i łańcuchami dostaw produktów. Nasi kontrahenci nieustannie dążą do tego, żeby obsługiwać swoich klientów możliwie jak najszybciej, przy jednoczesnym minimalizowaniu konieczności przechowywania dużych ilości produktów w magazynach, co jest bardzo kosztowne. W realizacji tego zadania nasi programiści współpracują z zespołem Data Science, który opracowuje prototypy nowych algorytmów, m.in. do przewidywania popytu na dane produkty. Developerzy je wdrażają i dostosowują do istniejącego kodu, przy zachowaniu standardów jakościowych.

Ponadto, produkt, który budujemy w Polsce, musi być dostosowany do obsługi bardzo dużego wolumenu danych. Jako przykład mogę zdradzić, że baza danych jednego z naszych najważniejszych klientów zajmuje ponad 9 000 GB. Dlatego przy projektowaniu nowych funkcjonalności nasi programiści muszą koniecznie uwzględnić rozmiar danych, na którym będzie operować system. Myślę, że na tym tle wyróżniamy się w Polsce. Większość systemów tworzonych w naszym kraju nie jest projektowana do obsługi dużej ilości danych.

Jako Principal Software Engineer, co polecasz osobom, które chciałyby pozyskać lub odświeżyć wiedzę z algorytmiki?

Odpowiedź nie jest jednoznaczna, gdyż w dzisiejszym świecie mamy praktycznie nieograniczony dostęp do wiedzy – również tej bezpłatnej. W Internecie możemy znaleźć bardzo dużo świetnych artykułów na ten temat. Jednakże, najbardziej sprawdzonym źródłem wiedzy o algorytmach będą studia wyższe. Niekoniecznie musi to oznaczać uczęszczanie na wykłady – moja macierzysta uczelnia udostępnia na swoich stronach materiały do przedmiotu „Algorytmy i Struktury Danych” – link można znaleźć na stronie smurf.mimuw.edu.pl.

Osobom, które preferują tradycyjny sposób zdobywania wiedzy, mogę z pewnością polecić książkę „Wprowadzenie do algorytmów” wydaną przez PWN w 2012 roku.

Teoria to jedno, bardzo ważna jest również praktyka. Nauka algorytmów, podobnie jak szlifowanie kompetencji programistycznych, to przede wszystkim praca z kodem. Możemy ćwiczyć nasze umiejętności algorytmiczne, korzystając z serwisów z zadaniami programistycznymi, których rozwiązanie wymaga zastosowania optymalnego algorytmu. Przykładami takich stron mogą być: pl.spoj.com i hackerrank.com

Liczba algorytmów opisywanych w literaturze może przytłoczyć – na które warto zwrócić uwagę w pierwszej kolejności?

W poprzedniej odpowiedzi zwróciłem uwagę na ogólne i bardzo szerokie źródło wiedzy na temat algorytmów.  

Z mojego ponad 10-letniego doświadczenia programisty mogę wskazać kilka zagadnień, na których warto skupić się w pierwszej kolejności: sortowanie, wyszukiwanie, struktury danych: List, Queue, Map i Set oraz złożoność obliczeniowa, tj. ocenianie i porównywanie algorytmów między sobą.

Przykładowo, wybór odpowiedniej struktury danych pod konkretny problem, może znacząco zredukować złożoność obliczeniową potrzebną do obsługi systemu.

Czy weryfikujecie znajomość algorytmów w procesie rekrutacji do Syncronu?

Rekrutację dostosowujemy do specjalizacji/konkretnej roli (Back-end/Front-end), jednakże od każdego programisty oczekujemy znajomości podstaw algorytmicznych.

Jest to szczególnie istotne w tych zespołach, które rozwijają moduły naszego głównego systemu Inventory zorientowane na przewidywanie pewnych zjawisk, jak np. Forecasting (wspomniana wcześniej współpraca z Data Science) oraz przy przetwarzaniu dużych wolumenów danych.

Jedno z zadań rekrutacyjnych polega na wymyśleniu wydajnego algorytmu rozwiązującego opisany problem. W trakcie rozmowy prosimy kandydata o wskazanie złożoności obliczeniowej oraz o przetestowanie poprawności.

Przy rekrutacji na stanowiska mające mniejszą styczność z algorytmicznym sercem systemu (np. Front-end lub DevOps), wybieramy zadania niewymagające wiedzy algorytmicznej. Podczas spotkania rekrutacyjnego koncentrujemy się na ocenie poprawności i czytelności rozwiązania, dodatkowo dyskutujemy o złożoności obliczeniowej kodu.

Za co jeszcze polecasz Syncron?

Dbałość o jakość to w mojej ocenie jedna z największych zalet Syncronu. Jako firma oferująca produkt wiemy, że będziemy przez wiele lat pracować z kodem, który tworzymy. W związku z tym, bardzo duży nacisk kładziemy na testy automatyczne oraz na proces code review, w którym uczestniczą m.in. programiści z bardzo dużym doświadczeniem. Ten proces jest doskonałą okazją do rozwoju, zwłaszcza dla młodszych osób.

Syncron oferuje elastyczny model pracy. Kiedy w marcu 2020 roku rozpoczęła się pandemia, jako firma bardzo szybko przeszliśmy na tryb pracy zdalnej, co nie spowodowało spadku wydajności naszych programistów. Od początku 2022 roku obowiązuje u nas model pracy, który nazywamy Flexible@Syncron. Każdy z nas może sam zdecydować, czy woli pracować w biurze, czy zdalnie. Żadna z powyższych opcji nie jest narzucana odgórnie.

Jeśli zdecydujemy się przyjść do biura, w zależności od dnia tygodnia będą czekały na nas smakołyki – w poniedziałek świeże owoce, we wtorek i środę – kanapki na śniadanie, a w czwartkowe popołudnie możemy załapać się na słodki poczęstunek, po szwedzku określany jako Fika. Ponadto, wspólne planszówki czy oglądanie filmów to przykłady naszych biurowych integracji.

Lokalizację biura również mamy wyjątkową – nieopodal malowniczego i popularnego Placu Grzybowskiego w centrum Warszawy, gdzie możemy być naocznymi świadkami scen ze znanych polskich filmów i seriali, przykładowo “Psy 3. W imię zasad” – scena ucieczki z Marcinem Dorocińskim.