Jak zaczynałeś swoją karierę w IT i czym obecnie się zajmujesz?
Pracę zacząłem jeszcze na studiach, łącząc naukę w trybie dziennym z niepełnym wymiarem etatu. Specjalizuję się w tworzeniu aplikacji webowych. Zaczynałem w małej firmie, utrzymując system do obsługi ubezpieczeń, a później w korporacji, pracując nad systemem płatności rozwijanym w Javie. Dopiero w 2014 przyszedł czas na pierwszy komercyjny kontakt z Node.js. Implementowałem wtedy system wspierający grę online, zarządzający użytkownikami, mikropłatnościami itp. Od tej pory JavaScript i Node.js na stałe stały się jednym ze stosowanych przeze mnie narzędzi. To doświadczenie doprowadziło mnie do Bitnoise, poznańskiego software house’u, gdzie już od półtora roku pracuję dla Join, berlińskiego startupu, którego produkt pomaga rekruterom w umieszczaniu ofert pracy na różnych internetowych platformach, a kandydatom w znalezieniu pracy. Zajmuję się tam backendem, czyli częścią serwerową – przy użyciu TypeScript i Node.js tworzę rozwiązania w architekturze mikroserwisowej.
Niektórzy błędnie kojarzą pracę programisty ze żmudnym przygotowywaniem kolejnych linijek kodu. Jak patrzysz na swój zawód w kontekście konkretnych zmian dla Klientów firmy, w której pracujesz?
Lubię patrzeć na pracę programisty przez pryzmat problemów użytkowników, które mam okazję rozwiązywać każdego dnia. Innymi słowy, poprzez łamanie technicznych łamigłówek w kodzie mam rzeczywisty wpływ na biznes mojego klienta, a nierzadko też codzienne życie użytkowników. Moja praca nie ogranicza się też wyłącznie do pisania kodu, wręcz przeciwnie. W dużej mierze polega na kontakcie z ludźmi. Programowanie to sport zespołowy, więc interakcji z innymi deweloperami, czy też osobami ze wszystkich działów firmy nie brakuje. Wymagania biznesowe należy doprecyzować, a rozwiązania techniczne wspólnie wypracować. Takie ustalenia są również rzeczywistym efektem mojej pracy. Dlatego też programistom przydają się umiejętności miękkie.
Pandemia koronawirusa uniemożliwia bezpośredni kontakt podczas wydarzeń branżowych, ale na które z nich najchętniej pojechałbyś jeszcze raz?
Tak naprawdę nie jestem typem programisty, który regularnie udaje się na konferencje branżowe. Niestety tracę element networkingu, ale na szczęście większość konferencji udostępnia nagrania z wystąpień na YouTube, więc mogę obejrzeć później wybrane prezentacje. Nie ograniczam się dzięki temu do konkretnych wydarzeń, choć mam swoich faworytów. Z polskich konferencji lubię zaglądać na kanał Boiling Frogs z Wrocławia ze względu na poruszaną tam ogólną tematykę Software Craftsmanship. Wiele ciekawych treści można znaleźć też w materiałach Devoxx oraz GOTO Conferences. Poruszane są tam bardzo zróżnicowane tematy, a niektórzy prelegenci to gwiazdy programistycznego świata.
Jesteś programistą Node.js. Jakie masz najważniejsze doświadczenia w pracy z tym środowiskiem i co uważasz za jego największe atuty?
Node.js to środowisko uruchomieniowe dla kodu JavaScript, więc nie da się pominąć wad i zalet tego języka programowania. Jego wszechobecność, wysokopoziomowość i typowa składnia składają się na niski próg wejścia dla programistów, chcących rozpocząć tę przygodę. Ze względu na moje doświadczenie z Javą szczególnie doceniam prostotę Node.js i to, jak szybko można osiągnąć pierwsze rezultaty. W dużej mierze pomaga w tym bogaty ekosystem bibliotek i narzędzi, udostępnionych za darmo w ramach licencji open source. Jednak tym, co przekonało mnie do spróbowania sił w Node.js jest jego asynchroniczna natura, szczególnie przydatna w środowisku aplikacji webowych. Pozwala na optymalizację wykorzystania zasobów serwera, obsługę wielu równoczesnych połączeń użytkowników oraz osiągnięcie wysokiej wydajności w porównaniu do innych skryptowych języków programowania. Przekłada się to na dobrą skalowalność aplikacji napisanych w Node.js.
Czy podczas tworzenia swoich aplikacji łączysz Node.js z jakimiś innymi językami programowania?
Jak wspomniałem wcześniej Node.js służy do uruchamiania kodu JavaScript. Nie jest to jednak jedyny język programowania dostępny na tej platformie. Istnieje cała grupa różnorodnych języków, które końcowo transpilowane (tłumaczone) są właśnie do JavaScript. Spośród nich zdecydowanie należy wyróżnić TypeScript, który osobiście stosuję. Stworzony i wspierany przez Microsoft zyskuje coraz większe rzesze zwolenników. O jego sile stanowi system statycznego typowania, który pozwala na wyeliminowanie wielu błędów programistycznych jeszcze na etapie powstawania kodu, szczególnie w większych aplikacjach tworzonych w dużych zespołach. Według ankiety przeprowadzonej wśród deweloperów przez StackOverflow w 2020 roku język ten jest uwielbiany przez 67% respondentów i jest w czołówce języków, które programiści chcą poznać jak najszybciej. Warto wspomnieć też o ReasonML. Nie miałem jeszcze okazji go wypróbować, ale to bardzo ciekawy, stosunkowo nowy język. Cechuje go funkcjonalny paradygmat programowania, a także system silnego typowania.
Jakie kompetencje i doświadczenie jest potrzebne, aby skutecznie tworzyć aplikacje w Node.js?
Myślę, że nie jest potrzebne jakieś specjalne doświadczenie. Moim zdaniem Node.js idealnie nadaje się do tworzenia API, czy to REST czy GraphQL. Wystarczy więc wiedza na temat tworzenia takich właśnie aplikacji, a większość konceptów łatwo przenieść na nową technologię.
Programistom posiadającym doświadczenie z innymi językami programowania na początku problemów może przysporzyć konieczność przestawienia sposobu myślenia o przetwarzaniu wielowątkowym. Podczas, gdy wiele serwerów i języków programowania tworzy osobny wątek na każde żądanie użytkownika, Node.js jest domyślnie jednowątkowy, a żądania obsługuje sekwencyjnie w pętli, przełączając się między nimi. Oznacza to, że wszystkie operacje wejścia/wyjścia muszą odbywać się asynchronicznie. W przypadku pomyłki można zablokować wspomnianą wcześniej pętlę i tym samym całe przetwarzanie na serwerze. Oczywiście Node.js, JavaScript oraz biblioteki wspierają domyślnie ten model, jednak jest to pewna zmiana sposobu myślenia, którą należy przeprowadzić.
Jak widzisz dalszy rozwój Node.js? W jakim kierunku ta technologia będzie się rozwijała?
Obecnie platforma jest już dojrzała, więc nie spodziewam się drastycznych zmian. Raczej dalszej stabilizacji i drobnych usprawnień. Jednym z problemów do rozwiązania pozostaje na pewno kwestia bezpieczeństwa importowanych bibliotek. Obecnie są one dostarczane jako open source, jednak pomimo dostępności kodu źródłowego możliwa jest podmiana faktycznej treści na złośliwą. Nie jest to podatność wykorzystywana na szeroką skalę w praktyce, jednak należy mieć ją na uwadze i ograniczać się raczej do popularnych i znanych bibliotek.
Czy uważasz, że Deno już jest gotowe wejść do środowiska produkcyjnego?
Według autorów jak najbardziej i myślę, że do pewnych zastosowań można zacząć stosować tę platformę. Ograniczyłbym się jednak na razie do mniejszych projektów, niekoniecznie krytycznej funkcjonalności systemu. Pomimo obiecujących założeń i ogromnego zainteresowania wciąż nie cieszy się popularnością. Wydaje mi się, że trzeba jeszcze czasu na zbudowanie ekosystemu, powstanie większej liczby bibliotek, wprowadzenie zgłaszanych przez deweloperów usprawnień i poprawę błędów. Należy pamiętać, że to bardzo nowa platforma, której wersja 1.0 wydana została w połowie roku 2020.
Elementem przyspieszającym pisanie programów w Node.js są frameworki, bo dzięki nim nie trzeba tworzyć całego kodu od podstaw. Które z frameworków najczęściej wykorzystujesz?
Nie będzie zaskoczeniem, gdy na pierwszym miejscu wymienię Express. To najpopularniejszy framework do tworzenia aplikacji webowych, szczególnie REST API. Jest niezwykle prosty w użyciu, a wiele bibliotek doskonale się z nim integruje.
Do tworzenia GraphQL API wykorzystuję z kolei TypeGraphQL. Jest ona dedykowana do współpracy z TypeScriptem i umożliwia wygodne zdefiniowanie API za pomocą dekoratorów, zwanych też adnotacjami. Wynikowy kod jest zwięzły i jasny, a także pozbawiony powtórzeń.
Na końcu wspomnę jeszcze o Nest.js. Do tej pory wykorzystywałem go jedynie eksperymentalnie, ale wielu programistów niezwykle sobie go chwali. To bardzo rozbudowany framework, proponujący architekturę i sposoby na rozwiązanie wielu typowych problemów. Ze względu na poziom skomplikowania wymaga czasu, aby go poznać, jednak dobrej jakości dokumentacja zdecydowanie w tym pomaga.
Czy liczy się dla Ciebie komfort korzystania z gotowych rozwiązań, czy jednak widzisz większą potrzebę samodzielnego zarządzania usługą?
Tym razem odpowiedź to klasyczne „to zależy”. Budując skomplikowany wielomodułowy system w architekturze mikroserwisowej, który ma wytrzymać jednoczesny napór tysięcy użytkowników zdecydowanie wybrałbym samodzielnie zarządzaną infrastrukturę. Przy operacjach na dużą skalę istotna jest możliwość kontroli wszystkich elementów, wprowadzania dodatkowych warstw, czy narzędzi. Nie zawsze jednak ma się okazję rozwiązywać problemy tego kalibru. Czasem liczy się prostota i szybkie osiągnięcie pierwszych rezultatów, tzw. time to market. Wtedy domyślna konfiguracja i gotowe elementy są niezwykle przydatne. Zamiast skupiać się na powtarzaniu schematycznych czynności wspólnych dla wszystkich aplikacji i serwerów, można od razu wskoczyć w tworzenie kodu dopasowanego do potrzeb konkretnego klienta. Ułatwia to też znacząco kwestię późniejszego utrzymania serwerów, aktualizacji oprogramowania i wgrywania łatek bezpieczeństwa.
Jak oceniasz przygotowanie serwerów serii CloudHosting w nazwa.pl właśnie pod względem udostępnionego środowiska Node.js?
Muszę przyznać, że do tej pory tworzyłem aplikacje hostowane na samodzielnie zarządzanej infrastrukturze. Miałem jednak w swojej karierze epizod z PHP i to właśnie on przypomniał mi się, gdy wypróbowałem CloudHosting pod kątem Node.js. Wgranie kilku plików na serwer i od razu działa. Niesamowita prostota i natychmiastowe rezultaty. Postępując zgodnie z dokumentacją z Centrum Pomocy nazwa.pl pierwszą odpowiedź z serwera udało mi się uzyskać w kilka minut, a co najważniejsze, jest on już odpowiednio skonfigurowany i zabezpieczony.
Dobrze, że udostępniono kilka różnych interpreterów Node.js, co pozwala zmigrować także starsze aplikacje. Szczególnie dla początkujących miłym dodatkiem są preinstalowane frameworki i biblioteki. Możliwość zalogowania się do serwera po SSH i udostępniony tam zestaw narzędzi takich jak git, pozwala na łatwą aktualizację aplikacji. Automatyzacja wdrożeń sprowadza się do stworzenia prostych skryptów.
Czego według Ciebie programiści piszący w Node.js oczekują od dostawców usług hostingowych?
Przede wszystkim liczy się prostota obsługi i kompletność rozwiązania. Moim zdaniem w przypadku gotowego hostingu ważne jest, aby móc otrzymać pierwsze rezultaty jak najszybciej, a później łatwo rozwijać aplikację. Jeśli programista może skupić się na kodzie, a reszta dzieje się automatycznie – wtedy usługa może odnieść sukces. Wielu deweloperów kod przechowuje w systemie kontroli wersji git, więc umożliwienie jego aktualizacji na serwerze za pomocą tego narzędzia jest kluczowe. Skupiłbym się również na bezpieczeństwie i wydajności serwerów. Nie wyobrażam sobie nie móc zajrzeć do mojego serwera, np. żeby skontrolować logi aplikacji, więc dostęp po SSH to konieczność.
KONIECZNIE PRZECZYTAJ NA BLOGU: