Główny język programowania, inne technologie

Jedną z najważniejszych decyzji, która stanie przed tobą, jest wybór języka/technologii, którą masz zamiar opanować. Oczywiście, decyzja ta nie jest ostateczna. Jeśli po kilku miesiącach/latach stwierdzisz, że pora zająć się czymś innym, najpewniej będziesz w stanie to zrobić. Jednak początkowy wybór jest ważny, ponieważ wejście w nieodpowiednią technologię może nam utrudnić zdobycie pracy, lub całkiem zniechęcić do nauki programowania.

Efektem podjęcia tej decyzji będzie nie tylko używanie danego języka/frameworka, ale często również zamknięcie się w bańce ekosystemu tego języka. Zatem należy zwrócić uwagę nie tylko na sam język, ale na ilość, dostępność i jakość dodatkowych modułów, bibliotek, narzędzi, programów dostępnych dla danej platformy, dajmy na to Javy.

Możemy programować po stronie serwera, klienta lub pośrodku (po obu stronach). Programować/kodować po stronie klienta oznacza pisać kod wykonywany przez przeglądarkę internetową użytkownika strony. Takiego programistę nazywa się 'front end developerem'. Z kolei 'backend developer' skupia się na programowaniu po stronie serwera strony. W dużym uproszczeniu oprogramowuje większość logiki działania danej strony, łącznie z obsługą serwera, interakcjami z bazą danych, komunikacją z aplikacjami działającymi na serwerze i zewnętrznymi serwisami. Istnieje również trzecia grupa programistów webowych, łącząca umiejętności z dwóch wcześniej wymienionych dziedzin: jest to 'full stack developer'. Prawdopodobnie nie osiągnie on tak szczegółowej znajomości technologii jak front- czy backend developerzy, z racji podwojenia ilości rzeczy do nauczenia się, ale jako jedyny będzie w stanie samemu stworzyć stronę od zera. To twierdzenie nieco upraszcza rzeczywistość, bo dana osoba może posiadać przykładowo wiedzę z front-endu pozwalającą na stworzenie aplikacji, ale chce pracować i doskonalić się w backendzie.

Którą stronę wybrać? Prawdopodobnie najlepszym wyborem będzie rozpoczęcie nauki od poznania podstaw zarówno frontendu jak i backendu. Nawet jeśli mamy w głowie konkretny kierunek rozwoju (backend lub frontend), podstawy z obydwu dziedzin przydadzą nam się podczas pisania własnego projektu. Możemy wykonać aplikację wyłącznie 'przeglądarkową' (np. strona-wizytówka, która nie zapisuje niczego w bazie danych), lub wyłącznie serwerową (np. API), ale znajomość całego stosu (ang. 'stack', stąd 'full stack' to cały stos) aplikacji pozwoli frontendowcowi lepiej zrozumieć działanie backendu, i na odwrót. Dzięki temu programista będzie miał w głowie obraz działania strony jako całości, a nie jedynie jej pojedynczej składowej. Dodatkowo, posiadanie nawet niewielkiego doświadczenia frontendowego może być atutem przy rekrutacji na stanowisko backendowe, i vice versa.

Następną kwestią jest wybór konkretnych technologii, jakimi będziemy się zajmowali.

Technologie front-endowe:

Obowiązkowa jest klasyczna trójca: HTML5, CSS3, JavaScript (co najmniej w wersji ES5, docelowo również ES2015). W dużym skrócie HTML pozwala na opis semantyczny elementów. Innymi słowy definiuje elementy strony, takie jak: przyciski, listy, pola do wprowadzania tekstu, odnośniki; dodatkowo atrybuty elementów, kodowanie i tytuł strony itp. CSS3 odpowiada za wystylizowaniu elementów (kolor, marginesy, rozmiar itd.), a także czasem animacje. JavaScript jest używany do oskryptowania strony (dodawanie/usuwanie znaczników HTML, ustawianie ciasteczek itp.). Dodatkowo, za podstawową technologię można uznać bibliotekę języka JavaScript o nazwie JQuery, zatem jej również trzeba się nauczyć. Dzięki JQuery możemy pisać kod bardziej zwięzły niż w czystym (vanilla) JS, tworzyć efekty animacji, wygodnie manipulować elementami strony. Nie bez znaczenia jest również fakt, iż istnieje bardzo dużo innych bibliotek opartych właśnie na JQuery.

