Wpis z mikrobloga

Zainspirowany wczorajszym wpisem mireczka @danio_96 postanowiłem co nieco napisać na temat harvardzkiego kursu #cs50 na platformie edX, gdyż, tak się składa, dziś rano ukończyłem go po ok. 6 tygodniach zmagań. Sam bardzo lubię poczytać opinię innych zanim na coś się zdecyduję, więc może kogoś moje wypociny zainspirują. Zaznaczam jednak, że cała opinia pisana jest z perspektywy kompletnego laika, który NIE zamierza zostawać słynnym programistą15k, a CS50 traktował raczej jako wieczorną rozrywkę.

Na początek TL;DR:

Jest fajnie, bawiłem się świetnie i czegoś nawet nauczyłem.
Pełna opinia:

CS50 dzieli się na 9 „tygodni” odpowiadających faktycznemu rozplanowaniu kursu w wersji rzeczywistej na samym Harvardzie. Na każdy z tygodni składa się kilka elementów – wykład ogólny, zestaw krótszych, bardziej szczegółowych filmików oraz zadania do samodzielnego wykonania. Wykłady, prowadzone przez prof. Malana, są bardzo przystępne i nawet ktoś bez jakiejkolwiek wiedzy informatycznej byłby w stanie nadążyć za prezentowanym rozumowaniem. Ponadto, do każdego wykładu dołączone są wykorzystane prezentacje, składnie i czytelnie sporządzone notatki, a także wszystkie fragmenty kodu napisane przez wykładowcę w czasie zajęć – jest to naprawdę bardzo pomocne, zwłaszcza notatki, do których wielokrotnie wracałem. Widać, że bardzo duży nacisk kładziony jest przez Harvard na zainteresowanie programowaniem i robią wiele, aby nie zniechęcić studentów.

Treść wykładów rozwijana jest przez serię „shortów”, w których tłumaczone są poszczególne zagadnienia (np. rekurencja, poszczególne algorytmy sortujące itp.). Są bardzo wartościowe i często niezbędne, aby wiedzieć za co zabrać się przystępując do zadań. Pod koniec jednak stawały się mocno abstrakcyjne, przedstawiano raczej sam zamysł zagadnienia czy też sposób myślenia zamiast faktycznych rozwiązań. Zmuszenie do samodzielnego myślenia jest oczywiście jak najbardziej pozytywne, lecz momentami brakowało mi chociaż drobnej sugestii, jak faktycznie podejść do czegoś od strony kodu.

Zadania są moim zdaniem zdecydowanie najmocniejszym punktem CS50 i doskonale wpisują się w motto całego kursu – „demanding, but definitely doable”. Choć początkowo zadania nie zajmują raczej więcej niż max. 2, 3 godziny, ich poziom trudności i skomplikowania dość szybko zaczyna rosnąć, dzięki czemu pokonanie każdego kolejnego tygodnia napawa bardzo dużą satysfakcją. Pozostawiają do tego (w większości przypadków) znaczną swobodę, dając duże pole do popisu kreatywności rozwiązującego. Można je określić jako coś w stylu „tu jest krzemień, tu patyki, rozpal w tym miejscu ognisko” – nie mają wiele wspólnego z takim tutorialowym prowadzeniem za rękę.

W kontekście zadań warto wspomnieć też o narzędziach udostępnionych przez Harvard, a mianowicie CS50 IDE. Praca w nim jest całkiem przyjemna, można poruszać się po nim wykorzystując zarówno interfejs graficzny, jak i komendy (co jest zalecane). Możliwe jest także automatyczne sprawdzenie zadań z każdego tygodnia pod kątem ich poprawności i „stylu kodu”, co znacząco ułatwia testowanie rozwiązań (aczkolwiek tu nie jest idealnie, jestem pewien, że w tygodniu 3. system nie wykrył błędu, który sam zauważyłem, nie można więc ślepo na nim polegać).

Co do samej tematyki, zaczyna się od małego projektu w Scratchu (można go zrobić na max. punktów właściwie kilka minut albo dłubać w nim całe dnie jak ja, bo „musi być dobrze zrobione”), lecz już w drugim tygodniu rozpoczyna się trwająca połowę kursu przygoda z C. Początkowo trochę ułatwiona dzięki dodatkowej bibliotece mającej uprzyjemnić start w programowaniu, jednakże stopniowo jest ona wycofywana na rzecz „industry standard”. O samym C naczytałem się dużo złego i dobrego, osobiście podobała mi się praca z tym językiem, choć zadania z tygodnia trzeciego oraz w szczególności piątego (jeśli ktoś weźmie się za CS50 i dojdzie do Spellera to połączy się ze mną w bólu) mocno dawały w kość. Efekty dydaktyczne były jednak świetne i wymagające przykłady bardzo pomogły zrozumieć mi np. wskaźniki (jeśli tak tłumaczy się pointers).

