A więc nazywasz siebie web-developerem, programistą, webmasterem a może nawet inżynierem? Zapytam więc Ciebie - jak działa web browser? Co dzieje się przy wpisaniu w przeglądarkę wp.pl i wciśnięciu entera. Proste pytanie, skomplikowane odpowiedzi.

Zazwyczaj programiści odpowiadają na dwa odrębne sposoby:

  1. Pierwszy typ programisty “To proste. Przeglądarka sprawdza DNS, łączy się z serwerem i wyświetla stronę w formacie HTML”
  2. Drugi typ programisty “To dość skomplikowane. HTML czy XHTML? Nawiązanie samego połączenia sieciowego to sporo pracy pod maską, nie mówiąc o headerach. O jakim żądaniu mówimy GET, PUT, czy POST? Czy mam wyjaśnić też cache?. Do tego wchodzi jeszcze parser… jaka przeglądarka? Czy strona była wcześniej odwiedzona? Czy mam też omówić jak Javascript działa? Layout engine? Multiprocesowość? Czy w grę wchodzi Websockets ?

Często spotykam się z argumentem, że po to technologia została stworzona, abyśmy nie musieli zastanawiać się jak działa stack pod spodem. Po 11 latach zabawy z kodem uważam jednak, że:

Kariera każdego dobrego programisty przypomina proces obierania cebuli

Pokrótce opiszę dlaczego.

Wszyscy zaczynamy podobnie. Zaczyna się od fascynacji programowaniem, obiektowością, bazami danych, grafiką. Wszystko wydaje się takie przemyślane i spójne - myślisz sobie, “ten świat naprawdę jest zbudowany na ramionach olbrzymów”. Następnie fascynacja ładnie opisanymi i zrozumiałymi design patternami. Chcąc jednak robić więcej zaczynasz poznawać detale działania frameworków i zasad ich funkcjonowania. Niepokoi Cię myśl, że pod maską frameworków ktoś ukrywa coś ciekawego, użyte biblioteki ograniczają i krępują ruchy.

Virtual Machine / Language internals

Zaczynasz dostrzegać minusy języka programowania w którym byłeś zakochany. Niekompletne lambdy w Pythonie? Threading którego nikt nie chce używać, bo jest broken by design? Widzisz czego Twój język X mógłby nauczyć się od języka Y. Jednak trwasz dalej i wykorzystujesz idiomy dla przejrzystości i kruczki implementacji żeby wycisnąć jeszcze trochę wydajności po czym …

DB

Twoja firma, twój serwis szybko zyskuje popularność i przestaje się skalować. Co robisz? Zaczynasz pozbywać się abstrakcji. “Obierasz cebulę” z pierwszej napotkanej warstwy - zapewne warstwy ORM i skupiasz się na mikrooptymalizacjach zapytań SQL. Debugujesz outputy z ORM-ów, zaczynasz tune’ować bazę (in memory) a później wręcz optymalizować JOIN-y w zmaterializowanych widokach. W dyskusjach z kolegami przestajesz śmiać się(śmiałeś sie?) z gołych zapytań. Zmieniasz ENGINE’y bazy danych i dowiadujesz się dlaczego InnoDB nie potrafi defragmentować się online. Romans z PostresSQL też masz już zaliczony, miało być pięknie, a jednak limity zapisów dały w kość

Middleware and Cache

Porzucasz mikrooptymalizacje zapytań i obierasz kolejną warstwę - tym razem bierzesz pod lupę template’y i rezygnujesz z dynamicznych zapytań dla każdego request’a . Poznajesz Varnisha, ale żeby to osiągnąć obierasz kolejną warstwę - Middleware i zgłębiasz tajniki HTTP. Czujesz wiatr w skrzydłach - wreszcie wiesz co dzieje się pod spodem. Czujesz, że przez wiele lat miałeś na oczach opaskę i nie widziałeś “całej maszynerii” pod spodem.

NoSQL

Po przestudiowaniu co tak naprawdę robi JOIN w różnych engine’ach bazy danych rozumiesz, dlaczego wybierasz Cassandrę, Redisa i flat files w niektórych przypadkach.

TCP/IP

Czujesz ukontentowanie aż do pewnego popołudnia traffic rośnie i osiągasz limity otwartych połączeń w kernelu linuksa, lub limit otwartych plików. Zdejmujesz kolejną warstwę abstrakcji i odkrywasz jak działa stos tcp/ip i interrupts coalescencing WOW.

Frontend

Przeglądarka - końcówka naszej podróży. Wydaje się prosta - ma po prostu ma wyrenderować formularz, stronę.

Czy wiesz, że przeglądarka Chrome składa się z 3 razy większej ilości linii kodu niż np Linux? (16 mln LOC, gdy jądro Linuxa zawiera tylko blisko 5 mln) To naprawdę skomplikowane bestie. Jeśli kiedyś zastanawiałeś się, dlaczego scrollowanie przeglądarki “klatkuje” tzn że jeszcze nie wiesz jak tak naprawdę działa scrolling i jak zarządzać FPS w przeglądarce. Zaciekawiony oglądasz przeglądarkę internetową w ukrytej kamerze i cieszysz się że od dziś rozumiesz już trochę więcej.

PROFIT

Najlepsi inżynierowie decydująć się na funkcje biblioteczne dokładnie wiedzą co “kupują”. Obecnie próg wejścia w pisanie aplikacji jest coraz niższy. Frameworków JavaScriptowych jest obecnie tak dużo(blisko 1500), że powstała nawet strona do ich skatalogowania pod kątem filozoficznym - liberal vs opiniated. Jeśli jako frontendowiec nadal jesteś uzależniony od JQuery to może powinieneś przeczytać to - just in case.

Dlatego moja obserwacja jest następująca: aby rozwijać się jako programista należy drążyć detale do gołej blachy, nie dać się rozleniwiać istniejącym warstwom abstrakcji. Czy TCP/IP jest idealny? Dlaczego Google pracuje zatem na QUIC? Jeśli będziesz w stanie utrzymać swoją dziecięcą ciekawość świata, a przez to zaczniesz rozumieć abstrakcje których używać - to w efekcie - usmażysz Smaczny Software