React w działaniu – moja recenzja książki

Jako iż biblioteka react.js jest obecnie jedną z najpopularniejszych w świecie front-endu, oczywistym było, że na jej temat będą pojawiać się coraz ciekawsze pozycje w literaturze. Ale czy „React w działaniu” ma się czym wyróżnić?

Zazwyczaj jestem sceptyczny jeżeli chodzi o książki dotyczące konkretnej biblioteki front-end’owej, dlatego że bardzo szybko stają się one nieaktualne. Pojawiają się nowe wersje ulubionego frameworka, zmienia się API, może nawet zmienia się cała składnia języka na którym dany framework bazuje, a książce trudno za tym wszystkim nadążyć. Postanowiłem jednak dać tej pozycji szansę ze względu na autora. Autorem React w działaniu. Tworzenie aplikacji internetowych jest Stoyan Stefanov. Jeżeli nie czytałeś/aś książki „JavaScript. Wzorce” bądź „JavaScript. Programowanie obiektowe”, a interesujesz się tym językiem – absolutnie namawiam Cię do nadrobienia zaległości. To fantastyczne pozycje i stanowią ułamek procenta z mojej biblioteczki do których ciągle wracam, bo wiedza w nich zawarta jest na prawdę spora. Funkcje nadpisujące się, kilka sposobów dziedziczeń – to tylko ułamek ciekawych rzeczy, które opisał w nich Stoyan, a potrafią nieźle „zryć beret” jeżeli nie zna się tych zagadnień. Więc jak zobaczyłem kolejną książkę Pana Stefanova i to jeszcze o Reakcie, którego tak lubię, bez wahania ją zakupiłem. Niestety… tym razem się zawiodłem.



Ale zacznijmy od początku. Książka podzielona jest na 8 rozdziałów i nie powinna nikogo wystraszyć ilością stron, bo tych jest 240. Mnie udało się ją skończyć w jeden weekend. Ale czy czytało mi się ją dobrze? Przede wszystkim wydaje mi się, że książka jest bardzo nierówna, a momentami wręcz piekielnie nudna. Do tego za chwilę wrócę, ale jeszcze o kwestiach technicznych. Opisywana przez autora wersja biblioteki React.js to 0.14.7. Nie jest to może dinozaur, ale jeżeli teraz odpali się przykłady z książki z najnowszą wersją biblioteki to w konsoli na pewno będzie roiło się od ostrzeżeń dotyczących używania przestarzałego kodu. Kolejnym przykładem tego, że opisywana wersja lekko zalatuje, jest wzmianka o tym, że łańcuchy tekstu w HTMLu są opakowywane przez Reacta w dodatkowe elementy <span>. Tak było, ale od wersji 15 tak już nie jest. Więc jeżeli ktoś nie śledzi zmian może się nieźle zdziwić, tym bardziej, że React rozwija się dość dynamicznie. Bardzo więc prawdopodobne, że za pół roku, może nieco później, kolejne elementy frameworka opisane w tej książce przestaną istnieć na rzecz innych. Pytanie tylko czy zaliczać to do minusów tej książki? Odpuśćmy, w końcu na podobny problem cierpi większość książek opisujących popularne biblioteki.

Nie wspomniałem, że mój egzemplarz kupiłem w rodzimym helionie, tak więc miałem do czynienia z polskim tłumaczeniem. A tym zajęła się Pani Joanna Zatorska. Nie dostrzegłem jakichś większych problemów, tłumaczenie jest do bólu poprawne i przyznam szczerze, że wychodzi czasami nieco „sztywno”. Są jednak pewne zwroty, które w mojej opinii nie powinny być tłumaczone (pomimo iż bardzo kocham nasz język ojczysty), a przykładem może być tutaj słówko mixin przetłumaczone jako domieszka. Widziałem to sformułowanie już wcześniej więc nie zaznałem szoku, ale mimo wszystko takie „wzorowe” tłumaczenie od deski do deski powoduje, że książka traci nieco profesjonalizmu. Drugie już mniej bolesne słówko to niezmienność używane nagminnie w kontekście biblioteki immutability.js. Zdecydowanie lepszym określeniem byłoby niemutowalne.

