Kursy Mirosława Zelenta

Dobre, czy jednak nie do końca?

Hej, dzisiaj chciałbym poruszyć temat do którego zabierałem się już wiele razy (posiadał też już wiele wersji), jednakże finalna wersja artykułu nigdy dojrzała światła dziennego… Aż do dzisiaj.

Mianowicie, chciałbym poruszyć temat dotyczący kursów Mirosława Zelenta.

Informacje techniczne:

  • Odnośniki do linków oznaczonych w ten sposób[n] znajdują się na samym dole wpisu.
  • Poniżej opisywane uwagi są moją, subiektywną opinią. Wpis ma jedynie na celu zwrócić uwagę na parę rzeczy, w założeniu nie ma być ani pozytywny, ani negatywny.

Krótkie wprowadzenie


Dla niewtajemniczonych (jeżeli wiesz kim jest ta postać, to możesz przejść do następnego paragrafu): Mirosław Zelent[1] (zwany także w dalszej części wpisu jako MZ) jest założycielem portalu Pasji Informatyki[2] (PI) w ramach którego od wielu lat prowadzi kursy związane z szeroko rozumianą informatyką. Jego kursy udostępniane są na platformie YouTube[3] i cieszą się bardzo dużą popularnością – szczególnie wśród osób młodszych (gimnazjum*-liceum).

*Tak, wiem że obecnie nie ma gimnazjum. Mam na myśli przedział wiekowy 13-15lat ;)

W momencie gdy popularność sięgnęła odpowiednio duży poziom, to zrodziło się forum Pasji Informatyki posiadające swój stały skład Pasjonatów, którzy dzielnie pomagają w budowaniu społeczności MZ i odpowiadają na pytania mniej doświadczonych członków. W ramach pewnych zabiegów forum stało się poniekąd osobnym bytem względem serwisu PI (o tym dwa słowa nieco później).

Na forum – my pasjonaci – wpajamy nowo-przybyłym pewną prawdę „życiową”. Ta prawda jest dosłownym zaprzeczeniem tego, co Nowo-Przybyli wynoszą z kursów, mianowicie: kursy MZ nie są idealne.

I właśnie o tym chciałbym dzisiaj porozmawiać.

 

(Nie)Idealne kursy


Przed przeczytaniem dalszej części artykułu warto wiedzieć, że przechodziłem przez (chyba) wszystkie możliwości „lubienia” kursów MZ: byłem ich fanem i przeciwnikiem – teraz jestem nastawiony mniej więcej neutralnie. Część rzeczy Mirosław Zelent robi świetnie (i tu nie da mu się niczego zarzucić), ale jak się rzuci okiem na te same elementy jeszcze raz, ale pod nieco innym kątem, to widać nieraz spore niedociągnięcia. O czym mowa dokładnie? Dowiecie się już za chwilę ;)

Dla zachowania pełni jasności: mówię tutaj WYŁĄCZNIE o kursach dotyczących C++ i szeroko-pojętej Webówki (PHP, HTML, SQL, CSS). Nie mówię tutaj o filmach „luźniejszych” jak np. „Egzamin E13”, „Matematyka przy kawie”, itp.

Negatywno-Pozytywnie

Zacznijmy od co Mirosław Zelent robi świetnie, czyli zachęcanie do nauki. Serio, nie znam drugiej takiej osoby (na YT / w sieci), która w równie dobry i skuteczny sposób zachęciła tak dużą ilość osób w młodym wieku do podjęcia wysiłku w celu nauki programowania (za co gratki). O tym, że wielu zostaje wezwanych, lecz niewielu wybranych już za chwilę ;)

Jednocześnie przy samej zachęcie MZ sporo trudu włożył w to, aby przedstawiany materiał był wyjaśniony łopatologicznie i zrozumiale na naturalnych, łatwo przyswajalnych przykładach (kolejny raz +).