Wielu pracodawców wymaga lub preferuje również znajomość bibliotek takich jak Backbone.js, React lub frameworka AngularJS. Powinniśmy poznać podstawy najlepiej każdej z tych technologii oraz przynajmniej jedną z nich bardziej dogłębnie, zwłaszcza jeśli chcemy zostać frontendowcem. Backbone.js jest najstarszą biblioteką z tej trójki, umożliwia ustrukturyzowanie kodu JS. Jest wciąż wykorzystywany, ale jest najmniej popularny. AngularJS, stworzony przez firmę Google AngularJS jest najbardziej rozbudowany, najpopularniejszy i jednocześnie najtrudniejszy w nauce. Istnieje bardzo dużo bibliotek, pluginów napisanych specjalnie pod Angulara. Używając Angulara (lub niektórych innych frameworków) możemy stworzyć tzw. SPA (Single-page application), czyli stronę-aplikację, która będzie ładowała większość danych za pierwszym razem, a później w razie potrzeby będzie ona pobierała dodatkowe zasoby dynamicznie. Nie mniej jednak wiele osób wymienia jego wady, takie jak bardzo duże zmiany między wersjami 1.x a 2.x, skomplikowany model przepływu danych, duży rozmiar itp. Najmłodszą biblioteką jest Facebookowy React, który w odróżnieniu od pozostałej dwójki implementuje wyłącznie widok z modelu MVC (Model-View-Controller, Model-Widok-Kontroler). Jest stosunkowo prosty w nauce, i pozwala na łatwe tworzenie interfejsów dzięki prostemu jednokierunkowemu modelowi przepływu danych, możliwość podziału elementów strony na komponenty, elegancki sposób dodawania logiki dla elementów itp. React wciąż jest na etapie kształtowania się, ale mimo to zyskał bardzo dużą popularność.

Powyższa lista nie wyczerpuje tematu. Innymi popularnymi frameworkami JS są chociażby Ember.js czy Vue.js.

W ciągu ostatnich lat ekosystem JavaScript rozrósł się do olbrzymich rozmiarów. Niegdyś popularne biblioteki i narzędzia dziś są już przestarzałe, a inne zyskały popularność. Spośród tych drugich na szczególną uwagę zasługują: Redux (do zarządzania stanem w aplikacji, np. w połączeniu z Reactem), TypeScript i Flow (możliwość definiowania typów zmiennych w kodzie JS), ESLint (linter JS), Yarn (manager paczek, szybszy od standardowego managera npm), webpack (system rozwiązywania zależności), BabelJS (umożliwia korzystanie ze składni najnowszych standardów JS również na starszych przeglądarkach), Lodash (de facto bibliotek standardowa JS, zawierająca wiele przydatnych funkcji do pracy z tablicami, obiektami, liczbami itp.). Nie mniej jednak nawet w niedalekiej przyszłości ekosystem JavaScriptu może ulec zmianom, dlatego warto z jednej strony śledzić bieżące trendy, a z drugiej nie ulegać tymczasowej modzie.

Dodatkowym atutem, a w ofertach niektórych firm wymogiem, będzie znajomość preprocesorów JavaScriptu (CoffeScript), CSS (SCSS, Sass), czy HTML (Pug, Haml). Preprocesory te umożliwiają pisanie bardziej zwięzłego, mniej podatnego na błędy kodu. Kod języków tych preprocesorów może znacznie różnić się od docelowej formy (np. Slim w porównaniu do HTML). Przeglądarki internetowe nie są w stanie tych języków zinterpretować, dlatego konwersja do docelowego języka odbywa się podczas deploymentu, albo przeprowadzana jest ona 'w locie', przez serwer aplikacji.

Istnieje również bardzo dużo frameworków HTML/CSS, które zawierają zestaw gotowych komponentów, kolorów, stylów, interakcji, layoutów itp. Najpopularniejszymi są m.in. Bootstrap, Foundation czy implementujący Material Design framework Materialize.

Technologie backendowe

W praktyce dany język wykorzystuje się razem z frameworkiem, dlatego poniższa lista podaje ich przykłady:

Który język i jaki framework wybrać? Możemy podjąć decyzję biorąc pod uwagę kilka kryteriów: a) popularność. Im więcej osób korzysta z danej technologii, tym łatwiej znaleźć materiały, książki, pomoc na forach itp. Nie mniej istotna jest ilość ofert pracy. Z wymienionych wyżej języków najmniej popularnymi są Go i Elixir, a najpopularniejszymi są Java i PHP. b) składnia, łatwość tworzenia - każdy z języków posiada własną składnię, która może pewnym osobom nie odpowiadać. Przykładowo w Pythonie poziom wcięcia kodu określa bloki kodu, a niektórzy zapewne woleliby używać do tego celu klamerek: '{ blok_kodu }' jak w Javie, JS czy PHP lub słów kluczowych, np. 'do blok_kodu end' w Ruby. Warto samemu zapoznać się z fragmentami kodu różnych języków, a najlepiej samemu napisać krótkie programy, żeby przekonać się, czy składnia nam odpowiada.

Myślę, że warto zwrócić uwagę zwłaszcza na Javę, Pythona (Django) i Ruby (Ruby on Rails).

Wśród technologii, których znajomość (użycie w projekcie) może być dobrze widziana są m.in.:

  • Redis: prosta baza klucz-wartość, a także jako cache aplikacji
  • Elasticrsearch; Solr - silniki wyszukiwania (np. wyrażeń tekstowych) w bazie danych
  • RabbitMQ; ActiveMQ; Kafka - message brokery (systemy pozwalające na przesyłanie komunikatów między częściami aplikacji)

results matching ""

    No results matching ""