28 porad na 28 urodziny

Nie narzekam na to, że czas upływa. Z każdym rokiem staję się coraz bardziej świadomym programistą. Świadomym tego co już osiągnąłem, tego co zrobiłem źle i tego co zrobiłem dobrze w swoim życiu zawodowym. Dziś kończę 28 lat i mam za sobą ponad pięć i pół roku pracy w branży IT.

W jednym z pierwszych wpisów na tym blogu opisałem drogę, jaką musiałem przejść, żeby zostać programistą. Jeżeli jeszcze nie miałeś okazji przeczytać tego artykułu, to gorąco Cię do tego zachęcam Jak zostałem programistą – historia prawdziwa. Pamiętam doskonale, jak wiele pozytywnych emocji towarzyszyło mi podczas otrzymania pierwszej propozycji pracy. Świetne uczucie! Przez pierwsze lata pracowałem głównie przy tworzeniu aplikacji desktopowych oraz programowaniu dodatków do systemów klasy ERP. Bardzo lubiłem swoją pracę, jednak z czasem chciałem spróbować czegoś innego. Chciałem zajmować się programowaniem aplikacji webowych, a dokładnie tworzeniem warstwy backendowej systemu. Kosztowało mnie to sporo pracy, ale w końcu się udało. Zostałem zatrudniony na stanowisku Backend Developera. Swoją drogę do osiągnięcia tego celu opisałem w jednym z artykułów na tym blogu Od zera do Backend Developera.

Możesz się zastanawiać, kim w ogóle jest Backend Developer? Backend Developer to programista, który zajmuje się programowaniem logiki aplikacji i jest odpowiedzialny za to, czego na pierwszy rzut oka nie widzi użytkownik danej strony czy aplikacji. Odpowiada za poprawne działanie danego systemu po stronie serwerowej, zapewniając jego funkcjonalności od strony technicznej.

