Artykuł „Nauka JavaScript – zbiór kursów, materiałów edukacyjnych i definicji”

Czasami niektóre rzeczy sprawiają, że mimowolnie unosi się nam brew z powodu niebotycznego zdziwienia. Dzisiaj ten efekt u mnie wywołał artykuł Adama Łopusiewicza Nauka JavaScript – zbiór kursów, materiałów edukacyjnych i definicji.

Zacznijmy od zdania znajdującego się we wstępie:

Jak widzicie, z JavaScriptu korzystają największe portale internetowe, co tylko dowodzi temu, że warto nim się zainteresować.

Nie bardzo rozumiem, czemu miałoby to z automatu oznaczać, że faktycznie warto. Brzmi to jak złączenie dwóch błędów logicznych: odwołania do popularności oraz do autorytetu. A to, że większość stron w Sieci stosuje JavaScript, wynika z prostego faktu, że jest to jedyny język, jaki można wykorzystać w przeglądarce.

Niemniej najbardziej problematyczna jest sekcja Pojęcia związane z JavaScript. Pojawia się tam m.in. HTML i CSS. Definicja HTML jest w miarę poprawna (chociaż uważałbym z nazywaniem go prostym), ale już w CSS-ie robi się ciekawie:

CSS – kaskadowe arkusze stylu, dzięki którym nadamy stronie wygląd. Wykorzystuje się go do określania np. […] formatu wyświetlanej treści (np. czy dany tekst powinien znajdować się w centrum strony).

CSS na język polski tłumaczy się jako Kaskadowe Arkusze Stylów. Taką wersję nazwy podaje zarówno polskie MDN, jak i Wikipedia. Dodatkowo określanie pozycji elementów trudno nazwać formatem wyświetlanej treści. Nie bardzo wiem, skąd się wzięło takie określenie. Może to złe tłumaczenie terminu block formatting context (kontekst formatowania blokowego)? On jest jednak związany z czymś innym – tym, jak układane są tzw. boksy.

Kolejna definicja również jest błędna:

zmienna – rodzaj bloku, niektórzy określają go mianem “pudełka” z kodem, w których możemy zamieścić zbiór informacji np. liczb, obiektów. Składa się z trzech atrybutów: nazwy, miejsca przechowywania i wartości. W JavaScript zmienną określa się słowem “let”.

Ta definicja jest parafrazą definicji z Wikipedii. Problem jednak w tym, że wprowadzone w niej zmiany uczyniły ją błędną. Blok w JS-ie ma ściśle określone znaczenie i jest to kod otoczony nawiasami klamrowymi. W kodzie JS zmienne są reprezentowane przez deklaracje zmiennych, które zawierają nazwę i wartość zmiennej. Każda zmienna ma też faktycznie miejsce przechowywania (w pamięci), ale to akurat w programowaniu w JS-ie nie musi (czy wręcz nie powinno) obchodzić programisty. No i zmienne w JS można deklarować przy pomocy trzech słów kluczowych: var, let i const. Pomijam tutaj fakt, że atrybuty można raczej posiadać, niż się z nich składać.

Później następuje najdziwniejsza z definicji:

łańcuch (String) – to zero lub więcej znaków wpisanych w cudzysłowie. Łańcuchy składają się z właściwości. Jeżeli chcemy nadać jakichś cech tekstowi publikowanemu na stronie, określimy ją właśnie za pomocą klasy String.

Tutaj źle jest wszystko. Zacznijmy od tego, że łańcuchy tekstowe reprezentują tekst (sekwencje znaków). Wcale nie muszą być ujęte w cudzysłów, bo równie dobrze mogą być ujęte w apostrofy lub grawisy. I nie składają się z właściwości (co samo w sobie ma podobny sens, co składanie się z atrybutów) – tylko z sekwencji znaków. Dodatkowo wbudowany obiekt String nie służy do określania cech publikowanego tekstu. Służy do manipulowania ciągami tekstowymi po stronie kodu – np. ich przycinania, wyszukiwania podciągów itd. Od nadawania cech są HTML oraz CSS – jako warstwy treści i prezentacji. O ile cechy oznaczają formatowanie tekstu.

