Czym jest framework i po co go używać

Czym jest framework i po co go używać

Jeśli dopiero zaczynasz swoją walkę z JavaScriptem, to przeskok pomiędzy “nie wiem o co chodzi” a “używam Angulara” może się odbyć nie do końca świadomie. Mając za sobą kilka tygodni stażu trudno wywnioskować, że dany framework jest właśnie tym czego potrzebujesz. Internet huczy, nie chcesz zostać w tyle więc po prostu próbujesz – konsekwencje przyjdą później.

[Śledź mój kanał na YouTube – klik]

Właśnie dlatego w tym poście postanowiłem wrócić do etapu który często nieświadomie przeskakujemy – etapu w którym stwierdzamy, że pisanie aplikacji bez użycia frameworka zaczyna być dla nas zbyt kosztowne i mało przyjemne.

Czym więc właściwie jest to magiczne słowo na “f” i dlaczego opieramy na nim nasze projekty? Zapraszam!

Na ratunek Wikipedia

Definicja słowa framework (w kontekście programowania) wg Wikipedii brzmi tak:

Framework albo platforma programistyczna – szkielet do budowy aplikacji. Definiuje on strukturę aplikacji oraz ogólny mechanizm jej działania, a także dostarcza zestaw komponentów i bibliotek ogólnego przeznaczenia do wykonywania określonych zadań.

Ok, czyli framework to szkielet. To wszystko?

Jeśli masz za sobą kilka miesięcy pracy w programowaniu to może ci się wydawać, że nie ma sensu tłumaczyć takich oczywistych spraw. Mogę sobie jednak wyobrazić, że początkujący będą mieć spore trudności ze zrozumieniem tego czym właściwie jest ten szkielet.

Kto wie, czy framework to inny program, fragment kodu, a może dodatkowe pliki? Co to znaczy, że framework coś dostarcza – czy to osoba? Bardziej doświadczony programista albo usługa która dla nas coś realizuje? Czy framework to tylko i wyłącznie linijki kodu? Czy nie mogę wszystkiego napisać samemu?

Uprzedzę cię – zrozumienie tej definicji… to wciąż za mało.

Nie zostaniesz programistą, lekarzem ani hydraulikiem czytając definicje w encyklopedii. W programowaniu jest tak, że bez zrozumienia problemu nie ma sensu szukać rozwiązania. Co z tego, że wpiszesz w wyszukiwarce “najpopularniejsze frameworki JavaScript” i zaczniesz używać któregoś z nich, jeśli jedyne co uzyskasz to dłuższy czas spędzony na pisaniu aplikacji?

Aby zrozumieć czym właściwie są frameworki oraz po co ich używać musimy koniecznie przejść do praktyki.

Życie bez frameworków

Punktem odniesienia będzie dla nas aplikacja którą stworzyliśmy w jednym z poprzednich postów. Na początku zachęcam Cię więc do zapoznania się, albo przypomnienia sobie z czym walczyliśmy w trakcie tworzenia aplikacji w języku JavaScript bez wykorzystania jakiegokolwiek frameworka.

Wydawałoby się, że jedyne co musimy stworzyć to aplikacja spełniająca wymagania biznesowe (zarządzanie listą zadań):

1

Jeśli czytałeś tamtego posta, to doskonale pamiętasz problemy które musieliśmy rozwiązać:

  • Nie istniał żaden początkowy “wzór” na podstawie którego moglibyśmy zbudować naszą aplikację
  • Pisaliśmy nie tylko kod związany z tzw. logiką biznesową naszej aplikacji  ale i kod związany ze wszystkim co dotyczy naszej aplikacji
  • Nie mogliśmy się oprzeć na żadnym istniejącym mechanizmie (np. do odświeżania listy zadań na ekranie)

Nasza “prosta aplikacja” szybko przerodziła się w małego potworka. Pojawiło się mnóstwo kwestii pobocznych, których jednak nie mogliśmy w żaden sposób pominąć:

2

Chcieliśmy przecież napisać aplikację do listy zadań, a nie zajmować się klikaniem w przycisk, dodawaniem listenerów czy odświeżaniem poszczególnych elementów w drzewie DOM. Cała funkcjonalność powinna nam zająć kilkadziesiąt minut, a jednak w projekcie na kilka plików mieliśmy kilka znaczących problemów. A gdzie tutaj miejsce na takie kwestie jak chociażby bezpieczeństwo czy optymalizacja?

Jeśli mała aplikacja pisana w ten sposób niesie za sobą pierwsze małe problemy, to co z projektami na kilka tysięcy plików tworzonymi w kilkuosobowych zespołach? Sprawa wygląda zdecydowanie gorzej:

  • Utrzymanie rozwiązania bez określonych zasad tworzenia nowych elementów byłoby koszmarem – wyobraź sobie, że każdy członek projektu tworzy nowe komponenty na swój własny sposób – prędzej czy później powstałby niemożliwy do rozwijania burdel bałagan
  • Nie moglibyśmy się posłużyć wiedzą zespołów z innej firmy, kraju czy kontynentu – bylibyśmy przywiązani do naszego autorskiego rozwiązania w którym każdy problem trzeba byłoby rozwiązać samemu – nikt inny nie znałby przecież naszej technologii
  • Zamiast skupienia na tworzeniu wartości biznesowej naszej aplikacji pisalibyśmy mnóstwo kodu “pośredniego” – potrzebnego we właściwych częściach projektu (wyobraź sobie twoją motywację po kolejnej z rzędu odpowiedzi na “czemu nie widać niczego nowego w naszej aplikacji?”)
  • Wiele problemów związanych z bezpieczeństwem aplikacji mogłoby nam umknąć bez spojrzenia kogoś “z boku”