Kończąc szczegóły dotyczące struktury przejdźmy do zalet. Niewątpliwie sam początek, który pochłonąłem z pasją podobną do wcześniejszych książek autora. Bardzo dobrze wytłumaczona składnia React.DOM i myślę, że nawet lepiej niż w oficjalnej dokumentacji Reacta. Oczywiście większość i tak będzie używała JSX’a do tworzenia widoków, nie mniej jednak warto wiedzieć co siedzi pod spodem i tutaj trzeba przyznać, że jest to opisane bardzo przystępnie. Ktoś mógłby powiedzieć, że to wada tej książki, że sporo treści jest porzedstawianych za pomocą czysto JS’owej notacji. I rzeczywiście czuć w trakcie lektury, że traci na tym JSX, nie mniej jednak jest on zdecydowanie prostszy i łatwiej go przyswoić niż składnię złożoną z obiektów. Sympatyczne jest w tej książce również to, że przedstawiane są dobre wzorce pisania, oraz antywzorce, których nie należy używać. Przez większość książki opisywany jest React, ale znalazł się także rozdział poświęcony narzędziom ESLint, Flow, Immutability.js czy opis przykładowej architektury Flux. Po skończeniu książki czytelnik ma szersze pojęcie o tym jak zabrać się do projektowania swojej aplikacji w Reakcie i jakimi narzędziami się wspomóc. Kolejną zaletą jest przedstawienie zarówno składni ES5 przy tworzeniu komponentów, jak i również ES6 czy nawet elementów z ES7. Brakuje co prawda wnikliwej analizy różnic w składni (choćby w przypadku używania mixinów), ale jak na tyle stron jest to całkiem nieźle skompresowana dawka wiedzy ogólnej o reakcie.

Im dalej w las tym ciemniej i ewidentnie książka zwalnia tempo, które fajnie zaprezentowała w pierwszym rozdziale. Tworzenie komponentów opisane bez fajerwerków, funkcje bezstanowe wymienione kilka razy bez wykazu ich zalet, implementacja Flux’a taka trochę nieżyciowa… Na prawdę wahałem się w połowie czy nie darować sobie tych kilkudziesięciu stron. Pal licho braku opisywania takich rzeczy jak Higher-Order Components czy innych wzorców o których autor nawet nie wspomina, ale już sam cykl życia komponentu jest przedstawiony bardzo mizernie. Ma się wrażenie, że nadal nie wiadomo w którym miejscu powinno się wykonywać odwołania asynchroniczne etc. A przecież autor sam umieścił tyle instrukcji console.log() aby to ułatwić.
Jednak to co najgorsze w tej książce to przykłady. Listingi kodu ciągnące się po kilka stron aplikacji służącej do zapisu win. Na prawdę odpadałem przeglądając to na Kindle’u. Nie wiem czy bardziej wciągająca nie byłaby prosta ankieta, a na pewno szybsza do ogarnięcia. Z tego też powodu wydaje mi się, że osoby, które nie mają ugruntowanej wiedzy O JavaScripcie nie powinny sięgać po tą książkę, bo się po prostu zniechęcą. React.js jest przecież bardzo fajną biblioteką i na prawdę sztuką jest przedstawienie tego w tak nudny sposób. Jeżeli miałbym się jeszcze do czegoś przyczepić to sposób w jaki autor „buduje” swoje środowisko. Oparte na wierszu poleceń w Linuksie i bashu. No to po to instalowaliśmy npm’a żeby teraz pisać skrypty kompilujące w bashu? Na prawdę?

Podsumowanie

Być może narobiłem sobie zbyt dużo nadziei na kolejną solidną pozycję, która będzie z dumą czekała na półce aż sięgnę po nią kolejny raz. Być może moje oczekiwania były zbyt wygórowane ze względu na autora. Niestety ciężko tak na prawdę powiedzieć do kogo ta książka jest skierowana. Jeżeli myślimy o początkujących programistach to pewnie ilość przykładowego kodu zniechęci ich do głębszej analizy. Bardziej doświadczeni – pewnie wiedzą nawet więcej niż jest tutaj opisane. Pozycja ta ma jednak swoje momenty i szkoda byłoby ją przekreślać zupełnie. Na pewno pozwala uporządkować swoją wiedzę o Reakcie i z pewnością pozwala dostrzec zalety dołączenia do projektu takich narzędzi jak ESLint czy Flow. Cena również nie wydaje się wygórowana (mnie udało się kupić ebooka za niecałe 20 złotych).
Jeżeli miałbym wystawić ocenę w skali od 1 do 5, to ze względu na sentyment do autora będzie to 3.
Jest to pozycja, która nie sprawi, że będę teraz częściej sięgał po książki opisujące konkretne frameworki. Chyba dożyliśmy czasów kiedy dokumentacje są często znacznie lepszym miejscem do zgłębiania wiedzy niż specjalistyczne książki. No cóż.