Programowanie a frontend i backend


Frontend to nie programowanie. JavaScript to nie język programowania. Jestem programistą HTML i CSS. Przekonajmy się, czy te zdania mają sens.


Czy frontend to programowanie? Tak. Koniec wpisu ;)

A tak poważnie zapraszam do lektury wszystkich. Zarówno zwolenników i przeciwników tej teorii, bo to ten temat, który potrafi podzielić nie jedną grupę ludzi.

Na wielu forach i w przeświadczeniu wielu programistów istnieje mniemanie, że frontend to nie programowanie. Czy to prawda? Czym właściwie jest frontend i czym jest programowanie? Porównajmy te dwa jak się później okaże bliskie sobie światy.

Czym jest frontend

Tu nie spotkałem się z jednoznaczną definicją. Ogólnie warstwa frontendowa polega na zebraniu danych od użytkownika i przekazaniu ich do backendu, gdzie zostaną przetworzone. Jednak jest to zbytnie uproszczenie. Frontend zajmuje się bowiem znacznie szerszym kontekstem. Programista frontendowy jest odpowiedzialny za całą prezentację, którą widzi użytkownik. Obecne frameworki pozwalają na pisanie całych aplikacji bez dostępu do bazy i w pełnej komunikacji po API. A to wymaga już umiejętności technicznych, a nie tylko upiększania w css i klepaniu HTML. Mówię tu oczywiście w kontekście tworzenia aplikacji webowych.

Granica między frontendem a backendem

Tu również nie ma ustalonej jednej konkretnej granicy. Aplikacje webowe można tworzyć na wiele różnych sposobów. Jeśli aplikacje rozdzielone są po API, a punkt styku to endpointy, to granicę można wyznaczyć bardzo łatwo. Natomiast, jeśli ktoś piszę małą aplikację na przykład w Django i korzysta z wbudowanego renderowania szablonów, to jak do tego podejść? Czy backendowiec ma tylko zwrócić dane do szablonu, a frontendowiec będzie je w całości obrabiać? Jeśli tak to czy kogoś takiego, kto jedyne co robi to buduje HTML i upiększa całość w CSS można nazwać programistą?

CSS i HTML to nie programowanie

CSS i HTML to nie jest programowanie. Nie oszukujmy się. Nie chodzi mi już o to, że nie jest to rozwiązywanie większych problemów, bo w dużej części aplikacje webowe również nie robią zaawansowanych obliczeń. Nie wiem czy mógłbym podjąć się jednej, konkretnej definicji programowania. Moim zdaniem programowanie to proces pisania kodu, w wyniku którego przetwarzana jest jakaś logika i powstaje program rozwiązujący jakiś problem. Oczywiście upraszczając to można powiedzieć, że w wyniku połączenia CSS i HTML powstaje strona internetowa, ale czy jest tam jakaś logika? Nie do końca. Czy rozwiązuje problem? Możliwe. Nie mam natomiast na myśli, ze css jest łatwy i prosty. Tam jest tyle różnych niuansów, tyle ścieżek do rozwiązania problemu, że czasem można się naprawdę napocić, żeby coś zrealizować. Idea css wydaje się prosta, jednak dobre korzystanie już takie łatwe nie jest.

JavaScript jako język programowania

Tu powieje kontrowersją. JavaScript jest językiem programowania. To musimy przyznać. Mimo wrogów i zwolenników tego języka musimy przyznać, że JavaScript jest językiem programowania. Najczęściej jest stosowany w aplikacjach webowych, ale to nie znaczy, że nie możemy go spotkać w innych miejscach. Oczywiście nie używa się go do aplikacji, które są krytyczne i wymagają szybkiego reagowania albo do miejsc w których obrabia się dużo danych ale trzeba przyznać, że jest powszechnie stosowany. Zobaczcie w czym napisany jest na przykład Slack albo Atom . JavaScript może ostatecznie być użyty do części backendowej. Cały ekosystem dookoła JavaScript jest ogromny. Nie sposób opisać tu całości. Zachęcam natomiast do zapoznania się np z node.js.

JavaScript na stronach to głównie animacje

No dobra, podałem przykłady aplikacji innych niż webowe, ale to jednak strony internetowe stanowią główny trzon projektów opartych o JavaScript. Można złośliwie wytykać, że JS używa się głównie do upiększenia strony i są to jedynie animacje. Nie do końca. Jeśli twoja znajomość tego języka ogranicza się do tego, że potrafisz podpiąć jQuery, jakiś slider czy inną bibliotekę i tyle, to faktycznie nie możesz się nazwać programistą. Ale nowoczesne aplikacje wykorzystują znacznie więcej niż tylko upiększanie. Na froncie mamy przecież storage, autoryzacje, dynamiczne ładowanie treści, wstępna walidacje formularzy i wiele innych. Ostatnio popularne staje się też programowanie PWA. To od frontendowca głównie zależy czas ładowania strony. Trzeba dbać, aby ten czas nie był za długi oraz o to, żeby nie przeciążać przeglądarki.

Prawdziwa logika rozgrywa się na backend

Skupmy się na aplikacjach webowych, bo to jest główna domena JavaScript i Frontendowców. Na frontend jest mnóstwo innych problemów. Kod backendowy odpalany jest na środowisku, które jest w miarę przewidywalne. Czy możemy to powiedzieć o części frontendowej? Zdecydowanie nie. Każda przeglądarka działa inaczej. Nie mówię już o wsparciu pod IE, które jest wiecznym problemem. Całe szczęście przeglądarki starają się coraz bardziej trzymać standardów, ale dalej można spotkać różnice i często naprawa problemu kompatybilności  jest trudniejsza niż sama implementacja rozwiązania. Jeśli jesteś programistą webowym i pracujesz w backend to przypomnij sobie ile razy rozwiązywałeś zaawansowaną logikę? Prawdopodobnie junior pracujący ze sztuczną inteligencją spotkał się z trudniejszymi algorytmami niż my backendowcy. Ale czy czyni nas to gorszymi? W żadnym stopniu. Rozwiązujemy inne rodzaje problemów.  Podobnie z frontendowcami. Ich zadaniem jest dostarczenie wygodnej aplikacji dla użytkownika, która jest jednocześnie szybka i bezpieczna. A zachowanie tych trzech warunków często bywa skomplikowane. Oczywiście w części backendowej rozgrywana jest bardziej zaawansowana logika, ale jeśli nie są to bardzo zaawansowane systemy to ta logika również jest stosunkowo prosta.

Wygoda aplikacji i UX

Skoro poruszyłem już temat UX i wygody aplikacji. Dobrze zaprojektowana strona może być konkretnie zepsuta przez frontendowca. Działa to też w drugą stronę. Średnio zaprojektowana strona, może być przez dobrego frontendowca napisana tak, że w rzeczywistości jest znacznie lepsza niż sama makieta. Bo to właśnie od frontendowca zależy końcowy efekt aplikacji. Jest to jednocześnie błogosławieństwo i przekleństwo tej gałęzi.

Na frontend widać efekty

Aplikacja pisania w backend dla użytkownika końcowego rzadko jest użyteczna. Jest to pewne uogólnienie, ale ponownie odnoszę się do branży stron internetowych. Czy nam się to podoba czy nie, nawet najlepiej napisany backend się po prostu nie przyjmie, jeśli front będzie słaby. Dlatego frontendowiec stoi przed dużą odpowiedzialnością, bo poza tym, że musi dobrze zaimplementować to co designer zaprojektował, to jeszcze musi napisać to tak, żeby wykorzystać najlepsze cechy backendowej części. Oczywiście jeśli backend będzie zbyt długo odpowiadać, nie bedzie poprawnie walidować danych, będzie zwracać niepełne dane albo po prostu będzie miał braki, to nawet najlepszy frontendowiec nic nie wyczaruje. Oczywiście przysypie to brokatem i część użytkowników się nie zorientuje.  Najgorsze jest jednak to, że postępów pracy backendowca nie widać na pierwszy rzut oka tak jak naszych kolegów z części frontendowej.

