Jakie zdolności i umiejętności są najważniejsze dla osoby pracującej w dziedzinie chmur obliczeniowych i Azure? Jakie są główne zalety korzystania z tej platformy w porównaniu do innych rozwiązań chmurowych? O pracy na Azure – i nie tylko – rozmawiamy z Marcinem Przybyłą, programistą i architektem z intive.
Hej! Jesteś związany z branżą IT od 17 lat. Ładny staż — opowiesz, proszę, naszym Czytelnikom, czym zajmowałeś się przez ten czas? W jakich technologiach miałeś okazję pracować?
Od samego początku jestem związany z ekosystemem Microsoft. Zaczęło się od praktyk studenckich w firmie, która swoje oprogramowanie oparła na platformie .NET – wtedy jeszcze w wersji 1.0, ale pamiętajmy, iż było to 18 lat temu.
Na początku praktyk nie miałem jeszcze wyrobionej opinii, czy będę programował w Javie, w którymś z języków platformy .NET, czy w jeszcze innym, ale już wtedy czułem, iż wolę backendową stronę mocy niż frontendową. Co nie zmienia faktu, iż spędziłem również wiele nieprzespanych nocy z HTML-em czy JavaScriptem. Na samym początku, jako nazwijmy to stażysta, dzieliłem obowiązki programisty z rolą firmowego sieciowca, więc mam też za sobą epizod układania sieci LAN i zarządzania fizycznymi serwerami, czy choćby montowania półek w garażu firmowym
Od początku czułem się dobrze w programowaniu sieciowym, zarówno w postaci tworzenia API, jak i konsumowania zewnętrznych usług firm trzecich. Na początku z wykorzystaniem biblioteki WCF, czyli web serwisów opartych na SOAP, a później wraz z rozwojem REST w oparciu o ten styl architektoniczny.
W dalszych latach, kiedy na horyzoncie pojawiły się chmury, wraz ze swoją filozofią tworzenia oprogramowania, sam język, który wybrałem jako swój główny – a został nim C# – stał się już tylko narzędziem, a mój rozwój polegał na poznawaniu i wdrażaniu wzorców projektowych czy architektonicznych, a w końcu usług chmurowych.
Czy .NET jest przez cały czas popularną technologią? Czy warto się uczyć tego języka i gdzie w tej chwili można znaleźć pracę jako .NET developer?
Uważam, iż przez cały czas jest to popularna technologia, a choćby ciągle zyskuje na popularności, szczególnie po tym jak Microsoft postanowił uwolnić platformę, która stała się open source’owa, jednocześnie z pełnoprawnym wsparciem dla systemów innych niż Windows. Ten ruch, wraz z rozwojem chmurowych rozwiązań, szczególnie Azure, który natywnie wspiera platformę .NET, spowodował, iż koszt wdrożenia systemów opartych na niej uległ zmniejszeniu dramatycznie, eliminując potrzebę stawiania serwera aplikacji na stosunkowo drogim systemie Windows Server.
Co do nauki, pamiętajmy, iż .NET to nie jest język, tylko ekosystem, w którym mamy możliwość programowania w wielu językach. Ja wybrałem C# i uważam, iż jego nauka jest dobrym wyborem, ponieważ z jednej strony sam w sobie wspiera (choć niestety nie wymusza) przestrzeganie dobrych wzorców, a z drugiej posiada wsparcie zarówno społeczności jak i osób pracujących nad jego rozwojem, w postaci kanałów na YouTube, blogów, książek, czy na portalu Stack Overflow.
Obecnie sporo pracujesz na Azure. Jakie wskazałbyś główne zalety korzystania z tej platformy w porównaniu do innych rozwiązań chmurowych?
Ciężko mi odpowiedzieć na to pytanie obiektywnie, ponieważ największe doświadczenie mam z Azure, z którym pracuję na wyłączność od ponad 4 lat. Wcześniej miałem także krótki epizod z platformą AWS, ale 4 lata to w tej branży naprawdę długi okres czasu i każda z tych platform ewoluowała w międzyczasie.
Jestem przekonany, iż w tej chwili trzech największych graczy, czyli Azure, AWS i Google Cloud oferuje podobne możliwości, a wybór pomiędzy nimi często zależy od upodobań klienta czy technologii, w której zamierzamy zaimplementować system.
Możesz opowiedzieć o projektach lub zastosowaniach, w których brałeś udział, wykorzystując usługi Azure?
Najlepszym przykładem będzie projekt, w którym pracuję obecnie, a który w uproszczeniu wspiera firmy zajmujące się wdrażaniem infrastruktury podziemnej, czyli wszelkiego rodzaju rur z wodą czy gazem, sieci światłowodowych i ich podłączeń do domów na terenie Holandii.
Nasz system składa się z aplikacji webowej, aplikacji mobilnych na platformach Android, iOS czy Windows, oraz mikroserwisów i mikrofrontendów. Ma na celu wsparcie pełnego procesu, zaczynającego się od zaplanowania prac, uzyskania najświeższej wersji map infrastruktury podziemnej, zapewnienia bezpieczeństwa wykopu oraz obsłużenia ewentualnego uszkodzenia infrastruktury lub zanieczyszczenia gleby. Wszystkie te czynności są określone przez holenderskie prawo i wymagają komunikacji cyfrowej pomiędzy firmą wykonującą wykop, firmami, które zarządzają daną infrastrukturą a urzędem katastralnym.
W jaki sposób chmura pomaga w projekcie, w którym teraz jesteś?
Nasz system jest w 100% hostowany na Azure, większość serwisów pracuje w modelu Platform-as-a-Service, część w Infrastructure-as-a-Service. Takie podejście pozwala nam na bardzo szybkie wdrażanie nowych funkcjonalności, ale również tanie i szybkie próbowanie kilku rozwiązań (tzw. proof of concept), zanim zdecydujemy się na konkretne z nich. Nie bez znaczenia jest też nieomal nieskończona ilość mocy obliczeniowej, potrzebnej dla naszych serwisów renderujących mapy.
A jakie wyzwania lub problemy mogą występować przy wdrażaniu i zarządzaniu rozwiązaniami opartymi na platformie Azure?
Podam tu przykład wzięty z życia. Moim zdaniem głównym zagrożeniem jest nieprzejmowanie się kosztami chmury przez developerów. Przy wdrażaniu kolejnych serwisów bardzo łatwo jest zapomnieć o tym, iż większość z nich jednak kosztuje, co biorąc pod uwagę, iż systemy zwykle składają się z wielu usług i zespoły mają po kilka środowisk – np. testowe, akceptacyjne i produkcyjne – powoduje, iż faktura za chmurę może być zaskoczeniem dla klienta.
Drugim, może nie problemem, ale sporym wyzwaniem, z którym osobiście miałem do czynienia, jest obsługa sieci w obrębie chmury. Kiedy posiadamy fizyczne serwery, często mamy też zespół zajmujący się wdrażaniem aplikacji i serwisów oraz zarządzaniem siecią i zabezpieczaniem dostępu. W przypadku chmury oczywiście też można mieć taki zespół, ale z praktyki wiem, iż to developerzy zwykle zajmują się wdrażaniem i obsługą serwisów przez siebie stworzonych. Osobiście jestem zwolennikiem takiego podejścia, gdyż mocno zwiększa świadomość programistów w zespole, ale z drugiej strony wymaga posiadania dodatkowego wachlarza umiejętności oraz wiedzy, którą nie zawsze programiści chcą posiąść.
Ostatnią rzeczą, na którą chciałbym zwrócić uwagę, jest syndrom dziecka w sklepie z zabawkami. My, programiści lubimy nowości, więc zachodzi pokusa, iż wybierzemy konkretną usługę nie dlatego, iż najlepiej odpowiada założeniom, ale ponieważ fajnie byłoby zobaczyć, jak działa.
Które usługi Azure są Twoim zdaniem najważniejsze lub najbardziej użyteczne dla firm?
Nie dam jednoznacznej odpowiedzi na to pytanie. Azure zawiera ponad 200 usług, w których możemy dowolnie przebierać i nakładać na talerz te, które najbardziej nam pomogą w konkretnym rozwiązaniu.
Skupiłbym się więc tutaj nie na samych usługach, ale ich możliwościach. Jedną z nich jest tzw. autoskalowanie, czyli im więcej mocy potrzebujemy, tym więcej jej dostajemy, ale kiedy nasze zapotrzebowanie spada, to nie marnujemy zasobów.
Drugą jest możliwość georeplikacji naszych zasobów. Azure daje nam opcję wdrożenia kilku instancji serwisu czy bazy danych, w różnych regionach świata, dzięki czemu nasz system jest odporny na awarie czy choćby katastrofę naturalną. jeżeli jeden z regionów będzie niedostępny, to drugi przejmie jego rolę, często w sposób transparentny dla użytkowników naszych usług.
Jak uważasz, jakie zdolności i umiejętności są najważniejsze dla osoby pracującej w dziedzinie chmur obliczeniowych i Azure?
Pomijając oczywiste umiejętności, takie jak praca z kodem, na pewno ważna jest chęć do zgłębiania nowych tematów. Chmura podlega ciągłym zmianom, a serwisy, które poznaliśmy i używamy albo zostają wycofane, albo zastąpione innymi, albo przekształcają się i musimy się do nich dopasować.
Równie ważna jest szczegółowość, gdyż często właśnie w szczegółach tkwi diabeł i bez zrozumienia tego, jak działa serwis, nie wykorzystamy jego pełnego potencjału, albo wręcz wygenerujemy dodatkowe, niepotrzebne koszty. Nie wystarczy sama znajomość języków programowania, architektury naszego systemu czy aplikacji, musimy też zejść na poziom infrastruktury i odpowiednio rozplanować, który kawałek kodu na jakiej usłudze zostanie uruchomiony, gdyż najczęściej mamy do wyboru co najmniej kilka możliwości.
Jakie są Twoje przewidywania dotyczące przyszłości rozwoju Microsoft Azure? Jakie nowości technologiczne lub trendy są w tej chwili w czołówce?
Trudno w obecnych czasach uciec od odpowiedzi, iż będzie to AI i technologie z nim związane. Azure od dawna posiada serwisy wspomagające rozpoznawanie obrazów czy mowy oraz nauczania maszynowego. Teraz dochodzą usługi związane z głośnym OpenAI. Moim zdaniem to będzie się rozwijać, ale ja osobiście skupiam się na tym, co przydaje się w mojej codziennej pracy.
Przyszłość Azure widzę w jego dostępności kosztowej, bez konieczności chodzenia na kompromisy. I to już widać – pojawiają się nowe plany cenowe usług, które za rozsądną cenę dają duże moce i możliwości, a skorzystanie z oferty ich rezerwacji, co można porównać do abonamentu, jeszcze bardziej zmniejsza ogólny koszt.
Odejdźmy na chwilę od tematyki chmurowej Od 9 lat pracujesz w intive. Co sprawiło i przez cały czas sprawia, iż nie masz potrzeby częstej zmiany środowiska zawodowego, co w IT jest raczej normą?
Dla mnie ważna jest świadomość, iż oprogramowanie, które tworzę, przydaje się komuś i pracuje na rzecz klienta. Żeby mieć szansę doświadczenia tego, potrzebny jest czas, więc daję go sobie, współpracując długoterminowo.
Natomiast to nie jest tak, iż nie zaszły u mnie potrzeby zmiany w przeciągu tych 9 lat i tu ujawnia się siła firmy intive, czyli możliwość zmiany projektu w obrębie organizacji. Nowy projekt, czyli nowy klient i zespół, to prawie jak zmiana środowiska zawodowego, jednocześnie z zachowaniem tego, czego nie da się mieć w nowej firmie od razu, czyli wyrobionej pozycji i opinii u ludzi.
Jesteś zwolennikiem kultury DevOps. W jaki sposób starasz się ją wprowadzać i utrzymywać w swoich projektach?
Przede wszystkim poprzez automatyzację, której jestem dużym fanem. Mam na myśli zarówno wdrażanie oprogramowania, jak i jego testowanie. Może to brzmieć utopijnie, ale uważam, iż co najmniej 90% funkcjonalności jest możliwa do przetestowania przez automat, czy to będą testy jednostkowe, integracyjne czy na końcu akceptacyjne. Dlatego w naszych zespołach testerzy łączą swoją wiedzę i umiejętność wyszukiwania błędów, oraz przewidywania potencjalnych problemów z pisaniem kodu, który je testuje.
Podobnie jest z wdrażaniem napisanego wcześniej kodu – wyznajemy zasadę Infrastructure-as-a-Code i wszystkie nasze serwisy oraz bazy danych jesteśmy w stanie odtworzyć w krótkim czasie ze skryptów.
Trzecia rzecz, na którą chciałbym zwrócić uwagę, to monitorowanie naszych systemów. Dzięki narzędziom dostarczonym przez Azure jest to stosunkowo łatwe, a choćby na swój sposób przyjemne i zarówno programiści, jak i testerzy wykorzystują je w swojej codziennej pracy do nadzorowania bieżącej pracy danego serwisu oraz do analizy tego, co się działo w czasie wystąpienia błędu lub nieprawidłowego użycia systemu przez klienta.
Pełnisz także rolę Team Leadera. Podzielisz się radami, w jaki sposób efektywnie można utrzymywać dobre relacje w zespołach składających się z różnych specjalistów?
To jest dosyć nowa dla mnie rola i tak naprawdę dopiero się jej uczę, tym niemniej uważam, iż najlepsze liderowanie osiąga się poprzez inspirowanie, a nie zarządzanie (choć i to jest potrzebne od czasu do czasu). Swoim podejściem do pracy i zespołu staram się pokazywać, jak chciałbym, żebyśmy funkcjonowali.
Jestem też zwolennikiem budowania relacji przez koleżeństwo. Oczywiście, nie każda osoba w zespole będzie kumplem czy kumpelką, ale pogadanie chwilę o tym, co lubimy, czy jakie mamy plany na weekend, pomaga w utrzymaniu dobrej atmosfery. W czasach pracy zdalnej i zespołu rozproszonego po całej Polsce staramy się też raz na jakiś czas spotkać w biurze, szczególnie przy okazji wizyty naszego klienta, który jest przez nas traktowany jak członek zespołu. Przy okazji ostatniej takiej wizyty, w kilkanaście osób przejechaliśmy rowerami wokół Wrocławia, kończąc wycieczkę w jednym z wielu wrocławskich beach barów
Chciałbym też poruszyć temat współpracy pomiędzy programistami a testerami. Lubię postrzegać obydwie grupy jako jeden zespół trzymający pieczę nad produktem, nad którym pracujemy, od momentu analizy wymagań, poprzez wytworzenie, sprawdzenie, wdrożenie aż po monitoring i wsparcie. Zamiast zlecania testów przez programistów do komórki QA po skończonej implementacji, wolę, jak osoby z obydwu specjalizacji pracują blisko od samego początku, nieomal jak przy pair programmingu.
Marcin Przybyła. Programista i architekt, od początku swojej 17-letniej kariery związany z technologią .NET, w tej chwili opiera swoje rozwiązania głównie na platformie chmurowej Microsoft Azure. Od 9 lat w intive, podczas których tworzył oprogramowanie dla branż Fintech, e-commerce i aktualnie Industrial. Zwolennik automatyzacji, zarówno procesów jak i testów, stara się wprowadzać kulturę DevOps w swoich projektach. Team leader, zorientowany na dobrą atmosferę w zespole. Hobbystycznie bokser z zamiłowaniem do rowerowej jazdy enduro.
Zdjęcie główne pochodzi z Envato Elements.