Jednakże (oho, zacznie się krytyka) o ile w kursie tym najbardziej podstawowym, a więc podstaw C++ można wiele uproszczeń wybaczyć (choć też nie wszystkie), a samą „starą” formę kodu (a także standardu) można zgonić na uniwersalność kursów oraz łatwiejszą przyswajalność ze względu na to, że nowsze standardy C++ nie należą do najprzyjaźniejszych nowicjuszom ( z czym się zgadzam), tak przy np. kursie webowym takie samo postępowanie jest niewybaczalne (tutaj minus ode mnie). Mowa tutaj np. o przedstawianiu przestarzałych standardów, podczas gdy w trakcie publikacji filmu istniały już od dawna nowsze rozwiązanie (np użycie HTML4, a nie HTML5).

Powiecie: metodologia Bloom’a[5], blah, blah, blah… Nie wydaje mi się, że nakazuje ona przechodzenie najpierw po starej metodologii (która obecnie uznawana jest za przestarzałą i niepoprawną), aby dojść do tej właściwej, nowej i poprawnej. Przykład wałkowany już miliony razy: tagi – rzekomo ich poprawne użycie wiązałoby się ze zbyt dużą ilością nowego materiału do nauki[6]. Ale czy czasem późniejsza nauka tego samego (z punktu widzenia kursanta) nie wymaga większego wysiłku? Bo przecież tamto rozwiązanie działało, więc po co uczyć się nowych tagów?

Różnice pomiędzy HTML4, a HTML5

Innym przykładem może być kod, który na pewno mógłby być zrobiony dobrze już na samym początku. Mowa o kodzie, który (co ironiczne) opowiada m.in o chronieniu przed SQL Injection[7] z kursu PHP[8], ale niestety robi to źle (a przynajmniej nie do końca poprawnie), bo funkcja  mysqli_real_escape_string nie w każdym przypadku ochroni nas przed SQLi! Poprawna forma używałaby poprzednio wspomnianej metody wraz z funkcjami bindParam oraz prepare. Jako ćwiczenie zachęcam do zabawy (z dokładnie tą funkcją) w DVWA[9] na poziomie medium (można tam zobaczyć słabość real_escape_string). Z kolei na poziomie impossible można zobaczyć jak należy zrealizować w poprawny sposób filtrowanie danych wejściowych.

Ciekawostka: nie wszystkie dane są filtrowane nawet przy użyciu mysqli_real_escape, potrafisz wyexploitować kod MZ z drugiej lekcji? (Zadanie dodatkowe: A co z pozostałymi lekcjami?)

Te tematy były poruszane już wiele razy[10] i gdyby cały kod (lekcja) był oznaczony w odpowiedni sposób, coś w stylu: „nie nadaje się do wypuszczenia na produkcję (internet)” to darowałbym sobie wspomnienie o nich w niniejszym wpisie. Jednakże jakość nie-produkcyjna kodu nie jest jasno oznaczona i (niestety) dziesiątki osób wypuszczają ten kod „w świat” oraz uważają, że (kod) jest poprawny :(

Jednakże nie można MZ zarzucić tego, że nie słucha swojej społeczności. Bo słucha, kilka przykładów: oddał forum społeczności, wcześniej zamknięty kod forum jest teraz otwarty i każdy może go rozwijać, powstały Code Review odcinków. Ostatnio MZ zobowiązał się także do oddania (wybranym osobom) kodu odcinka do Code Review jeszcze przed jego wypuszczeniem[11] – co oznacza tyle, że przyszłe potencjalne niedociągnięcia mają szanse zostać zniwelowane. Yay!

Wracając do wad: to inne problemy jakie wiążą się ze sobą to długi czas odcinka i długi czas oczekiwania na odcinek. Odcinki pojawiają się średnio raz na miesiąc oraz trwają po około 1-2h. 2-godzinny odcinek ciężko się ogląda w np. autobusie lub innej sytuacji gdy mamy raptem chwilę czasu (pomijam to, że te dłuższe odcinki są w moim odczuciu są „przegadane” i każdy z nich dałoby się skrócić o jakieś 10-20%). Tak długi odcinek wymaga też na pewno dużo więcej pracy (stąd taki czas oczekiwania). Osobiście wolałem „starą” formę, gdzie odcinki nie przekraczały 20 minut.

Inną alternatywą byłoby skorzystanie z formuły stosowanej na szeroką skalę w serwisach e-learningowych (np. Udemy): duże moduły podzielone na mniejsze (zbierające się w jeden temat), dodatkowo podzielone na krótkie 2-15 minutowe odcinki. Przy takiej formie łatwiej jest obejrzeć więcej materiału w krótkich (naturalnych) przerwach, niż obejrzeć więcej gdy musimy znaleźć aż 2h wolnego czasu. Uważam, że mniej – ale częściej wyszłoby kursom na + ;)