W tej definicji mieszany jest przy okazji typ prosty string z jego obiektową reprezentacją String. Widać to po stwierdzeniu, że łańcuchy tekstowe są złożone z właściwości. Właściwości posiadają obiekty String, natomiast same łańcuchy tekstowe są po prostu tekstem. To, że można na nich wywołać metody z obiektu String wynika z mechanizmu automatycznego „opakowywania” typów prostych obiektami.

Dziwi także fakt, że opisany jest tylko jeden typ – stringi. A gdzie liczby? Gdzie booleany? Gdzie obiekty? Gdzie funkcje?

Kolejna jest definicja DOM-u:

DOM – łączy strony internetowe ze skryptami lub językami programowania. Przykładem zastosowania DOM może być pop-up, czyli wyskakujące okienko pojawiające się na stronie.

Zacznijmy od tego, że skrypty pisane w językach programowania. Ba, na chwilę obecną jedynym językiem pozwalającym na pisanie skryptów w przeglądarkach jest JavaScript. Jest to też jedyny język programowania, który można bezpośrednio wykorzystać w przeglądarce, i jedyny, który ma dostęp do DOM w przeglądarce. WebAssembly wciąż takiej możliwości nie ma, a dodatkowo nie jest językiem programowania. W archaicznych czasach istniał jeszcze VBScript, ale jestem za młody, by wiedzieć, czy mógł korzystać z DOM.

Natomiast w tej definicji DOM-u brakuje… definicji DOM-u. A DOM to nic innego jak drzewiasta struktura, reprezentująca elementy HTML strony w formie obiektów, wraz z API do przeszukiwania i modyfikacji tej struktury. Co ciekawe, definicja DOM z artykułu wygląda na zapożyczoną z MDN. Problem polega na tym, że na MDN jest podany opis DOM-u w oderwaniu od platformy uruchomieniowej. Jednak w artykule traktującym o JS DOM powinien być ujęty właśnie z jego perspektywy. Na taką próbę ujęcia zresztą wskazuje drugie zdanie definicji, pokazujące popup jako możliwe zastosowanie DOM-u. Zabrakło też parafrazy jednego zdania z drugiego akapitu na MDN:

The DOM represents a document with a logical tree.

[DOM reprezentuje dokument przy pomocy drzewa logicznego.]

Bez tego jednego zdania definicja DOM-u przypomina bardziej mechanizm FFI niż obiektowy model dokumentu.

Kolejna jest definicja języka interpretowanego:

język interpretowany – język zapisany w formie interpretera, a nie jak w większości języków, w formie kompilatora.

Po raz kolejny jest to parafraza Wikipedii i po raz kolejny dobór słów sprawia, że definicja brzmi dziwnie. Implementacja a zapis to jednak dwa zupełnie różne słowa.

Trudno nie odnieść wrażenia, że słowniczek pojęć był napisany przez osobę niemającą pojęcia, o czym tak naprawdę pisze. Świadczy o tym choćby fakt, że jest to głównie parafraza innych źródeł – i to zrobiona bardzo po macoszemu. Wypadałoby jednak, żeby artykuły pretendujące do miana technicznych przeszły korektę merytoryczną zrobioną przez kogoś technicznego. Niemniej odnoszę wrażenie, że ten artykuł nie przeszedł nawet korekty językowej, bo jest tu sporo błędów związanych z odmianą wyrazów (jak w definicji zmiennej), językowych (jak składanie się z atrybutów czy właściwości) czy interpunkcyjnych. A to już nie napawa mnie chęcią do czytania czegokolwiek więcej na takim portalu.

Jeden komentarz do “Artykuł „Nauka JavaScript – zbiór kursów, materiałów edukacyjnych i definicji””

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.