Jak zacząć programować - Czy Javascript to dobry język dla początkujących?

Jak zacząć programować - Czy Javascript to dobry język dla początkujących?

Ostatnimi czasy język Javascript - nie mylcie z Java - zyskuje coraz wiekszą popularność. Stosowany jest już nie tylko jako coś, co może wspomagać działanie strony internetowej, ale również umożliwia tworzenie aplikacji mobilnych, gier a nawet obsługiwanie fizycznych urządzeń (Internet of Things). Z tego względu wiele firm prowadzących bootcampy oraz kursy dla początkujących programistów wybiera Javascript jako język, którego uczą. Mnie natomiast nurtuje pytanie czy to rzeczywiście dobry wybór?

Naprawdę nie zdziwi mnie jeśli usłyszę, że za pomocą Javascriptu można obsłużyć lodówkę, w zasadzie już nawet o tym gdzieś słyszałem (źródła nie podam, bo nie pamiętam, ale jak sie uprzecie, to poszukam).  Tak że można powiedzieć, że boję się otworzyć lodówkę bo w środku będzie Javascript (JS - w skrócie). Javascript zatem jest tak popularny, że wręcz realizuje osiągnięcie pewnego rodzaju świętego Graala, czyli mamy jeden język w którym możemy stworzyć wszystko - backend do naszej strony, aplikację mobilną, nudną  aplikację okienkową, czy nawet zwariowany pomysł z obsługą lodówki. Nie zamierzam się sprzeczać z tym, że JS daje radę na wielu polach, zamierzam polemizować z tym, że jest to dobry wybór dla początkujących.  I tutaj mam na myśli tych co rzeczywiście są początkujący, a więc ci, którzy dopiero się uczą, że nawiasy zamykać to jednak trzeba.

Daliśmy sobie wmówić że Javascript to prosty język

Przez wiele lat JS był traktowany bardziej jako zabawka niż poważny język. Wynikało to z jego ówczesnych ograniczonych możliwości, gdyż służył głównie do tworzenia dynamicznych stron internetowych. Sytuacja zaczęła się zmienić w okresie boomu na web 2.0, gdy coraz to więcej ludzi zostało poniekąd zmuszonych do pisania w tym języku. Co prawda nadal jednym środowiskiem, w którym można było się natknąć na Javascript była przeglądarka oraz strony internetowe, ale część osób zobaczyło w nim potencjał. Wraz z wydaniem przeglądarki Chrome jako opensource pojawiła się pewna nowinka. Otóż grupa programistów wyciągnęła z Chroma silnik obsługi JS, dodała kilka dodatkowych możliwości i opublikowała projekt NodeJS.  Od tego momentu, inni rozpoczęli proces wkładania JS tam gdzie się da.

Ten krótki rys historyczny, miał na celu uzmysłowienie, że JS nigdy nie był projektowany z myślą o tym, aby kiedykolwiek opuścić przeglądarkę. Stało się jednak inaczej, a pewna pogarda programistów innych języków pozostała. Głównie z tego powodu, że panowało powszechne przekonanie, że JS to prosty język.

A to nie jest do końca prawdą.

Owszem składnia języka JS nie jest skomplikowana, zwłaszcza dla tych który mieli już styczność z językami: C, C++, Java czy PHP. Jednak prosta składnia nie jest warunkiem wystarczającym do tego aby sam język był prosty.

Pamiętajmy o tym, że rozważamy Javascript w kontekście osób, które są całkowicie początkujące. Oto kilka problemów które zauważam właśnie w tym kontekście. Kolejność losowa.

Dynamiczne typy

Wydawać się może, że dynamiczne typy zmiennych, czyli to że nie trzeba określać czy dana zmienna będzie napisem, liczbą czy czymś innym podczas jej deklaracji, oraz to że język automatycznie dokonuje konwersji typu (czyli zamienienia na przykład liczbę 2 na napis '2', kiedy to staje się konieczne) powoduje następujące problemy:

  • ukrywanie przed programistą pojęcia typu zmiennej, pomimo tego że ten typ nadal istnieje, to powoduje utrudnienie w procesie tłumaczenia czym jest typ zmiennej. Na przykład czemu '2'*'2' daje 4 a '2*2' daje '2*2'  
  • Automatyczna konwersja typów czasem działa nieintuicyjnie, co powoduje konieczność dodatkowego tłumaczenia całej idei konwersji. Na przykład dla mnie, osoby która jest dosyć obeznana z tematem (kilka dobrych lat z PHP) pewnym zaskoczeniem było, że 2 + '2' da '22' a nie 4.

Podsumowując dynamiczne typowanie, to co dla osób zaawansowanych jest ułatwieniem i nie jest trudne do ogarnięcia umysłem, może spowodować to, że osoba początkująca będzie mieć tylko mętlik i poczuje że jest to bardziej skomplikowane niż w rzeczywistości jest. 

Moim zdaniem nie jest to coś, co przekreśla JS, niemniej trzeba na to zwrócić uwagę, aby dobrze wyjaśnić typy danych, a najlepiej zrobić to używając języka, który bardziej uwypukla istnienie typów. Na przykład Python gdy chcemy dodać 2 do '2' mówi nam wprost że nie wie jak dodać 2 do napisu '2'.       

Wszystko jest obiektem