Z okazji moich 28 urodzin przygotowałem dla Ciebie 28 poradJak zostać Backend Developerem:

  1. Naucz się języka programowania. Warstwa backend’owa aplikacji może być pisana w jednym z wielu języków programowania, np.: C#, Java, PHP, Python, Ruby, a nawet JavaScript. Każdy język programowania oraz związane z nim środowisko ma swoje mocne i słabsze strony. W początkowej fazie nauki backendu nie ma jednak większego znaczenia, na którą technologię się zdecydujemy. Z racji tego, że jestem związany z .NET’em, to będę gorąco zachęcał Cię do nauki C#.
  2. Ćwicz to, czego się nauczyłeś. Nie ma lepszego sposobu na naukę niż ćwiczenie. Po wybraniu języka i zrozumieniu podstawowych pojęć postaraj się je stosować. Twórz jak najwięcej małych aplikacji. Zacznij od prostych aplikacji konsolowych, np. kalkulator, gra w zgadywanie liczby, menadżer zadań.
  3. System kontroli wersji. Absolutnym must have jest poznanie któregoś z systemów kontroli wersji, np. Git. Pozwala on na śledzenie wszystkich zmian dokonywanych na pliku (lub plikach) i umożliwia przywołanie dowolnej wcześniejszej wersji. System kontroli wersji ułatwia pracę wielu programistów nad jednym projektem w tym samym czasie.
  4. Naucz się managera pakietów. Po zrozumieniu podstaw języka i stworzeniu przykładowych aplikacji dowiedz się, jak używać managera pakietów dla wybranego języka. Pomagają one w korzystaniu z zewnętrznych bibliotek w aplikacjach oraz we współdzieleniu bibliotek z innymi. Jeśli wybrałeś C#, to musisz nauczyć się korzystać z NuGet.
  5. Standardy i najlepsze praktyki. Każdy język ma własne standardy i najlepsze praktyki dotyczące pisania oraz organizacji kodu. Dowiedz się jak pisać czysty kod. Naucz się stosować zasady SOLID w swoich projektach. Poznaj inne użyteczne koncepty projektowe takie jak: DRY, KISS oraz YAGNI.
  6. Naucz się korzystać z ORM. Mapowanie obiektowo-relacyjne (Object-Relational Mapping ORM) to sposób odwzorowania obiektowej architektury na bazę danych (lub inny element systemu) o relacyjnym charakterze. Implementacja takiego odwzorowania stosowana jest m.in. w przypadku, gdy tworzony system oparty jest na podejściu obiektowym, a system bazy danych operuje na relacjach. W przypadku platformy .NET najpowszechniejszymi rozwiązaniami ORM są Entity Framework, NHibernate oraz Dapper.
  7. Wstrzykiwanie zależności. Wzorzec projektowy i wzorzec architektury oprogramowania polegający na usuwaniu bezpośrednich zależności pomiędzy komponentami na rzecz architektury typu plug-in. Polega na przekazywaniu gotowych, utworzonych instancji obiektów udostępniających swoje metody i właściwości obiektom, które z nich korzystają (np. jako parametry konstruktora). Być może brzmi to zawile, ale jest bardzo proste do zastosowania w projekcie, dzięki czemu kod staje się bardziej elastyczny i testowalny.
  8. Dowiedz się więcej o testowaniu. Istnieje kilka różnych typów testów. Poznaj je oraz ich zastosowania. Na początek dowiedz się, jak pisać testy jednostkowe i integracyjne w swoich aplikacjach. Następnie dowiedz się, co to są i jak pisać testy funkcjonalne i testy automatyczne. Zrozum także terminologie testowania, jak np. mock, stubs itd. Do tworzenia testów wykorzystaj framework xUnit albo NUnit.
  9. Poznaj relacyjne bazy danych. Dowiedz się, jak utrwalać dane w relacyjnej bazie danych. Do tworzenia i modyfikowania baz danych oraz do umieszczania, edytowania, usuwania i pobierania danych z baz danych służy język SQL. Najczęściej wykorzystywanym systemem zarządzania bazą danych jest Microsoft SQL Server (MS SQL). Naucz się SQL, a następnie zapoznaj się z różnymi terminologiami dotyczącymi baz danych, np. typy danych, więzy integralności, klucze, indeksy, normalizacja, krotki, atrybuty.
  10. Zastosuj to, co już umiesz. Czas wykorzystać wszystko, co wiesz. Utwórz prostą aplikację, korzystając ze wszystkiego, czego nauczyłeś się do tej pory. Może to być dowolny pomysł, np. prosta aplikacja do blogowania. Zaimplementuj w niej poniższe funkcje: Konta użytkowników – rejestracja i logowanie Zarejestrowany użytkownik może tworzyć posty na blogu. Użytkownik powinien mieć możliwość przeglądania wszystkich utworzonych przez siebie postów na blogu. Powinien mieć możliwość usuwania swoich postów na blogu. Upewnij się, że użytkownik widzi wyłącznie swoje własne wpisy. Napisz testy jednostkowe/integracyjne dla aplikacji. Dodaj indeksy do bazy danych i upewnij się, że są używane w zapytaniach, które generuje aplikacja. Użyj wstrzykiwania zależności. Przy implementacji warstwy dostępu do danych skorzystaj z dowolnego ORMa. Staraj się trzymać porządek w swoim kodzie i przestrzegać zasad SOLID.
  11. Naucz się frameworka. W zależności od projektu i wybranego języka możesz potrzebować frameworka do tworzenia danego typu aplikacji. Możesz przecież tworzyć różne typy aplikacji, np. desktopowe, webowe, mobilne, chmurowe, serwisy, IoT. W przypadku platformy .NET masz możliwość skorzystania z wielu różnych frameworków wspierających tworzenie aplikacji danego typu. Do tworzenia aplikacji desktopowych możesz wykorzystać WinForms, albo WPF. Do aplikacji webowych framework ASP .NET. Do aplikacji mobilnych Xamarin, albo Xamarin Forms. Do aplikacji chmurowych Azure. Itd. itd.
  12. Tworzenie RESTful API. Zrozum, czym jest REST i dowiedz się, jak tworzyć RESTful API. Koniecznie przeczytaj część o REST z oryginalnego artykułu Roya Fieldinga. Opanuj protokół HTTP/HTTPS. Koniecznie dowiedz się, czym jest HATEOAS i jak go poprawnie zaimplementować.
  13. Bazy danych NoSQL. Na początek dowiedz się, czym różnią się od relacyjnych baz danych i dlaczego są takie potrzebne. Porównaj je pod kątem funkcjonalności i różnic. Polecam sprawdzić możliwości nierelacyjnych baz danych MongoDB oraz Microsoft Azure Cosmos DB.
  14. Logowanie danych. Logi pozwalają na chronologiczny zapis zawierający informację o zdarzeniach i działaniach dotyczących systemu informatycznego, systemu komputerowego czy komputera. Log tworzony jest automatycznie przez dany program komputerowy, a sama czynność zapisywania do logu nazywana jest też logowaniem – nie należy mylić tego określenia z logowaniem w celu wykonania uwierzytelnienia. Do logowania danych możesz wykorzystać bardzo popularną bibliotekę NLog.
  15. Cache’owanie. Dowiedz się, jak zaimplementować cache w swojej aplikacji. Naucz się, jak używać Redis lub Memcached i zaimplementuj cache’owanie w aplikacji zbudowanej w kroku 10.
  16. Poznaj różne metody uwierzytelniania. Poczytaj o różnych metodach uwierzytelniania i autoryzacji. Powinieneś wiedzieć, czym są, jakie są między nimi różnice i kiedy wybierać które z nich: OAuth – otwarte uwierzytelnianie, Basic Auth, Autentykacja tokenem, JWT – JSON Web Tokens, OpenID.
  17. Bezpieczeństwo. Zapoznaj się z najlepszymi praktykami dotyczącymi bezpieczeństwa. Przeczytaj wytyczne OWASP i zrozum różne problemy związane z bezpieczeństwem oraz sposoby ich unikania w wybranym języku. Poznaj algorytmy hashowania i dowiedz się czym jest MD5 I SHA.
  18. Brokery wiadomości. Dowiedz się, czym są brokery wiadomości oraz kiedy i dlaczego z nich korzystać. Jest ich sporo do wyboru, ale czołowe są RabbitMQ i Kafka. Jeśli chcesz wybrać jeden, to RabbitMQ jest najlepszą opcją.
  19. Naucz się korzystać z Dockera. Docker może znacznie ułatwić Ci rozwój aplikacji, niezależnie od tego, czy jest to replikacja tego samego środowiska co na produkcji, utrzymanie czystego systemu operacyjnego, czy przyspieszenie kodowania, testowania lub wdrażania.
  20. Silnik do wyszukiwania. W miarę rozwoju aplikacji, proste zapytania do relacyjnej bazy danych lub NoSQL przestaną wystarczać i będziesz musiał skorzystać z silnika do wyszukiwania. Istnieje wiele opcji, z których każda ma unikalne właściwości. Na samym początku warto zapoznać się z silnikiem Elasticsearch.
  21. CI/CD. Continuous integration (CI) i Continuous Delivery (CD) to zbiór zasad, wytycznych, kultura pracy i kolekcja dobrych praktyk dotyczących pracy nad projektami informatycznymi. Dzięki nim zespół developerów ma możliwość częstszego dostarczania pewnych, przetestowanych i sprawdzonych zmian w kodzie. Implementacja tych praktyk często nazywana jest CI/CD pipeline i jest uważana za jeden z najlepszych i najefektywniejszych sposobów pracy nad projektami informatycznymi i ich rozwojem. Spróbuj utworzyć prosty CI/CD pipeline dla swojego projektu korzystając np. z Azure DevOps Server, TeamCity albo GitHub.
  22. Znajomość serwerów www. Zrób rozeznanie na temat różnic między różnymi serwerami www, poznaj ich ograniczenia i dostępne opcji konfiguracji oraz dowiedz się jak pisać aplikacje działające najlepiej przy tych ograniczeniach.
  23. Naucz się GraphQL. GraphQL to język zapytań i manipulacji danymi typu open source dla interfejsów API oraz środowisko wykonawcze do wypełniania zapytań na podstawie istniejących danych. Dowiedz się, jak tworzyć API za pomocą GraphQL.
  24. Wzorce projektowe. Wzorce projektowe to uniwersalne, sprawdzone w praktyce rozwiązanie często pojawiających się, powtarzalnych problemów projektowych. Na początek naucz się kilku podstawowych wzorców projektowych: Dekorator, Strategia, Obserwator, Budowniczy, Singleton, Fasada.
  25. Monitorowanie. Bardzo istotnym elementem utrzymania API jest jego monitorowanie. Pozwala ono mi. na wczesne wykrywanie problemów, utrzymanie ciągłości ruchu na stronie oraz przewidywanie zachowań użytkowników. Do monitorowania API możesz użyć np. App Metrics albo Azure Application Insights.
  26. Publikowanie. Naucz się wdrażać swoje API na serwer IIS oraz na chmurę Azure.
  27. Wzorzec CQRS. CQRS to wzorzec architektoniczny, który oddziela modele umożliwiające odczytywanie i zapisywanie danych. Warto nauczyć takiego podejścia do tworzenia aplikacji, ponieważ pozwala ono na rozwiązanie wielu problemów wydajnościowych oraz ułatwia wprowadzanie modyfikacji w przyszłości.
  28. Nie spoczywaj na laurach. Zaczynając się samodzielnie uczyć i ćwiczyć, na pewno natkniesz się na rzeczy, których nie omówiliśmy w tym planie działania. Zachowaj “otwartą głowę” i apetyt na naukę nowych rzeczy. I pamiętaj, że kluczem jest praktyka. Na początku wszystko będzie wyglądać strasznie i możesz poczuć, że niczego nie rozumiesz. Musisz zdać sobie sprawę, że jest to normalne i z czasem poczujesz się pewniej. Nie rezygnuj. Bądź wytrwały i cierpliwy.

Cieszę się z tego w jakim miejscu teraz jestem w życiu. Chciałabym przeżyć to życie jak najlepiej, dlatego niezwykle mnie cieszy, że z każdym rokiem wyciągam z życia coraz więcej, coraz więcej o sobie wiem i coraz bardziej przesuwam swoje granice. Nie wszystko wychodzi, ale najważniejsze to się nie poddawać. Wam życzę tego samego.


Na koniec chciałbym gorąco zachęcić się do zapisania się na mój cotygodniowy newsletter.