Musisz mi uwierzyć na słowo, że taką listę można byłoby ciągnąć jeszcze bardzo, bardzo długo… Jak łatwo się domyślić, framework to jeden ze sposobów na radzenie sobie z takimi powtarzającymi się problemami jak te powyżej.

Framework, czyli szkielet

Teraz już pewnie domyślasz się co oznaczał ten wspomniany na początku szkielet aplikacji.

Framework to zebranie w jedną całość pewnych typowych, powtarzających się rozwiązań na problemy występujące w trakcie tworzenia aplikacji i dołożenie do tego kilku wzorcowych praktyk związanych z budową kolejnych funkcjonalności.

Inaczej mówiąc:

Framework = rozwiązania powtarzających się problemów + wzór na budowanie nowych funkcjonalności

Główną różnicą w porównaniu do np. bibliotek programistycznych jest ten ostatni człon, czyli wzór na budowanie i dokładanie kolejnych funkcjonalności. Framework do pewnego stopnia wymusza na nas pisanie programu w określony sposób, jednak w zamian za to daje nam całą masę gotowych do wykorzystania schematów i udogodnień.

3

W naszym schemacie możesz zauważyć, że wszelkie elementy niezwiązane bezpośrednio z logiką naszej aplikacji zostały zakryte przez blok “Framework”. Oczywiście jest to tylko pewien skrót myślowy, ale pozwoli Ci on w łatwiejszy sposób zrozumieć odpowiedzialność narzędzi tego typu.

Technologia i język to kwestie drugorzędne

Dla tych, którzy zasugerowali się początkiem o JavaScripcie warto dodać, że framework to coś na co natkniemy się w rozmaitych obszarach programowania. Technologia i język odgrywają tutaj naprawdę drugorzędne role.

Tak jak na front-endzie chcielibyśmy się skupić na pisaniu logiki aplikacji zamiast na dłubaniu przy interakcjach z DOMem, tak np. na back-endzie zależeć nam będzie na frameworku wspierającym wzorzec MVC, zapewniającym security na odpowiednim poziomie oraz dostarczającym obsługę HTTP.  Podobnie sprawa wygląda z językami programowania – niemal w każdym z nich znajdziemy kilka frameworków stworzonych do konkretnych celów, które szybko pozwolą nam się skupić na pisaniu aplikacji i dostarczaniu wartości biznesowej naszego dzieła, zarzucając z nas obowiązek rozwiązywania w kółko tych samych problemów.

Zalet płynących z wykorzystania frameworków w naszej aplikacji jest naprawdę mnóstwo, jednak nie traktuj narzędzi tego typu jak młotka którym można rozwiązać każdy problem. Te wielokrotnie docenione i sprawdzone w boju rozwiązania w większości przypadków bardzo ułatwiają nasze programistyczne życie, jednak i tutaj trzeba zachować zdrowy rozsądek.

Żadnych przykładów?

No tak… żadnych. Przykłady z łatwością znajdziesz w dowolnej wyszukiwarce wpisując frazę “framework [język programowania]” albo “framework [technologia]”. Wymienienie Angulara, Django czy czegokolwiek innego bez wchodzenia w szczegóły nie miałoby większego sensu.

Zamiast skupiania się na konkretnych nazwach i numerach wersji chciałbym żebyś zapamiętał poniższe punkty:

  • frameworki to “industry standard” – dzięki opieraniu się na tych najbardziej znanych projekt który tworzysz będzie możliwy do zrozumienia niezależnie od szerokości i długości geograficznej
  • framework to narzędzie dzięki któremu oszczędzisz czas przeznaczony na rozwiązywanie problemów niezwiązanych bezpośrednio z twoją aplikacją
  • używając frameworka masz niemal gwarancję ciągłego wsparcia i aktualizowania krytycznych sekcji twojej aplikacji
  • wykorzystując popularne frameworki kwestie takie jak security czy performance “przygotowują dla ciebie” najlepsi na rynku programiści

Mam nadzieję, że po przeczytaniu tego posta będziesz mógł powiedzieć czym są frameworki, dlaczego setki tysięcy programistów używają ich w codziennej pracy oraz co dobrego wnoszą one do naszego życia. Tematyka którą tutaj poruszyłem jest naprawdę ogromna, jednak mam nadzieję, że będziesz od teraz rozumiał cały ten hype na Angulary, Railsy i inne wynalazki od programistów dla programistów.

Teraz czas na praktykę – do następnego razu!

Powiązane

10 powodów przez które język JavaScript jest tak p... Zastanawiasz się o co chodzi z całym tym hałasem dotyczącym języka JavaScript? Czemu powstają o nim dziesiątki memów i żartów? Dlaczego ludzi poświęca...
Jak rozpocząć naukę programowania bez szkoły i nud... Rozpocznij naukę programowania od innej strony Internet sprawił, że każdy jest w stanie samodzielnie w własnym zaciszu domowym uczyć się i szkolić w ...
Ten niedobry JavaScript – odc. 2543 Opinii na temat wad JavaScriptu i rzekomej trudności utrzymania kodu opartego o ten język naczytałem się już tyle, że każdy kolejny post komentują...
Pasja kontra Profesjonalizm Jak wyobrażasz sobie programistę który odnosi sukcesy? Czy to pasjonat który lubi to co robi, czy profesjonalista skupiony na wyniku swojej pracy? A...