Książka jaką niedawno przeczytałem i stanowi podstawę materiału o języku JavaScript na mojej stronie, to "JavaScript od podstaw" której autorem jest Pan Marcin Moskała 🚀. Tytuł bardzo przyjazny dla początkujących i kompletnie "zielonych" w fachu, jakim jest programowanie 🎯! Mimo iż zostałem w niej "pouczony", że to jest skierowane do ludzi, którzy nie mają zielonego pojęcia o programowaniu 🙂, postanowiłem ją sobie przeczytać i odświeżyć swoją wiedzę o języku JavaScript, z którego ostatni raz korzystałem podczas wypuszczania aktualizacji do jednej z moich gier, "Marball" ❤️. Zapraszam Cię do mojej opinii, popartej jak zawsze dowodami i ze szczyptą osobistych komentarzy 😄.
RECENZJA KSIĄŻKI "JAVASCRIPT OD PODSTAW"
Zacznę najpierw całościowo, jak odbieram całą książkę, co się w niej znajduje, a potem przejdę do ukazywania wad, jakich trzeba być świadomym(-ą) 👍. Tylko najpierw formalna sprawa 👇:
Recenzując książkę autorstwa Pana Marcina Moskały i prezentując swoje zdanie na jej temat, nie leżało w mojej intencji żadne złośliwe wytykanie błędów. Jedynym moim celem publikacji recenzji było przedstawienie swojej opinii oraz sprostowanie pewnych przytoczonych treści, aby ewentualne ponowne wydanie książki było pozbawione wskazanych błędów, jeśli faktycznie takimi są (bo sam mogę się mylić!).
Już mogę zaczynać.
Z CZEGO SKŁADA SIĘ KSIĄŻKA "JAVASCRIPT OD PODSTAW"?
Tytuł jest króciutki (zaledwie ponad 200 stron samej treści merytorycznej), przyjemny i zawiera w sobie dużo treści typu "konkret" bez lania wody 😅. Oprowadzanie po tematach też jest bez zastrzeżeń ✔️. Zaczynamy od prostych zagadnień, a kończymy na nieco trudniejszych, czyli tak jak powinniśmy oczekiwać od literatury tłumaczącej język programowania od podstaw 😊. Także "JavaScript od podstaw" spokojnie nauczy Cię języka...od podstaw 😁!
Książka wytłumaczy Ci bardzo przyjaznym językiem m.in 👇:
- jak napisać pierwszy kod korzystając z pliku HTML,
- jak tworzymy zmienne oraz stałe (i czym się różnią między sobą),
- jakie występują typy danych,
- czym się różni typ "null" od "undefined",
- jak korzystać ze słowa kluczowego "typeof" i jak może nam pomóc w walce z błędami,
- czym jest instrukcja warunkowa i jak korzystać z operatora warunkowego,
- jak korzystać z pętli: "for", "while", "do while" oraz kiedy użyć której,
- do czego służy tablica i jak się po niej poruszać,
- czym jest funkcja i dlaczego warto je stosować,
- obsługę wyrażeń lambda i funkcji anonimowych (strzałkowych).
Co zasługuje na wyróżnienie to to, że autor prezentuje nie tylko wiedzę na temat samej składni języka JavaScript, ale także porusza inne nie mniej istotne tematy 🏆! Konkretnie, to:
- w jaki sposób możemy się dalej uczyć programowania (na jakich źródłach i jakimi sposobami),
- do czego jest zdolny JavaScript (do jakich celów lub programów możemy go użyć i gdzie jest wykorzystywany),
- plan jak można znaleźć pracę w ciągu roku startując od zera (to powinno zainteresować szczególnie tych, którzy szukają pracy!).
Spodobał mi się też rozdział z pisaniem gry na płótnie HTML, co cieszy moje oko podwójnie jako dewelopera gier 🤩!
Oczywiście, jak w każdej lekturze, tutaj też wkradły się błędy w postaci literówek, niedopatrzeń i tym podobnych drobnostek (w tym interpunkcyjnych), jednak są one na poziomie tolerancyjnym 😉. O wiele gorzej z kodem źródłowym gry "Pong", ponieważ nawet postępowanie z książką w 100% powoduje, że nie będziesz w stanie cieszyć się efektem końcowym 💥. Szczegóły w dalszej części artykułu 👇.
JAKIE WADY MA KSIĄŻKA "JAVASCRIPT OD PODSTAW"?
Największą wadą jest masa błędów w rozdziale poświęconym pisaniu gry "Pong" (1972). Część funkcji jest wybrakowana, a instrukcje w pewnych miejscach zawierają niepełne modyfikacje 😬.
Teraz Ci przedstawię dokładniej na co możesz natrafić podczas czytania i studiowania zawartych treści "JavaScript od podstaw", a co może nieprzyjemnie zaskoczyć i odmówić działania ❌.
GDZIE MAM TO WSTAWIĆ?
Kwestia, która mogła nie zostać uwzględniona, a w moich oczach ma znaczenie 👀. Na stronach #174, #178 i #180 znajdują się nowe fragmenty kodów źródłowych w formie instrukcji warunkowych ℹ️. Kłopot w tym, że autor nie wskazał w którym dokładnie miejscu powinny się one znaleźć ⚠️. Można łatwo je poznać po blokach "if", stąd też nie będę tych fragmentów przedstawiał.
To może być zwrócenie uwagi trochę na wyrost, aczkolwiek Czytelnik powinien być poinformowany gdzie te instrukcje powinny się znaleźć (początkujący tym bardziej ma prawo tego nie wiedzieć), bo kolejność wykonywania robi cholerną różnicę 💣. Ja sobie jakoś poradziłem, lecz to nadal było "obstawianie" na podstawie doświadczenia 😔.
"DZIURAWY" KOD W ROZDZIALE O PISANIU GRY
To jest ta dużo gorsza wada 😬. Rozdział związany z tworzeniem gry na płótnie HTML zawiera w paru miejscach wybrakowany i źle napisany kod, który uniemożliwia uzyskanie efektu identycznego do ukazanego na obrazkach 😨! To trzeba podzielić na 2 zagadnienia, bo problem jest aż tak duży 😐!
NIE MA TAKIEJ FUNKCJI!
Próba wywołania funkcji o nazwie "drawPoints" na stronie #156 spowoduje błąd. Kiedy będziemy "iść" z pisaniem kodu źródłowego zgodnie z książką, to okaże się że przez całą resztę poprzednich stron od rozpoczęcia rozdziału NIE MA definicji takiej funkcji 😱! Tak samo jest z funkcją "drawBall" na tej samej stronie (w tamtym czasie powinno być "drawCircle"). Wywołanie jest, a ciało? Znajduje się dopiero na stronie #193 🤨.
Zapomniano też o definicji funkcji "drawPoints". Dotyka to stronę #194. Funkcja-konstruktor posiada metodę "drawPoints", która próbuje wywołać funkcję o tej samej nazwie występującą globalnie. Próbuje, gdyż takiej funkcji i skończy się to "krzykiem" interpretera 🙁. Na stronie #200 jest ta sama sytuacja.
Przy takim stanie nie ma szans, aby początkujący mógł sam załatać te dziury i nie będzie mógł nacieszyć się napisaną grą ⛔.
NIEPEŁNE MODYFIKACJE
Teraz drugie "auć!" 🔪. Strony #194-199 (fragment rozdziału o przenoszeniu kodu gry na paradygmat obiektowy). Prezentowane fragmenty kodów nie uwzględniają wszystkich niezbędnych zmian jakie powinny się odbyć, aby gra nie została popsuta 🚫!
Największą zmorą były zmienne "p1PaddleY" i "p1.paddle.y" (tak samo gracz nr 2), po przeniesieniu się na klasy i obiekty 👻. Wprowadzenie wszystkich modyfikacji pobranych z książki spowodowało u mnie wyłożenie się programu ❌! Między innymi, zabrakło poprawki w funkcji rysującej paletkę, gdyż nadal sugerowała się poprzednią zmienną odpowiadającą za pozycję paletki ("p1PaddleY", zamiast "p1.paddle.y")!
Nawet jeżeli nie usuniemy nieaktualnej już zmiennej, to dalej będzie źle 😐. Modyfikacja wartości nie będzie wpływać na paletkę z powodu przestawienia się na atrybut "y" w metodzie "setY" (metoda rysująca dalej będzie sugerować się tamtą zmienną). Z tej samej przyczyny problemy wystąpiły również po stronie obiektu "Ball", gdyż tam powstała zależność od zmiennych kontrolujących pozycję obu paletek w osi Y.
Przeniesienie zmiennych odpowiadających za punktację graczy także sprawiła zepsucie się mechaniki (tym razem dodawanie punktów po wyjściu piłeczki poza planszę) ❌. Na stronie #194 wprowadza się atrybut "points" do obiektu, tylko nie ma modyfikacji instrukcji inkrementującej 👇:
p1.points++; // zamiast p1Points++;
p2.points++; // zamiast p2Points++;Zmieniamy nie to, co powinno 😑!
Nie każdy będzie w stanie uporać się samodzielnie z takim problemem. Książka potrzebuje pełnego przeglądu tego rozdziału, bo jest fajny, tylko ma w sobie dużo błędów, które nie pozwalają na otrzymanie bezbłędnego efektu końcowego.
TEGO MI ZABRAKŁO!
A teraz z innej strony. Chciałem przedstawić ze swej strony 2 ważne podpunkty, których zabrakło mi w książce "JavaScript od podstaw", a które same nie zajęłyby dużej liczby stron 👇:
- ukazanie możliwości pisania kodu w JS poza HTML,
- opisanie instrukcji wielokrotnego wyboru (mimo jasnego sprzeciwu autora).
Opisuję dokładniej ⭐!
KOD W JĘZYKU JAVASCRIPT MOŻNA PISAĆ W OSOBNYM PLIKU
Bardzo ważny punkt moim zdaniem, gdyż powinno się poinformować Czytelnika (chociaż wtrącając jedno zdanie), że jeżeli nie chce mieszać jednego pliku z drugim, to może skorzystać z tej linijki kodu 👇:
a instrukcje pisane w JS wstawić sobie do odrębnego pliku skryptowego ✅! Początkujący powinien wiedzieć, że tak można zrobić, gdyż może chcieć pisać kod w osobnym pliku, co jest bardzo dobrą praktyką 👍.
Dzielenie kodu na małe segmenty jest bardzo ważne (słusznie zostało napisane, że kod oprócz prawidłowego działania, powinien być też czytelny) ⚠️!
BRAK OPISANIA INSTRUKCJI WIELOKROTNEGO WYBORU
Po opisaniu instrukcji warunkowych, na stronie #49 jest wspomnienie o instrukcji wielokrotnego wyboru ("switch") oraz jasne oświadczenie autora, że nie będzie tego pokazywał, gdyż odchodzi to od prostych do zrozumienia koncepcji. Ja bym tak bardzo nie przesadzał 😄.
"switch" potrafi dać do pieca, aczkolwiek jest w stanie skrócić kod i w niektórych sytuacjach uczynić go jeszcze lepszą wersją, co jak najbardziej sprzyja programowaniu 👍. Podejrzewam, że autor miał na myśli pułapkę, która "aktywuje się" gdy zapomnimy wstawić słowo "break" po bloku instrukcji "case" (czyli to, na co zwróciłem uwagę w stosownym artykule) i to zaważyło na zdecydowaniu o nieumieszczeniu treści o instrukcji wielokrotnego wyboru 💡. To jest moja hipoteza, więc mogę się mylić 🙂.
Choć istotnie trzeba bardzo uważać, ja bym tak nie tragizował 😅 i wytłumaczył nawet początkującym do czego jest zdolna instrukcja "switch-case" 😉.
DODATKOWE UWAGI
A tutaj jest parę dodatkowych uwag, które nie są już powiązane z jakimikolwiek błędami czy brakami w treści 😊.
NUTKA KONTROWERSJI
Komentarz w sprawie "kontrowersji", o której mowa na stronach #190-191 👀. Temat dotyczący przeniesienia implementacji sterowania paletką do samego obiektu gracza.
Autor twierdzi, że taki manewr kłóci się z zasadą "oddzielania modyfikacji stanu i reagowania na akcje gracza". Odebrałem to tak, że nie będziemy iść tą drogą i zostawimy tę część kodu taką jaka jest. Później się okazuje (strona #194 i #199), że jednak zostało to zaaplikowane w sposób "kontrowersyjny", czyli trochę wygląda jak zaprzeczenie swojemu poprzedniemu postanowieniu (chyba, że ja źle to odbieram) 🤔.
Zabrakło zdania uprzedzenia, że mimo wszystko ten kod (metoda "makeAction") zostanie przeniesiony do obiektu - tylko o to mi chodzi.
TERMINOLOGIA NA LUZIE
Drobna rzecz odnośnie terminologii. Dobra, dwie rzeczy 😁.
DEKLARACJA, A DEFINICJA ZMIENNEJ
Spostrzegłem jak parę razy były zamiennie używane słowa "deklaracja" i "definicja" w kontekście zmiennych ("let"). To się "nie liczy" do listy błędów, bo zostałem pouczony o tym, że autor kieruje się prostym językiem dla Czytelnika (strona #5).
Gdyby ktoś chciał wnikać w szczegóły, to przypomnę, że 👇:
- deklaracja zmiennej kończy się na etapie podania jej nazwy,
- definicja zmiennej jest wtedy, gdy przypisujemy wartość w tej samej linijce kodu.
ZMIENNE, A "NIEZMIENNE"
Były również zamienniki "stałej" i "zmiennej" na stronach #145 (jedno wystąpienia) oraz #154 (dwa wystąpienia), lecz i w tym przypadku na stronie #34 jest akapit o świadomości autora o tym, że faktycznie "const" powinno określać się "stałą", dlatego te informacje również nie są zakwalifikowane jako błąd ℹ️.
DOWCIPNA HISTORYJKA
Na sam koniec, coś na poprawę humoru 😄. Natrafiłem na tekst, który zostawił niezłe "XD" na twarzy 🤣.
Strona #58 i wątek historyjki o chłopcu, który zapragnął gotówki od mamy na kino 💲. Samo przedstawienie opowieści było po to, aby wytłumaczyć funkcjonowanie alternatywy w programowaniu abstrakcyjnym językiem. "Punktem kulminacyjnym" jest zdanie, które wypowiada mały bohater w stronę swojej mamy 👇:
"Użyłaś łącznika lub, który akceptuje zrobienie zarówno jednego, jak i drugiego, podobnie jak || w programowaniu."Wyobraziłem sobie wyraz twarzy mojej mamy, gdybym ja się tak do niej zwrócił po zrobieniu jakichś dwóch rzeczy naraz, oczekując ode mnie jednej z nich (alternatywa). W przeciwieństwie do mamy bohatera, moja nie zaakceptowałaby takiego wyjaśnienia. Od razu by zadzwoniła po lekarza 😆.
CZY KSIĄŻKA "JAVASCRIPT OD PODSTAW" JEST WARTA ZAKUPU?
A teraz odpowiedź na gorące pytanie, które zostawiam na koniec każdej recenzji 🥁🥁🥁. TAK 🚀! Leć do sklepu albo zamów sobie przez internet, a nie pożałujesz 😉.
Nie wypowiem się co do użyteczności dla kompletnie początkujących, bo przeczytałem ją mając już spory kawał doświadczenia w programowaniu, więc większość tematów obleciałem "na pstryk". Natomiast faktycznie co zauważyłem, została napisana tak, aby każdy miał szansę ją zrozumieć ❤️.
Są obrazki, tłumaczenia "na chłopski rozum" i na każdy temat poświęcono dostatecznie dużo stron. Oprócz tego, jest sporo wiedzy na temat dostępnych możliwości dalszej nauki programowania, prywatne przeżycia autora z życia zawodowego oraz plan ekspresowego zdobycia zatrudnienia 🔥🔥🔥! Nie widzę powodu, aby odwodzić Cię od zakupu książki "JavaScript od podstaw" 😄. Panie Marcinie, szacuneczek 💪!
![]() |
Tytuł "JavaScript od podstaw", to bardzo dobra pozycja dla początkujących adeptów w dziedzinie programowania. Spełnia swoją rolę postawioną przez autora, aby pokazać prostym językiem na czym polega programowanie!
Nie ma co używać półsłówek. Autor summa summarum odwalił kawał dobrej roboty (życzę mu jak najlepiej) i dzięki tej książce na nowo odświeżyłem sobie najbardziej podstawowe wiadomości z języka JavaScript 🔥. Teraz już na przykład wiem, że definiowałem zmienne przy użyciu słowa "var", nie wiedząc o istnieniu słowa "let", a zamiast korzystania z prototypów mogę skorzystać z wygody normalnej klasy potomnej dla obiektów gry 🧡. Program się od tego nie zawali, jednak jest wyciągnięta nauka na przyszłość. Lecz w końcu wszyscy jesteśmy ludźmi 😄! Temat JavaScriptu uznaję za zamknięty 🔒.