Bardzo sprytnym zabiegiem jest umieszczenie w programie nauczania Pythona i SQLa tuż po C – gdy zobaczyłem, jak zadania, które w C zabrały mi godziny główkowania, nerwów i popadania w szaleństwo, były rozwiązywane kilkoma linijkami zrozumiałego na pierwszy rzut oka kodu, czułem się jakbym oglądał cuda. Ogółem Python i SQL zostały jednak wytłumaczone pobieżnie, gdyż celem tych dwóch tygodni jest pokazanie sposobów samodzielnej nauki nowych języków. Bardzo podobały mi się także zadania z tego fragmentu, tu już właściwie podejście „masz wolną rękę, zrób tak, aby działało” osiągnęło swoją pełnię.

Ostatnim elementem kursu są „tracks”, w ramach których teoretycznie wybiera się jedną z trzech ścieżek nauczania: web-dev (HTML, CSS, JS, Flask i bazy danych), mobile (albo iOS, albo Android) lub games (Lua, a właściwie framework Love2D), ale właściwie można zrobić nawet te, których się nie wybrało (oni nawet tego nie sprawdzają). Ja zaznajomiłem się ze ścieżką web-devovą i grową, obie mi się podobały – internetowa jest bardziej konkretna i mocno przypomina poprzednie tygodnie, gamedev jest za to tłumaczony bardzo dokładnie, wręcz linijka po linijce, dając solidne podstawy do dalszej pracy z Love. O mobilkach się nie wypowiem, trochę zniechęciły mnie komentarze redditowe, gdyż podobno ta część kursu jest bardzo chaotyczna i nieprzystępna dla ludzi bez doświadczenia/wiedzy – nie potwierdzam, nie zaprzeczam.

Przygodę z CS50 wieńczy projekt końcowy, będący ukoronowaniem tych kilku tygodni pracy. Jest tu pełna dowolność i, choć prowadzący kurs zachęcają do wykorzystania wiedzy zdobytej w czasie CS50 i zrobienia czegoś faktycznie użytecznego, nikt tego nie ocenia, a zaliczenie dostaje się za samo wysłanie formularza z linkiem do filmiku, na którym prezentujemy nasze „dzieło”. Maniacy mogą więc uznać to za motywację do zrobienia czegoś wielkiego, minimaliści jednak też sobie poradzą. Na koniec, nawet jeśli nie zdecydowaliśmy się na ekskluzywny certyfikat z edX, dostajemy pdfa z dyplomem wygenerowanym przez Harvard. Obawiam się, że nie sprawi, że wypłata urośnie nagle o jakieś 3k, ale to całkiem fajna pamiątka i pretekst do szpanowania przed znajomymi.

Ogólnie mam bardzo pozytywne odczucia związane z CS50 i nie uważam czasu przeznaczonego na kurs za stracony. Od dawna nie czułem się tak pozytywnie zakręcony, aby w wolnym czasie robić coś konstruktywnego i dokształcać się zamiast zanurzać się w otchłaniach prokrastynacji. Do serca też wziąłem sobie często powtarzane na wykładach stwierdzenie, iż „w CS50 nie chodzi o to, aby być lepszym od innych, tylko lepszym od siebie sprzed rozpoczęcia kursu”, co dawało dużo siły do działania. Jeśli ktoś dotarł do końca tego wywodu to z szacunkiem uchylam fedory, a jeśli dodatkowo zainteresował się CS50 – tym bardziej mi miło.

#naukaprogramowania
  • 3
@warning_sign: Fakt, przeskok jest duży. Myślę, że Tideman to drugie najtrudniejsze zadanie całego kursu. Jest to jednak do zrobienia, choć to właściwie pierwszy moment, gdy powinno się wykorzystać coś, co było tylko wspomniane na wykładzie, w tym przypadku rekurencję - myślę, że to też mocno podnosi trudność. Swoją drogą, week 3 jest chyba najbardziej niedorobiony, plurality akceptuje niektóre błędne rozwiązania, a treść Tidemana trochę kłóci się w jednym podpunkcie z rozwiązaniem.