Smutne i chyba dziwne jest to, że w przypadku technologii webowych liberalizm Internetu stosunkowo często staje się problemem, i to poważnym. Masz rację: jest mnóstwo, mnóstwo zasobów, przykładów, tutoriali i tak zwanych "nauczycieli", którzy są kompletnie do niczego -- uczą złych praktyk. Najśmieszniej (choć nie zabawnie...), gdy uczą czegoś zupełnie bezsensownego, co nie ma żadnych plusów, a tylko same minusy.
Przykład masz wyżej. I tak, zdaję sobie sprawę, że tak bywa w tych "tutorialach" i potem ludzie to przejmują. Sprawa wygląda tak: albo jakoś wzniesiesz się ponad wierzenie wszystkiemu, co jest w Sieci, znajdziesz inne źródła i będziesz szedł ze swoim JavaScript-fu dalej, albo bardzo możliwe, że nigdy się nie nauczysz i nie zrozumiesz w sumie podstawowych rzeczy i dobrych praktyk. Przeklejanie czy kopiowanie kodu nie daje ci zrozumienia. Przykłady pomagają w nauce, ale nie wystarczą, by zrozumieć o co chodzi.
Jeśli tak byśmy spamowali evalem()
, to może jeszcze w ogóle zamiast pisać funkcje rekurencyjne tak:
Kopiuj
function fib(n) {
if (n === 0) {
return 0;
} else if (n === 1) {
return 1;
} else if (n > 1) {
return fib(n - 1) + fib(n - 2);
}
}
piszmy je od razu tak?
Kopiuj
// uwaga, zły kod!!
function fib(n) {
if (n === 0) {
return 0;
} else if (n === 1) {
return 1;
} else if (n > 1) {
return eval("fib(n - 1) + fib(n - 2)"); // WTF? (jak szaleć z evalem, to szaleć...)
}
}
Widać chyba, że nie ma to żadnego sensu i jest po prostu głupie. Tak samo głupie jest tak naprawdę pakowanie stringa to setTimeout()
, a mimo to niektórzy uczą w ten sposób innych (!).
To może coś o źródłach nauki...
Nie wchodź na w3schools.com . To suchar jakich mało. Jakiś czas temu zaczęli to poprawiać, ale błędy wciąż tam są. Ta strona narobiła sporo szkód, bo ludzie myślą, że jest związana z W3C. Tak naprawdę nie jest -- Konsorcjum całkowicie się od nich odcina, a lekka zbieżność nazw jest zupełnie przypadkowa. Google także zalicza tutaj totalnego, żałosnego faila, bo W3schools ląduje wysoko w wynikach wyszukiwania -- wynika to z niedoskonałości algorytmów wyszukiwania Google.
Ludzie (ci dobrzy) zaczęli więc sztucznie pozycjonować dobre źródła, żeby zepchnąć W3Schools z wysokich miejsc na liście wyników wyszukiwania. To zbędna strata czasu, z winy Google, no ale nikt nie jest doskonały.
Te lepsze źródła to np. Mozilla Developer Network:
https://developer.mozilla.org
Są tu specyfikacje, poradniki itp. dla różnych języków i standardów. Są znacznie lepsze, trudniej też o błąd czy złe praktyki.
Na SitePoincie też jest przyzwoity poziom (HTML, CSS, JS):
http://reference.sitepoint.com/
Z książek polecam "JavaScript -- Mocne strony" Douglasa Crockforda. Dobre źródło do nauki samego języka. W książce jest złoto, ale trzeba umieć je odczytać, bo jest napisana zwięźle i nie ma w niej gotowców do umieszczenia na stronie www. Tak naprawdę, Crockford w ogóle nie pisze o stronach www i o API, jakie ma JavaScript w typowej przeglądarce. Skupia się na samym języku: dziedziczeniu prototypowym, funkcyjności. Możesz poszukać wykładów Crockforda na YT. Ma w zwyczaju zaczynać wykład od dziesięciominutowego narzekania na JS albo opowiadania jego historii, więc się nie przestrasz ;).
Ja uczę się prosto ze specyfikacji ECMAScriptu (powiedzmy, że dla nas to to samo co JavaScript): http://www.ecma-international.org/publications/standards/Ecma-262.htm
W zasadzie nie polecam tego, chyba że ktoś już jest średnio-zaawansowanym lub zaawansowanym programistą. Specyfikacja ta nie jest zbyt lekkostrawna, zawiera wiele opisów wewnętrznych metod czy pól, które są wewnętrznymi mechanizmami języka, niedostępnymi nawet dla programisty. Jak będziesz chciał sprawdzić, jak działa operator typeof czy funkcja array.splice()
, to sprawdź to lepiej na MDN.
Z drugiej strony: polecam zaglądanie do specyfikacji/dokumentacji gdy mamy jakieś wątpliwości. Specyfikacja ECMAScriptu jest mało przydatna, ale dokumentacja na MDN już tak. Specyfikacja HTML-a 5 też jest przydatna. Jeśli będziesz się zastanawiał, czy tagu X można użyć w sytuacji Y, to sprawdź w specyfikacji, a nie tylko lataj po tutorialach i StackOverflow. Specyfikacja jest jedynym normatywnym dokumentem i może się zdarzyć -- i zdarza się -- że wyczytujesz w niej coś zupełnie innego niż w tutorialu. Wtedy wiesz, że tutorial jest prawdopodobnie do niczego.