Dzisiaj coś bardziej nietypowego: Biblioteczka Komputer Świat. Kurs programowania. Technologie internetowe od podstaw Konrada Jagaciaka.
To miała być jedna z tych dłuższych recenzji, bo i pozycja nie jest znowu taka krótka (ponad 100 stron), ale… raczej wyjdzie z tego takie ogólne marudzenie, niekoniecznie wprost na tę konkretną pozycję. Bo – po raz kolejny – napotykam się na dokładnie te same problemy, co w wielu innych kursach czy tutorialach i – po raz kolejny – nie wiem, skąd tego typu informacje się biorą.
Pierwszym przykładem z brzegu jest legendarna już informacja, jakoby DOCTYPE
służył do informowania przeglądarki, że ma do czynienia z dokumentem HTML. To nieprawda i wspominałem już o tym wielokrotnie. Specyfikacja HTML wprost mówi, że DOCTYPE
jest historyczną pozostałością po trybach renderowania stron. Jeśli się go nie użyje, przeglądarka skorzysta z trybu quirks, który w pełni świadomie nie przestrzega wielu standardów.
Innym powielanym błędem jest używanie nagłówka h1
wielokrotnie na stronie. Problem ten był już wielokrotnie wyjaśniany. Niemniej tutaj wydaje się dodatkowo podkreślony przez to, jak tłumaczone jest zadanie nagłówków. Autor odwoluje się do ich aspektów wizualnych, podczas gdy akurat to jest najmniej istotne w nagłówkach. O wiele istotniejszy jest fakt, że służą do stworzenia hierarchii treści na stronie (czyli czegoś na wzór spisu treści).
Niemniej pozycja zawiera także unikalne błędy, z którymi nie zetknąłem się gdzie indziej. Chyba najbardziej rzucającym się w oczy jest stosowanie znacznika zamykającego dla elementu img
:
<img src="file.png" alt=""></img>
W HTML-u element ten nie posiada znacznika zamykającego – takowy zastosować możemy wyłącznie w trybie XML. W HTML-u jedyna poprawna wersja to:
<img src="file.png" alt="">
<--lub – jeśli jesteśmy fanami XML-->
<img src="file.png" alt="" />
W książce znajduje się także nieco nieprawdziwych informacji. Chyba najbardziej jaskrawy w tym względzie jest opis TypeScriptu, w którym wymieniono m.in.:
- konieczność deklaracji zmiennych przy pomocy
let
zamiastvar
– co nie ma nic wspólnego z Typescriptem;let
to nowy sposób deklaracji zmiennych w ES6+; - konieczność podawania typu przy deklaracji zmiennej – co jest nieprawdą, bo istnieje type inference;
- istnienie klas, w przeciwieństwie do JS, które dodatkowo mają semantykę jak w C#/Javie – co jest nieprawdą, bo klasy istnieją od ES6+; dodatkowo – z racji bycia cukrem składniowym na prototypach – zachowują się inaczej niż te w C#/Javie (np. można je dynamicznie zmieniać w trakcie życia programu);
- klasy pozwalające na dziedziczenie – co również nie jest prawdą, bo prototypy w JS-ie także na to pozwalają, tym bardziej klasy;
- istnienie trzech podstawowych typów (
Number
,String
iBoolean
) – co jest mocno niepełną informacją, bo samych typów prostych w JS-ie jest więcej, a w TS-ie jest choćby do tegoany
.
Innym rzucającym się w oczy błędem jest nazywanie konstruktorów prototypami. Odnoszę wrażenie, że prototypy zostały w tym poradniku pomylone ze wzorcem Prototypu.
Niemniej to nie błędy rzeczowe najbardziej uderzają mnie w tej pozycji, a to, w jaki sposób została stworzona. Projektowanym odbiorcą bez wątpienia jest ktoś, kto dopiero wchodzi w światek webdevu – a więc osoba, która niekoniecznie zna i rozumie podstawowe pojęcia związane z tworzeniem stron. I z tej pozycji ich nie pozna i nie zrozumie. Brakuje tu odpowiedzi na pytania po co
i dlaczego
, jest pokazane jedynie jak
. A nawet to jest zrobione w bardzo skrótowej formie, praktycznie sprowadzone do listy poszczególnych kroków, jakie trzeba wykonać, by osiągnąć dany efekt. Jeśli podejście takie może się sprawdzić przy tworzeniu prostych stron WWW, tak przy tworzeniu gry przeglądarkowej – niekoniecznie. Tam przydaje się teoria.
Rozumiem równocześnie, dlaczego jej nie ma: bo to ma być krótka i tania pozycja książkowa, którą każdy zainteresowany może kupić w najbliższym kiosku z prasą. Tylko czy aby na pewno to jest najlepszy sposób dystrybuowania tego typu treści? Ja sam kupiłem wydanie elektroniczne i chyba najbardziej irytował mnie w nim fakt, że wszystkie fragmenty kodu były po prostu screenshotami, których nie byłem w stanie skopiować do mojego edytora i mogłem je co najwyżej przepisać. To dość ironiczne, że książka o tworzeniu treści dla jednego z najbardziej dostępnych mediów jest tak niedostępna. A przecież zrobienie tego w drugą stronę (a więc najpierw przygotowanie wersji elektronicznej, a później dostosowanie jej do druku) nie jest zadaniem aż tak trudnym. Z technicznego punktu widzenia sprowadziłoby się do podmiany arkusza stylów strony. Prymitywną odmianę tego podejścia stosuję choćby do generowania PDF-ów dla moich tutoriali.
W papier first design razi jeszcze jedno: Sieć jako medium ma o wiele potężniejsze mechanizmy dostarczania treści, nieograniczone do tekstu i obrazków. Sam hipertekst daje możliwość tworzenia całych grafów wzajemnych powiązań. Wykorzystanie tego pozwala stworzyć o wiele bardziej rozbudowane materiały do nauki, zawierające wszystkie potrzebne wyjaśnienia choćby jako przypisy z odpowiednimi linkami. W druku to wszystko się traci, treść staje się „płaska”, nie może odesłać do niczego, poza sobą samą. W chwili, gdy kursy na Udemy są niewiele droższe od tej książki, takie podejście mnie po prostu dziwi.
Hipertekst to nie jest nowy wynalazek. Być może warto go w końcu zacząć wykorzystywać, przynajmniej do książek technicznych.
Ja już zupełnie nie rozumiem celu wydawania papierowych czy nawet elektronicznych (ale płatnych) książeczek typu „szybkie wprowadzenie do technologi webowych” i to jeszcze jako niepogłębiona lista kroków. Przecież niepotrzebny jest nawet kurs na Udemy, do wdrożenia się w podstawy jest mnóstwo świetnych, darmowych materiałów w Internecie! Jeśli chodzi o podstawy po polsku to chociażby https://miroslawzelent.pl/kurs-html/, a po angielsku wzorcowe, pogłębione, świetnie napisane https://developer.mozilla.org/en-US/docs/Learn. Ale to już sam wspominał Comandeer wielokrotnie.
Tak naprawdę ciężko znaleźć coś o Świętej Trójcy (czysty HTML + CSS + JS) na co na prawdę warto by było wydać pieniądze – chyba, że o czymś nie wiem, chętnie się dam poprawić w komentarzu 😉