W świecie IT panuje dość powszechne przekonanie, że backend jest bardzo trudny i nie do zrozumienia dla statystycznej osoby. Dodatkowego smaczku dodaje mit programisty zamkniętego w swojej programistycznej jaskini, który komunikuje się ze światem zewnętrznym tylko przy pomocy ciągu zer i jedynek. Spróbuję dziś obalić przynajmniej część tych mitów oraz przybliżyć Ci stanowisko backend developera. Chciałbym, byś po przeczytaniu tego artykułu mógł odpowiedzieć na pytanie, czy nadajesz się na backend developera, oraz – co bardzo ważne – czy chciałbyś nim zostać. Zapraszam do lektury.
[SprawnyProgramista_intro]Z tego odcinka dowiesz się:
- co to jest back-end oraz front-end oraz jakie są między nimi różnice;
- czym na co dzień zajmuje się backend developer;
- jakie umiejętności i technologie trzeba znać, by zostać backend developerem;
- oraz, gdzie można nauczyć się tych umiejętności.
Spis treści
- 1 Co to jest back-end oraz front-end?
- 2 Czym zajmuje się backend developer?
- 3 Z kim na co dzień pracują programiści?
- 4 Jakie umiejętności i technologie muszę znać, by zostać backend developerem?
- 4.1 Umiejętność #1. Bardzo dobra znajomość przynajmniej jednego języka programowania typowego dla backendu
- 4.2 Umiejętność #2. Znajomość baz danych
- 4.3 Umiejętność #3. Zrozumienie technologii występujących na frontend
- 4.4 Umiejętność #4. Zarządzanie infrastrukturą i środowiskami
- 4.5 Umiejętność #5. Warstwa pośrednia (ang. middleware)
- 4.6 Umiejętność #6. Doświadczenie z systemami kontroli wersji
- 4.7 Umiejętność #7. Umiejętności miękkie
- 5 Gdzie mogę nauczyć się tych umiejętności?
- 6 Podsumowanie
- 7 20+ BONUSOWYCH materiałów z programowania
Co to jest back-end oraz front-end?
Zacznijmy od małego wprowadzenia do terminologii. W zależności od wykonywanych zadań web developerów, czyli programistów pracujących nad aplikacjami internetowymi, możemy podzielić na trzy główne kategorie: front end, back end oraz full stack developer.
1. Front end developer
Front end to część aplikacji działająca po stronie użytkownika (ang. client-side) – czyli wszystko to, co odbywa się po stronie przeglądarki internetowej. Jako użytkownicy bezpośrednio korzystamy właśnie z tej części aplikacji. Jest to również jedyna część systemu, którą możemy obejrzeć i wejść z nią w bezpośrednią interakcję. Wszystkie pozostałe komponenty systemu są dla nas niedostępne i możemy się z nimi komunikować tylko za pomocą GUI (ang. graphical user interface) dostarczonego właśnie przez frontend.
Programiści, którzy większość czasu pracują nad tą częścią aplikacji, nazywani są frontend developerami.
2. Back end developer
Back end jest to natomiast część aplikacji znajdująca się na zewnętrznym serwerze, do której użytkownik nie ma bezpośredniego dostępu (ang. server-side). Możemy ją traktować jak swego rodzaju szarą eminencję, która działa z ukrycia i zarządza systemem. Mimo iż nie widzimy jej, to jest ona niezbędna do prawidłowego działania aplikacji.
Po stronie backendu następuje obsługa danych przetwarzanych w systemie oraz ich zapis i odczyt w bazie danych. Odpowiednio przygotowane informacje są następnie udostępniane przy pomocy API (ang. application programming interface), np. usługi typu REST do frontendu, gdzie prezentowane są użytkownikowi.
Analogicznie jak w poprzednim przypadku, programistów pracujących po stronie backendu nazywamy backend developerami.
3. Full stack developer
To stanowisko łączy w sobie dwa poprzednie, a tego typu programiści są w stanie pracować zarówno na froncie, jak i backendzie.
W tym miejscu warto zwrócić uwagę na zamieszanie powstałe w tym podziale w ostatnich latach. Niezwykle gwałtowny rozwój JavaScript (nawet jak na standardy panujące w informatyce) oraz wszystkich towarzyszących frameworków spowodował, że ten język nie jest już tak sztywno związany tylko z frontendem.
Liderem w wyścigu tych zmian od dość dawna jest Node.js, dzięki któremu z powodzeniem można pisać część aplikacji zarówno frontendowej, jak i backendowej. Jest to niewątpliwie bardzo ciekawy trend, który w kolejnych latach ma duże szanse, by jeszcze się upowszechnić.
Zostawmy jednak już świat frontendu i skupmy się na programiście backendu oraz na umiejętnościach, jakie trzeba posiąść, by móc wykonywać ten zawód.
Czym zajmuje się backend developer?
Backend developer odpowiedzialny jest za budowanie usług w aplikacjach, które następnie wystawiane są na światło dzienne przy pomocy specjalnego API. Mimo iż backend developer zajmuje się wewnętrzną częścią aplikacji, wciąż musi blisko współpracować z frontend developerami, którzy często korzystają z jego pracy, wywołując gotowe komponenty lub pobierając dane.
Taka charakterystyka pracy może być bardzo trudna dla wielu osób. Dość powszechne jest, że pracuje się całe dnie czy nawet tygodnie nad daną funkcjonalnością, a dla świata zewnętrznego wystawiony jest tylko jeden prosty endpoint, który ją wywołuje. Wynikami takiej pracy dość ciężko jest pochwalić się komuś spoza branży.
W codziennej pracy programiści tego typu najczęściej piszą swój kod w językach typu PHP, Java, czy C#. Ich zadaniem jest również zapewnienie wydajnego i szybkiego działania aplikacji – co w niektórych sytuacjach może być wyjątkowo trudne, np. podczas przetwarzania bardzo dużych zbiorów danych.
Co więcej, backend developer bardzo często przygotowuje również bazę danych, w której przechowywane są dane naszej aplikacji. Baza danych jest jednym z kluczowych elementów większości systemów i ciężko wyobrazić sobie bardziej zaawansowaną aplikację, która działałaby bez niej. Najczęściej wykorzystywane silniki baz danych to: MySQL, PostgreSQL, Oracle oraz MongoDB.
Poszczególni programiści mogą być też oddelegowani do różnych specjalistycznych zadań, jak np. obsługi security, przygotowania API, integracji danych, przygotowania bazy danych czy naprawy błędów, czyli z angielskiego: maintenance.
Z kim na co dzień pracują programiści?
Programiści typowo pracują w zespołach projektowych. Większe zespoły składają się z frontend inżynierów, specjalistów od UX, specjalistów od zapewniania jakości QA (ang. quality assurance) oraz innych programistów backendu. W zależności od potrzeb, na konkretnym stanowisku może być kilka osób w zespole lub, jeżeli są mniej potrzebne, mogą one także przynależeć do różnych innych grup.
Dość powszechną praktyką jest również tworzenie zespołów w poprzek tej struktury, tak by osoby na tym samym stanowisku mogły razem pracować. Wtedy należysz do swojego zespołu projektowego oraz np. do grupy backend developerów. Taki podział pomaga dzielić się specjalistyczną wiedzą z danej dziedziny.
Zdarza się również, że bardziej doświadczone osoby oddelegowywane są do kontaktów z klientem.
Jakie umiejętności i technologie muszę znać, by zostać backend developerem?
Zestaw umiejętności, jakimi dysponują bardziej doświadczone osoby z branży, może rzeczywiście być przytłaczający. Pamiętaj jednak, że na taki bagaż doświadczeń trzeba pracować całymi latami, a na początku kariery programistycznej wystarczy niewielki wycinek tej wiedzy.
Konkretne wymagania zazwyczaj znajdziesz w opisie stanowiska dostarczonego przez firmę szukającą pracowników. Ja ze swojej strony zebrałem jednak kilka najczęściej pojawiających się umiejętności, na które warto zwrócić uwagę na starcie.
Zachęcam również do zapoznania się z poniższymi artykułami – znajdziesz w nich praktyczne rady zebrane przez kolegów po fachu.
➡ ZOBACZ 👉:
Umiejętność #1. Bardzo dobra znajomość przynajmniej jednego języka programowania typowego dla backendu
Od tego nie uciekniesz. Język programowania jest jednym z głównych narzędzi pracy dla programisty i jego dobra znajomość to podstawa. Poniżej opis kilku częściej wykorzystywanych języków.
- Java: to bardzo uniwersalny język programowania, oferujący współbieżność, który jest zorientowany na klasy i obiekty. Podstawowa wersja kodu bardzo mocno przypomina tę napisaną w C++, co zaowocowało łatwiejszą migracją starszych developerów do tego języka. Dzięki wykorzystaniu maszyny wirtualnej (ang. Java Virtual Machine) napisany kod jest niezależny od platformy. Motto, które przyświecało twórcom, to: „Compile once, run anywhere”. Java jest bardzo często wybierana do dużych korporacyjnych projektów, które będą rozwijane przez wiele lat. Jest to również mój główny język programowania, w którym programuję na co dzień.
➡ ZOBACZ 👉: Kurs Java | Darmowy Kurs Programowania w Javie
- Ruby: dobrze sprawdza się dla start-upów, gdzie trzeba bardzo szybko dostarczać kolejne wersje produktu. W większości wypadków wykorzystywany jest z frameworkiem Ruby on Rails. Najpopularniejsza strona wykorzystująca tę technologię był Twitter – obecnie jednak w dużej mierze został przepisany na Java i Scala.
- C#: to ulepszona, zorientowana obiektowo wersja języka C. Została opracowana przez Microsoft specjalnie na potrzeby .NET Framework. Najpopularniejsze portale wykorzystujące tę technologię to oczywiście microsoft.com oraz msn.com.
- Python: kod napisany przy pomocy Pythona może być wyjątkowo krótki, a zarazem stosunkowo prosty i czytelny. Dzięki temu bardzo często wykorzystywany jest do nauki programowania oraz projektów, które muszą być szybko wypuszczone na rynek (np. wszelkiego rodzaju start-upy). Python wykorzystywany jest w tak popularnych serwisach, jak Google i YouTube.
- PHP: PHP obecnie może pochwalić się największą ilością stron zrobioną przy jego pomocy. Ciekawostką jest to, że jako jeden z niewielu języków programowania został specjalnie zaprojektowany do tworzenia stron internetowych, a nie tylko do tego zaadaptowany. Najpopularniejszy portal społecznościowy Facebook również został w dużej mierze napisany z wykorzystaniem PHP.
- Node.js i JavaScript: dzięki Node.js dokonał się swego rodzaju przełom. JavaScript, który do tej pory był uważany za język przeznaczony tylko do frontendu, przebojem wdarł się do aplikacji backendowych.
➡ ZOBACZ 👉: ➡ ZOBACZ 👉: Pytania rekrutacyjne JavaScript
Umiejętność #2. Znajomość baz danych
To właśnie backend developerzy odpowiedzialni są za komunikację z bazą danych, przez co na tym stanowisku wymagana jest przynajmniej podstawowa znajomość zagadnień bazodanowych. Nie znaczy to jednak, że – pracując jako programista – musisz być również specjalistą od wszelkich zaawansowanych technik optymalizacji, replikacji baz danych itp. Zazwyczaj w większych zespołach są oddelegowane do tego dedykowane osoby. W codziennej pracy programiście wystarczą podstawy komunikacji z bazą danych, które najczęściej realizowane są przy pomocy jakiejś biblioteki – np. JPA/Hibernate w Javie.
Większość projektów wykorzystuje relacyjne bazy danych i od ich poznania warto zacząć. W kolejnym kroku opłaca się zainteresować przynajmniej jedną bazą typu NoSQL – bazy tego typu coraz chętniej wykorzystywane są w większych projektach.
- Oracle: to komercyjna baza danych obsługująca wiele różnych modeli (np. Object-relational i JSON), która rozwijana jest przez Oracle Corporation. Dość często można ją spotkać w dużych korporacyjnych projektach. Jednak mniejsze firmy częściej wybierają darmowe rozwiązania, głównie ze względu na dość drogie opłaty licencyjne.
- MySQL: to darmowa, relacyjna baza, obecnie rozwijana również przez firmę Oracle. Jest centralnym punktem jednego z bardziej popularnych stosów technologicznych LAMP (Linux, Apache, MySQL, PHP).
- PostgreSQL: PostgreSQL zalicza się do baz typu RDBMS (ang. Relational Database Management System) z rozszerzeniami obiektowymi.
- MongoDB: jest to darmowa, rozwijana na licencji open source, dokumentowa baza typu NoSQL. MongoDB przechowuje dane w formacie podobnym do JSON-a, dzięki czemu struktura przechowywanych dokumentów może być modyfikowana w czasie.
Umiejętność #3. Zrozumienie technologii występujących na frontend
Dobrego specjalistę można poznać po tym, że wie i rozumie, co się wokół niego dzieje. Pisząc usługi backendowe, warto zastanowić się, kto, w jaki sposób i dlaczego będzie później z tego korzystał. Dobre zrozumienie swojego klienta, który w tym wypadku najczęściej jest programistą pracującym na frontendzie, może uchronić cały zespół przed różnego rodzaju pomyłkami i niedopowiedzeniami.
Dzięki przynajmniej podstawowej wiedzy na temat technologii, w jakich wytwarzane są aplikacje frontendowe, będziesz bardziej świadomym i docenianym programistą backendu. Nie znaczy to, że powinieneś teraz zgłębiać tajniki CSS3 czy AngularJS, warto jednak zobaczyć, jak te technologie wyglądają i jaki będą miały wpływ na Twoją pracę.
Umiejętność #4. Zarządzanie infrastrukturą i środowiskami
Przeciętny projekt składa się przynajmniej z trzech różnych środowisk: lokalnego (developerskiego), testowego oraz produkcyjnego. Zdarzają się jednak sytuacje, że bywa ich znacznie więcej, np. środowisko pod demo dla klienta, środowisko pod konkretne testy lub dedykowane na rozwój specyficznej funkcjonalności itp.
W natłoku tych różnych środowisk trzeba się jakoś odnaleźć i odpowiednio nimi zarządzać. Nawet jeżeli nie musimy tego wszystkiego samemu konfigurować, to trzeba wiedzieć, jak to działa, by móc z tego później korzystać. Całe szczęście – mamy obecnie cały zbiór narzędzi oraz dobrych praktyk, które ułatwiają ten proces.
W tym miejscu warto przede wszystkim zainteresować się Dockerem, który z całą pewnością usprawni tworzenie kolejnych podobnych środowisk i nie będzie potrzeby konfigurowania za każdym razem wszystkiego ręcznie.
Umiejętność #5. Warstwa pośrednia (ang. middleware)
Wiele aplikacji uruchamianych jest na serwerach tak zwanej warstwy pośredniej (ang. middleware). Tego typu aplikacje umieszcza się na serwerze, a dopiero w ich obrębie instalowane są nasze docelowe aplikacje. Taka dodatkowa warstwa abstrakcji umożliwia łatwiejsze i zbiorcze zarządzanie naszym systemem, np. przez jednolitą obsługę połączeń z bazą danych, zapewnienie ogólnie pojętego bezpieczeństwa czy obsługę logów itp.
Dodatkowe skomplikowanie architektury mimo swoich plusów wymaga jednak również dodatkowej wiedzy developerów, którzy później mają ją obsługiwać. Do najczęściej występujących serwerów aplikacji w środowisku Javy można zaliczyć WildFly, Apache Tomcat, GlassFish, Oracle WebLogic i IBM WebSphere.
Umiejętność #6. Doświadczenie z systemami kontroli wersji
Czasy trzymania różnych wersji kodu źródłowego w kolejnych katalogach z datą w nazwie całe szczęście bezpowrotnie już minęły. Obecnie najpopularniejszym systemem kontroli wersji jest GIT, który zdecydowanie zasługuje na miano lidera w swojej kategorii. Niezależnie od technologii, w jakich będziesz pracował, jest bardzo duże prawdopodobieństwo, że właśnie z nim będziesz miał do czynienia w swoim projekcie, dlatego warto się nim zainteresować już teraz.
Podstawowe założenia oraz przydatne komendy znajdziesz w podlinkowanym tutorialu:
➡ ZOBACZ 👉: Git tutorial | stash, rebase, commit, merge, checkout, push i clone
Umiejętność #7. Umiejętności miękkie
Kompetencje miękkie przez wielu traktowane są jako drugorzędne, czyli mniej ważne. Oczywiście jest to bardzo dużym błędem. Nawet jeżeli jesteś już wyjadaczem we wszystkich możliwych technologiach, a nie umiesz pracować w grupie lub – co gorsza – nawet są kłopoty, żeby się z Tobą porozumieć, to Twoja wartość na rynku pracy będzie zdecydowanie niższa, niż wskazywałyby na to twoje „twarde skile” (ang. hard skills) i doświadczenie.
Mimo iż nie jest to takie proste, zdecydowanie warto również popracować nad swoim charakterem.
➡ ZOBACZ 👉: Umiejętności i kompetencje miękkie – soft skills
Gdzie mogę nauczyć się tych umiejętności?
Większość backend developerów może pochwalić się wykształceniem kierunkowym oraz dyplomem wyższej uczelni. Mimo iż nie jest to jedyna droga do zdobycia wiedzy, w wielu, szczególnie większych firmach, jest to wymóg. Spowodowane jest to między innymi tym, że w przypadku pracy nad backendem wymagana jest często bardzo szeroka wiedza z zakresu algorytmów, struktur danych itp. oraz abstrakcyjne podejście do rozwiązywania różnorodnych problemów.
Nie chcę się jednak teraz rozwodzić nad słusznością takiego podejścia, chciałem jedynie zaznaczyć, że dość często jest to wymóg. Jeżeli jednak preferujesz samodzielną naukę, też nic straconego. Na rynku nie brakuje firm, dla których formalne wykształcenie ma drugorzędne znaczenie. W tym jednak wypadku musisz wziąć sprawy w swoje ręce i dobrze się przygotować.
Poniżej znajdziesz artykuły, które pomogą Ci w tym procesie:
➡ ZOBACZ 👉:
Podsumowanie
Backend developer pełni bardzo ważną funkcję w zespole. Bardzo często jest odpowiedzialny za dostarczenie całej funkcjonalności przy współpracy z innymi członkami zespołu. Dlatego wymagania na to stanowisko są zazwyczaj bardzo wysokie. Nie jest to jednak wiedza tajemna, a wymagania są jawne i przy odrobinie samozaparcia można je spełnić. Mimo iż nie omówiliśmy wszystkich możliwych zagadnień, to te przedstawione w artykule z pewnością stanowią bardzo dobre podstawy do rozpoczęcia pracy i dalszego pogłębiania wiedzy.
Zdecydowanie nie jest to najłatwiejszy zawód, jednak praca na tym stanowisku daje bardzo dużo możliwości i satysfakcji. Jeżeli masz tylko jakieś pytania, zapraszam do kontaktu w komentarzach poniżej. Z przyjemnością na nie odpowiem.
Pozdrawiam,
Tomek (backend developer).
—
Obrazki w treści umieszczone dzięki uprzejmości: 9gag, Bluecoders, comic.browserling, me.me.
20+ BONUSOWYCH materiałów z programowania
e-book – „8 rzeczy, które musisz wiedzieć, żeby dostać pracę jako programista”,
e-book – „Java Cheat Sheet”,
checklista – „Pytania rekrutacyjne”
i wiele, wiele wiecej!
7 Comments
Ogromnie dziękuję za jasne nakreślenie czym jest i z czym wiąże się backend.
Dzięki. Polecam się 🙂
Bardzo fajny opis również dziękuję
> C#: to ulepszona, zorientowana obiektowo wersja języka C. Została opracowana przez Microsoft specjalnie na potrzeby .NET Framework. Najpopularniejsze portale wykorzystujące tę technologię to oczywiście microsoft.com oraz msn.com.
A JavaScript to skryptowa wersja Javy. C i C# mają ze sobą tyle samo wspólnego. No rany! Samo podobieństwo składni (tu i tu są klamerki) nie świadczy o tym, że ktokolwiek „ulepszał” C – C# był bardziej podobny do Javy niż do C, kiedy powstawał (aczkolwiek rozwinęły się nieco w inne strony).
BTW, jest jeszcze jeden bardzo popularny portal, który zna każdy programista, a oparty na .NET: stackoverflow.com.
To prawda, że C# jest bardzo podobny do Javy (szczególnie pierwotne wersje), nie znaczy to jednak, że nie czerpano z C.
Także nie zgadzam się z porównaniem do Javy i JavaScript.
Odnośnie stackoverflow, cenna uwaga!
Super opis i wizualizacje bardzo zabawne 🙂 Ja kończyłam studia podyplomowe na WSKZ własnie z zakresu back end developer i aktualnie pracuję w zawodzie. Studia przekazały ogromną dawkę wiedzy, uważam że bardzo dobrze przygotowały mnie do zajmowanego stanowiska. A praca sama w sobie bardzo mi się podoba, nie żałuję przekwalifikowania się 🙂
Dziękuję! 🙂