Innymi słowy, dostajemy obiektowością w twarz dosyć szybko. Czyli ktoś ledwo pojął, że instrukcje wykonują się z góry na dół, a tu chyłkiem boczkiem dostaje dosyć skomplikowaną materię do strawienia. To jest niestety bolączka wszystkich języków które mają relatywnie niski próg wejścia (JS, Python, Ruby), PHP byłby w stanie się tu obronić ale instalacja interpretera PHP, zwłaszcza pod Windowsem do najprostszych nie należy.

Możecie głowić się o co mi chodzi, a chodzi mi o '.', czyli jak chcemy dodać nowy element do tablicy to w JS robimy

tablica.push(costam)

a w PHP

$tablica[] = costam 

Inaczej mówiąc, w PHP aby nauczyć kogoś, że do tablicy można dodać nowy element,  w ogóle o obiektach wspominać nie musimy. Co prawda w JS możemy powiedzieć, że tak sobie wymyślili ale jednak wypada zaznaczyć, że dotykamy obiektowości. 

Podsumowując w JS spotykamy się z obiektowością za szybko. Być może jest to ok i daje więcej czasu na oswojenie się z tematem. Nie jestem przekonany, ale dobrej alternatywy tu nie ma.

Callback'i 

Gdy już przełkniemy obiekty, nadchodzą one callbacki, czyli funkcje, które przekazujemy do funkcji, jeśli spojrzeć na JQuery to prakycznie nie da się nic zrobić w nim bez używania callbacków.  Ale nie tylko JQuery jest nimi przesycone, w zasadzie cały język mocno je wykorzystuje. Na przykład, powiedzmy że chcemy się nauczyć ładniejszej składni pozwalającej na przejście po elementach tablicy (iteracje), możemy do tego wykorzystać metodę (znowu obiekty ;) ) forEach która jako parametr przyjmuje callback. Czyli funkcje, która zostanie wykonana na każdym elemencie tej tablicy. To wymaga zrozumienia przez nas tego, że funkcje to też można przypisać do zmiennej, że nie musimy ich w ogóle nazywać i że można je przekazać do innej funkcji. Robi się trochę to skomplikowane, natomiast na przykład w Pythonie mamy konstrukcję for X in Y a w PHP po prostu inną pętlę foreach. Do zrozmienia tego w PHP czy Pythonie nie potrzebujemy rozumienia funkcji anonimowych, wystarczy samo pojęcie bloku kodu.

Nie twierdzę, że JS jest zły, czy że takie podejście jest bez sensu, w zasadzie to mi się podoba, natomiast pamiętam, że pojęcie tego trochę mi zajęło - a już wtedy nie byłem całkiem zielony.

Asynchroniczność

To już totalny midnfuck dla początkujących, dla zaawansowanych też, z tym że ciut mniejszy. Chodzi tu o to że w JS dosyć szybko spotykamy się z tym, że pewne fragmenty kodu nie będą się wykonywać zawsze w takiej kolejności jak sobie ustaliliśmy. Wynika to z tego że Javascript jest językiem, który działa bliżej realnego użytkownika. A użytkownik jest nieprzewidywalny. Mając na stronie 3 guziki nie mamy nigdy pewności, że użytkownicy będą je klikać w takiej samej kolejności. Dlatego to wprowadza dodatkowy poziom trudności w zrozumieniu że kod należy organizować tak, a nie inaczej.

Podsumowanie

Poza tym co wymieniłem, istnieje jeszcze wiele innych grzechów JS. Ale jak widzicie dorzuca on już sporo na starcie. 

Do napisania tego posta skłoniły mnie przemyślenia po tym jak pomagałem koleżance w przejściu przez jeden z bootcampów gdzie miała nieco trudności z pojęciem programowania i część z tych problemów była spowodowana właśnie samą naturą JS, która jest podstępna i zwodnicza. Natomiast jeśli myślicie o nauce programowania to szczerze odradzałbym zaczynanie z JS. 


Nieprzyzwoity Nerd.pl to najprawdopodobniej najlepsza strona o nieprzyzwoitym nerdowaniu.


nieprzyzwoity nerd

Pośród ogrodu siedzi ta królewska para...

...wait what? Nie ogrodu ale sofy (softu) i nie siedzi ale doskonale się bawi. Choć ich gry i zabawy nieco odstają od tego, co normalnie rozumiemy pod kategorią rozrywka.

Czymże zatem tak się zajmują? Programowaniem oczywiście, które w zasadzie jest czynnością bardzo kreatywną. To taki miks pracy detektywa,  architekta, artysty i tłumacza. Tym nie można się znudzić, zwłaszcza gdy nadchodzi ten satysfakcjonujący moment kiedy uruchamiamy program i on działa!

Ale nie samym programowaniem żyje ta para. Jest jeszcze film, teatr, kultura, nowinki techniczne, gry... i inne nieprzyzwoicie przyjemne przyjemności.

To wszystko znajdziecie na tym blogu.
Zapraszamy

Ania i Kris.

nieprzyzwoitka.pl logo

Nieprzyzwoitka.pl

Nieprzyzwoitka.pl - blog o seksie i związkach oraz innych nieprzyzwocie przyjemnych przyjemnościach

nieprzyzwoitynerd.pl logo

NieprzyzwoitaKuchnia.pl

Blog z nieprzyzwoicie pysznymi przepisami dla leniwych... i nie tylko.

Szukaj