Podsumowanie 4 lat na stanowisku programisty

Posted by

Od początku mojej kariery minęło już trochę czasu (dokładnie 4 lata :p), co pozwoliło mi nauczyć się wielu nowych rzeczy i ugruntować te, które już znałem. Również pozwoliło zmienić kilkukrotnie podejście do programowania, jak i stosunek do pewnych praktyk, które opisuje poniżej. Z każdym rokiem jak czytam poprzedni wpis z tej kolekcji, śmieje się, a jednoczenie cieszę jak mało wiedziałem w poprzednim roku a jak wiele się nauczyłem :). Cele z poprzednich lat często się zmieniają i trzeba z nich zrezygnować albo je odłożyć w czasie. To chyba pierwsze podsumowanie gdzie je wszystkie udało mi się zrealizować i z takim progresem, że jestem z tego dumny 😀

W odniesieniu do celów z poprzedniego roku:

Z racji, że DDD wykorzystuje na co dzień to, co chwila, ulepszam swój system pojęć oraz procesów wytwarzania oprogramowania (kodowania ;p). Adaptując jakieś wymaganie biznesowe (bo głównie takie aplikacje piszę w pracy) podchodzę do tego w sposób bardziej abstrakcyjny niż w poprzednich latach. Świadomie sięgam po wzorce projektowe, których znam już coraz więcej (…, fasadę, dekoratora, itd). Schemat klas sam mi się już układa w głowie i nie plończę tego z magazynami danych jak kiedyś. Fajne w tym jest, że są to rzeczy niezależne od technologii więc czy koduje cos w PHP, czy w NodeJS, czy jeszcze w innym języku to myślę podobnie.

MQTT i RabitMQ wykorzystywałem już nie raz, ale nie miałem jeszcze okazji samemu pobawić się w stawianie brokerów i całej infrastruktury z tym związanej, oraz adaptować to od zera w złożonych aplikacjach (tylko prostych). Pomimo tego i tak, dość daleko zaszedłem w tym kierunku i wiem co się, z czym je, a to na razie najważniejsze, bo na praktyczne zastosowanie w moich projektach (Smarthome) niedaleka droga.

Z dokerem jest śmiesznie, bo o ile miałem się poddać, bo rzucał mi sporo kłód pod nogi, szczególnie w zaawansowanych projektach (kiedy konfigurowałem go sam od zera) to postanowiłem kupić książkę, która bardzo dużo mi uzmysłowiła i poukładała wcześniej zdobytą wiedzę. Teraz konfigurowanie projektu na Dokerze, środowiska developerskiego z użyciem docker-compose, oraz budowanie deploy’ów opartych o Dockera (pull, run) jest chlebem powszednim. Zrozumiałem, jak działa plik Dockerfile, jak można go podzielić na sekcje. Poznałem czym są sieci dokera oraz volumeny i jak działa to pod spodem. Dla zbudowanych obrazów wykorzystuje registry, skąd mogę pobierać je i uruchamiać na dowolnym serwerze.

Projekt inteligentnego domu wreszcie ruszył pełną parą. Zacząłem od przygotowania kilku czujników jak: bathroom-hygrostat oraz energy-meter po to, aby móc skonfigurować infrastrukturę, oraz napisać aplikacje frontend i backend. Dashboard na którym wyświetlam wszystkie informacje dot. czujników, wykresy itp. napisany jest w React, niestety (albo stety) bez Typescript, gdyż za dużo czasu wymaga pisanie aplikacji frontendowych z użyciem jego. Testów i tak nie planuje pisać do frontendu. Backend natomiast jest rozłożony na mikroserwisy. Póki co są dwa, jeden główny (taki apigateway), przez niego się komunikuje frontend, oraz drugi do zbierania danych z czujników i magazynujący je w bazie danych.

Aby, móc w pełni zarządzać architekturą inteligentnego domu kupiłem sobie serwer VPS, na którym uruchamiam obrazy Dockera z poszczególnymi aplikacjami. W tym roku planuje pójść jeszcze dalej w tym kierunku i chciałbym mieć już pierwszą wersję smarthome gotową, tak aby jej rozwój był względnie prosty :).

Co nowego weszło mi do głowy?

Dzięki IoT i kupieniu własnego VPS mój poziom zaznajomienie z terminalem urósł diametralnie. Operowanie na plikach, zarządzanie procesami, konfigurowanie różnych aplikacji terminalowych jest już chlebem powszednim. Programuje w 100% na Linux’ie wiec pierwszą rzecz, jaką uruchamiam po włączeniu komputera jest właśnie terminal :D. Coraz więcej rzeczy zamiast „wyklikiwać” wykonuje właśnie przez niego.

Podszkoliłem się również solidnie w NodeJS. Na końcu poprzedniego roku i początku aktualnego, wraz z dwoma kolegami wystartowaliśmy w konkursie, w którym musieliśmy napisać aplikacje crawlującą internet pod względem przekazanych parametrów: tagów, obrazków, zakresu IP. Główna część aplikacji została napisana w NodeJS z użyciem frameworka NestJS. Całość powstała w TypeScript z wykorzystaniem DDD oraz pisaniem testów jednostkowych, oraz integracyjnych. Co ciekawe aplikacja działa jako natywna i oparta jest o framework Electrona, aby moc zostać uruchomiona na komputerze. Projekt bardzo rozwojowy i wiele mnie nauczył 🙂

Będąc jeszcze w świcie IoT to na pewno sporo się nauczyłem dzięki mikrokontrolerom ESP. Pozwoliły tworzyć one mini serwery WWW. Wykorzystałem do tego narzędzie PlatformIO, które pozwala w bardzo łatwy sposób tworzyć oprogramowanie na różne rodzaje mikrokontrolerów z wykorzystaniem biblioteki Ardiuno, która ułatwia prace. Na moim Gitlabie jest dostępne kilka przykładów działających czujników.

Bardzo spodobało mi się podejście gitlab’owe do CI/CD oraz to, że oferuje ono registry gdzie można trzymać zbudowane obrazu docker’owe. Nauczyłem się budować pliki gitlab-ci oraz konfigurować runnery na własnym serwerze. Ułatwiło mi to dużo pracy związanej z budowaniem aplikacji oraz jej późniejszym deploy’em na serwer.

Plany na kolejny rok:

  1. Na pewno parcie w IoT i rozbudowywanie infrastruktury inteligentnego domu, jest to mój główny cel, który łączy oraz otwiera wiele nowych dróg.
  2. Może znalazłoby się trochę czasu na Pythona, ML oraz AI. Mam kilka ciekawych pomysłów na wykorzystanie tego w praktyce, więc jak znajdzie się wolna chwila to z chęcią do tego przysiądę.
  3. Asynchroniczna komunikacja między serwisami jak MQTT oraz RabbitMQ. Postawienie brokera na własnym serwerze oraz samodzielne skonfigurowanie całej infrastruktury z tym związanej.
print

Leave a Reply

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *