Czym jest frontend
Granica między frontendem a backendem
CSS i HTML to nie programowanie
JavaScript jako język programowania
JavaScript na stronach to głównie animacje
Prawdziwa logika rozgrywa się na backend
Wygoda aplikacji i UX
Na frontend widać efekty
Wymagania frontendowca
Frontendowcy muszą być na bieżąco z technologią
Aplikacje mobilne
Podsumowanie
Spis treści
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, bo mobilki, to zupełnie inna bajka ;)
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 na backend 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. Ale przecież frontendowiec to nie tylko CSS i HTML!
JavaScript jako język programowania
Tu powieje kontrowersją. Nie no żartuję ;). 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. Raczej 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. No i powoli nierozłączną częścią JSa staje się TypeScript, a ten już wynosi programowanie na zupełnie wyższy poziom.
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. Zdecydowanie nie! 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, pobieranie danych z różnych źródeł, nie rzadko geolokalizację, działanie offline i wiele, 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. A więc jest to kolejny mit, który możemy włożyć między bajki! :)
Prawdziwa logika rozgrywa się na backend
Skupmy się na aplikacjach webowych, bo to jest główna moja domena w której znam i korzystam z JavaScript. Na frontend jest mnóstwo innych problemów, z którymi na backend nie musimy się borykać. 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.
Ale nie oszukujmy się, 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, prawdopodobnie w części backendowej rozgrywana jest bardziej zaawansowana logika biznesowa, ale jeśli nie są to bardzo zaawansowane systemy to ta logika również nie jest jakimś rocket science.
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. Do każdego frameworka są również mniej lub bardziej popularne biblioteki. 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 po prostu programiści! Dzięki temu, że teraz praktycznie każdy potrzebuje strony internetowej, to 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 :)