Wymagania frontendowca

Żeby zobaczyć, że frontend to nie jest tylko zabawa dla dzieci wystarczy spojrzeć na oferty pracy i wymagania.
Testy jednostkowe, znajomość wzorców projektowych, npm i przynajmniej jeden z większych frameworkow (Vue, React, Angular) to obecnie standard. A skoro takie umiejętności są wymagane to znaczy, że jest coś na rzeczy. Oczywiście pomijam tu fakt wrzucania wymagań w ogłoszenia, które nie mają żadnego przełożenia w pracy, ale jeśli jakieś wymagania powtarzają się tak często, to nie jest to przypadek.

Frontendowcy muszą być na bieżąco z technologią

Programiści frontendowi poza wspomnianymi wcześniej problemami muszą stawić czoła też innym wyzwaniom. Mam nadzieję, że przekonałem już Was, że są programistami i powinni posiadać pewien zasób umiejętności technicznych. Jednak to nie wszystko. Muszą oni bowiem nadążać nad zmieniającymi się trendami. Muszą stale monitorować nowinki, a te przychodzą tam bardzo szybko. Pisałem już w innym wpisie jak bardzo zmieniło się podwórko JS na przestrzeni 10 lat . Kiedyś wystarczył czysty javascript, teraz do dyspozycji jest wiele frameworków i narzędzi, a to właśnie programista musi wybrać odpowiednie. Z drugiej strony trzeba się pilnować, żeby nie popaść w skrajność i korzystać z nowych technologii tylko dlatego, że jest to modne. Nie wszystkie nowinki są sprawdzone i nie wszystkie z nich powinno się od razu implementować.

Aplikacje mobilne

Przejdźmy też na inne podwórko, mianowicie na podwórko programistów mobilnych. Czy aplikacje mobilne są stykiem z użytkownikiem końcowym? Tak. Czy aplikacje mobilne zbierają dane od użytkownika i przekazują je do backendu? Często. Zdarzają się aplikacje mobilne bez backendu i takie z backendem, ale to osobny temat. Czy zatem możemy nazwać programistów mobilnych frontendowcami? Moim zdaniem tak. Zapytajmy o to samo, ale z drugiej strony, czyli czy wśród frontendowców można wyróżnić programistów mobilnych? Owszem. W tych dwóch pytaniach mamy już potwierdzenie, że frontend to jest programowanie. Nie wnikam już w problemy aplikacji mobilnych. Zdarza się, że muszą stworzyc aplikację mobilną do istniejącego już backendu, a ten backend może być zaprojektowany głównie pod aplikację webową, przez co Ci muszą zawrzeć u siebie bardzo dużo logiki, która bywa skomplikowana.

Podsumowanie

Frontend i programiści frontendowi to spora część programistów. Dzięki temu, że teraz praktycznie każdy potrzebuje strony internetowe,j ta gałąź rozwija się bardzo dynamicznie. Kilkanaście lat temu faktycznie praca takich frontendowców była bardzo prosta. Teraz natomiast stoją przed problemami, które my backendowcy mamy czasem trudno sobie wyobrazić. Aplikacje frontendowe to nie są już proste strony z animacjami, chociaz te również są ważne. Współczesne systemy mają na frontend bardzo dużo logiki i komunikacja z backendem jest tylko kroplą w morzu zadań jakie muszą zrealizować. To wszystko, plus dbałość o wygodę użytkowania sprawiają, że dobry frontendowiec musi wykazywać się ogromną cierpliwością, kreatywnością, wiedzą techniczną oraz elastycznością. Podsumowując całość mogę jasno powiedzieć, że frontend to jest programowanie, a frontendowcy to są programiści.

Jakie jest wasze zdanie na ten temat? Jestem bardzo ciekaw waszego podejścia do tematu oraz tego, po której stronie barykady stoicie :)

Wrz 09, 2019

Najnowsze wpisy

Zobacz wszystkie