Ostatnią dużą „wadą” jaką znalazłem w kursach MZ (i chyba największą), to fakt że osoby oglądające umieją po odcinku już sporo. Niestety, ale niewiele osób po przerobieniu kursu rozpoczyna własne poszukiwania nowych, lepszych rozwiązań danego problemu. Mam wrażenie, że po części jest to wina akademickiej mowy Pana Zelenta, który używa wiele „mądrych”, ładnych słów (btw. też je lubię, bo kto ich nie lubi), które razem z zapewnieniami na końcu odcinka „jak to wiele umiemy” tworzą piękną kompozycję, która upewnia widza „jak to wiele umie”.

Z innej strony – winny jest też sam typ widza, czyli „gimnazjalista”, który jak wiadomo – wszystko wie najlepiej ;) Wiem, że MZ ostatnio przykłada coraz większą wagę, aby zachęcić widza do dodatkowej, samodzielnej eksploracji tajnik sztuki programowania. Jednakże dopiero na forum zostaje oblany wiadrem zimnej wody gdy jego „wspaniały kod” dostaje przywieszkę z „standardową listą błędów po kursie MZ”.

Niestety tacy osobnicy pojawią się zawsze: ‚plus’ za starania MZ, ‚minus’ bo ten problem pojawia się jednak na nieco zbyt szeroką skalę niż powinien.

 

Podsumowanie


Podsumowując mój wywód: kursy Mirosława Zelenta nie są ani wybitnie tragiczne, ani wybitnie genialne. Są gdzieś po środku. To co wybitnie robią to zachęcają do programowania i uczą w łopatologiczny sposób podstaw. Jednakże jeżeli ktoś już połknie tego bakcyla programowania, to póki co zalecałbym naukę z innych źródeł (chociaż może się to jeszcze zmieni, patrz [11]).

Moje zdanie odnośnie nie-idealności kursów MZ zdają się potwierdzać inni[12]. Moim głównym celem było zauważenie, że kurs nie musi być wcale tak idealny jak może się wydawać, osobiście gorąco zachęcam do zajrzenia na CR lekcji MZ[13], które przygotowaliśmy wspólnie z ekipą Coders Community[14], a także do reszty „zewnętrznych źródeł”.

Liczę, że udało mi się zachować w tym wpisie równowagę pomiędzy tym co jest dobre w kursach, a co złe. Oczywiście negatywne cechy na pewno wyróżniają się nieco bardziej, bo wymagają nieco szerszego opisu, w przeciwieństwie do cech dobrych gdzie wystarcza zdanie „to było dobrze zrobione” ;)

A Wy, jakie macie zdanie? Zgadzacie się z tym co opisałem, czy może po prostu mam skrzywiony obraz na świat (a raczej kursy MZ)? Czekam na Wasze opinie w komentarzach!

(Tradycyjnie: zapraszam do śledzenie bloga przez Social-Media: panel po prawej stronie bloga)

Code ON!

Zewnętrzne źródła

  1. [Blog MZ]
  2. [Pasja Informatyki]
  3. [Kanał Pasji Informatyki]
  4. [Forum Pasji Informatyki]
  5. [Taksonomia Bloom’a]
  6. [#2 CodeReviews]
  7. [SQL Injection]
  8. [Kurs PHP #2]
  9. [DVWA]
  10. [Przykładowa dyskusja]
  11. [Wstępne CR odcinków]
  12. [O kursie JS i CSS] [O kursie PHP] (ten sam autor)
  13. [Code Review kursów MZ]
  14. [CodersCommunity]