艣roda, 13 pa藕dziernika 2021

Naucz si臋 skutecznie trudnych rzeczy i wykorzystuj wiedz臋 w praktyce

Ostatnie kilka tygodni poznaj臋 programowanie funkcyjne z kursem z mimuw.edu.pl. Przerobi艂em kilka lekcji. Udowodni艂o mi to, 偶e nauka nowych rzeczy, zw艂aszcza opisanych w do艣膰 mocno naukowy, abstrakcyjny spos贸b, wymaga innego podej艣cia ni偶 zwyk艂e zg艂臋bianie dobrze znanego tematu. Na ten sam problem jako programi艣ci trafiamy wielokrotnie – poznaj膮c nowe biblioteki, j臋zyki czy algorytmy. W tym artykule przedstawiam kilka metod, kt贸re pomog膮 ogarn膮膰 Ci trudne tematy, ale najpierw dygresja.

Kiedy艣 uczy艂em si臋 gra膰 z nut na gitarze z ksi膮偶ki. Pocz膮tkowo umia艂em zagra膰 z wielkim trudem tylko kilka pierwszych nut z pierwszej strony. Wraca艂em do ksi膮偶ki wielokrotnie i za ka偶dym razem, udawa艂o mi si臋 zagra膰 troch臋 wi臋cej i lepiej. Kolega kt贸ry 艣wietnie gra艂 na gitarze, m贸g艂 przerobi膰 kurs z ksi膮偶ki w jeden dzie艅. Nie wynika艂o to z szeroko poj臋tego „talentu”, po prostu, ta osoba zaczyna艂a podobnie jak inni, ale by艂a bardzo zawzi臋ta i 膰wiczy艂a d艂u偶ej. Z czasem pewne rzeczy staj膮 si臋 nawykami i zamiast zastanawia膰 si臋 nad tym, jak chwyci膰 akord, wykonujemy ruch pod艣wiadomie.

Przek艂ada to si臋 tak偶e na programowanie, kt贸re jest treningiem my艣lenia. Je艣li b臋dziemy trenowali je we w艂a艣ciwy spos贸b, prze艂o偶y si臋 to na lepszy kod, szybsze rozwi膮zywanie problem贸w oraz zrozumienie dziedziny w kt贸rej si臋 poruszamy. Jak zauwa偶y艂em, wi臋kszo艣膰 ludzi pracuje jednak z my艣l膮 aby jak najszybciej sko艅czy膰 taski, bez zrozumienia. Sam te偶 pracowa艂em w taki spos贸b, co prawie nie dawa艂o poczucia rozwoju.

Moim zdaniem, je艣li uczymy si臋 w prawid艂owy spos贸b, to przek艂ada si臋 to na 艂atwiejsze zrozumienie kodu czy dokumentacji, na kt贸re z pewno艣ci膮 natkniemy si臋 podczas szukania rozwi膮za艅 naszych problem贸w w pracy. Musisz wiedzie膰 jak mniej wi臋cej dzia艂a kod i nie wolno kopiowa膰 Ci rozwi膮za艅 innych os贸b na 艣lepo. Dobry programista umie korzysta膰 z oficjalnych 藕r贸de艂, takich, jak dokumentacja czy kod biblioteki.

Jak skutecznie trenowa膰 programowanie?

Na stronach tego i moich poprzednich blog贸w zwykle umieszczam linki do darmowych kurs贸w programowania. Materia艂贸w w sieci jest mn贸stwo, g艂贸wny problem polega na ich w艂a艣ciwym wykorzystaniu.

W艂a艣ciwa postawa

Chyba naj艂atwiej opisa膰 j膮 cytatem Charlesa Darwina – „ignorancja cz臋艣ciej jest przyczyn膮 pewno艣ci siebie, ni偶 wiedza”. Zaakceptuj 偶e jest mn贸stwo rzeczy kt贸rych b臋dziesz musia艂 si臋 nauczy膰. Odrzu膰 cz臋sto powtarzan膮 iluzj臋, 偶e „to si臋 nie przyda„. S艂ysza艂em tak膮 wym贸wk臋 od wielu ludzi. Jeste艣 na to gotowy – 艣wietnie! Zaczynamy.

Pe艂ne zrozumienie podstaw tematu

Zaczynasz uczy膰 si臋 jakiej艣 technologii i nagle pojawia si臋 w niej kilkana艣cie nieznanych Ci wcze艣niej nowych rzeczy. Chcesz prze膰 do przodu, ale nie rozumiesz po艂owy czytanego tekstu. Hold your horses – trzeba wr贸ci膰 do podstaw.

Przyk艂ady – Typescript jest nadzbiorem JS, co implikuje, 偶e w pierwszej kolejno艣ci powiniene艣 doskonale pozna膰 w艂a艣nie Javascript. Je艣li uczysz si臋 SCSS musisz zna膰 CSS, a gdy chcesz pozna膰 Lomboka, dowiedz si臋, jakie mechanizmy on upraszcza. Warto zna膰 tak偶e wzorce projektowe – przyk艂adowo RXJS 艂膮czy w sobie wzorzec Iterator i Obserwator i to jest podstawowa wiedza potrzebna do zrozumienia tej biblioteki. Je艣li tworzysz api to musisz wiedzie膰, czym mo偶e zajmowa膰 si臋 ka偶da z warstw.

Dokumentacje cz臋sto naszpikowane s膮 terminami technicznymi. Je艣li nie masz nawyku uczenia si臋 tych „trudnych rzeczy”, nie b臋dziesz nigdy pewny tego, dlaczego piszesz dany kod i jakie problemy on rozwi膮zuje. Nast臋pnie jest Ci jeszcze trudniej pozna膰 zaawansowane techniki, bo z regu艂y opieraj膮 si臋 one na tych prostych, kt贸rych dobrze nie znasz.

Idealnym przyk艂adem jest tutaj CSS. Mo偶na 艂atwo pozna膰 jego podstawy, ale je艣li nie poznasz zasad dotycz膮cych specyficzno艣ci, praca b臋dzie bardzo frustruj膮ca.

Niekt贸re dzia艂y informatyki – np. machine learning czy programowanie funkcyjne bardzo mocno opieraj膮 si臋 na znajomo艣ci matematyki i tego etapu nauki nie mo偶esz pomin膮膰, je艣li zale偶y Ci na dobrym zrozumieniu. Moim zdaniem, matma w programowaniu jest tak samo wa偶na, jak znajomo艣膰 nut w graniu na dowolnym instrumencie. To wiedza le偶膮ca u podstaw wi臋kszo艣ci zagadnie艅.

Proponuje takie 膰wiczenie – otw贸rz dokumentacj臋 technologii kt贸r膮 chcesz pozna膰 i wczytaj si臋 w ni膮 bardzo dok艂adnie. Je艣li co艣 nie b臋dzie jasne, doczytuj w sieci i wracaj potem znowu do dokumentacji. Rzeczy kt贸rych nie zna艂e艣 i uznasz za warte zapami臋tania, warto wrzuca膰 do Anki. W ten sam spos贸b mo偶esz analizowa膰 kod – zatrzymuj si臋 przy fragmentach kt贸rych nie jeste艣 pewien i sprawdzaj.

Masz mniej czasu i napotka艂e艣 na jakie艣 nowe informacje, kt贸re warto sobie przyswoi膰? Nic straconego, wrzu膰 je na swoj膮 list臋 rzeczy do nauczenia si臋 i wr贸膰 do tego p贸藕niej.

Gdy zajmowa艂em si臋 t艂umaczeniami znalaz艂em przydatn膮 zasad臋. Je艣li nie sprawdzi艂e艣 jakiego艣 rzadziej u偶ywanego s艂owa w s艂owniku i wydaje Ci si臋, 偶e wiesz co ono znaczy, prawdopodobnie przet艂umaczysz je 藕le.

Staraj si臋, by by艂o jak najmniej rzeczy, z kt贸rymi si臋 stykasz o kt贸rych wydaje Ci si臋 偶e co艣 wiesz, ale w rzeczywisto艣ci nawet nie umiesz ich opisa膰 s艂owami. M贸zg cz臋sto ma tendencj臋 do pomijania trudnych rzeczy. Nauka tych „trudnych podstaw” zwraca si臋 bardzo mocno – zwykle s膮 one wykorzystywane w podobny spos贸b w r贸偶nych j臋zykach programowania.

To samo dotyczy technicznych s艂贸w w j臋zyku angielskich, kt贸rych nie znasz. Je艣li w pracy padaj膮 nazwy skomplikowanych technologii u偶ywanych przez innych cz艂onk贸w zespo艂u, tak偶e powiniene艣 o nie dopytywa膰.

Cz臋ste powracanie

Jak pisa艂em we wst臋pie, odbija艂em si臋 od tutoriala programowania funkcyjnego z wazniak.mimuw.edu.pl, ale za ka偶dym razem wraca艂em do niego po kr贸tkiej przerwie. Po takim powrocie wida膰, 偶e niekt贸re cz臋艣ci materia艂u s膮 nadal niezrozumia艂e i trzeba si臋 bardziej nad nimi pochyli膰, a niekt贸re zaczynam rozumie膰.

Bardzo warto艣ciowe jest powtarzanie podstawowych materia艂贸w dotycz膮cych u偶ywanych technologii. Mistrzowie szachowi cz臋sto powracaj膮 do podr臋cznik贸w dla ni偶szych kategorii, a muzycy 膰wicz膮 gamy i pasa偶e. Tak samo programista powinien regularnie pracowa膰 nad jak najlepszym poznaniu podstaw.

Powracanie do dobrych materia艂贸w, przepisywanie kodu po raz kolejny i kolejny, wyci膮ganie i uczenie si臋 rzeczy kt贸rych do ko艅ca nie rozumiemy – to spos贸b na sukces. Trzeba te偶 dawa膰 sobie czas na u艂o偶enie pewnych informacji w g艂owie.

Wydaje mi si臋, 偶e rzetelnie i wielokrotnie przerobiony ten sam materia艂 daje o wiele lepsze efekty, ni偶 skakanie po 艂ebkach lub ogl膮danie setek godzin materia艂u szkoleniowego, do kt贸rego nigdy nie wr贸cimy.

Wiele tutorial贸w jest aktualizowana i mo偶na z nich dowiedzie膰 si臋 o nowych rzeczach dodanych do j臋zyka lub biblioteki.

Ca艂o艣ciowe przerabianie materia艂u

Moim zdaniem warto przerabia膰 materia艂y szkoleniowe, ksi膮偶ki, nagrania od a do z, chyba, 偶e znajdziesz w nich rzeczy kt贸re s膮 mocno nie aktualne. Przyk艂adowo – je艣li przerabiasz tutorial z NGRX (https://ngrx.io/guide/store/walkthrough), przejd藕 go do ko艅ca, nie poprzestawaj na naj艂atwiejszych rzeczach. Dzi臋ki temu zyskasz wi臋ksz膮 perspektyw臋 i gdy natrafisz w kodzie na jakie艣 problemy, by膰 mo偶e co艣 Ci za艣wita w g艂owie 偶e kiedy艣 o tym czyta艂e艣.

Je艣li poprzestaniesz jedynie na skopiowaniu z tutoriala rozwi膮zania kt贸re wydaje Ci si臋, 偶e dzia艂a, skazujesz siebie na powielanie tych samych b艂臋d贸w w niesko艅czono艣膰.

Nie jestem fanem tutoriali w formie wideo dlatego, 偶e zwykle one jedynie prze艣lizguj膮 si臋 po g艂贸wnych tematach. Zwykle podobn膮 wiedz臋 znajdziemy w tutorialu wprowadzaj膮cym do technologii napisanym przez autor贸w. Wideotutorial mo偶e by膰 jednak dobry wtedy, gdy chcesz pozna膰 nowe przyk艂ady lub chcesz zmieni膰 kontekst nauki z czynnej na bardziej biern膮.

膯wiczenia

Kod znajduj膮cy si臋 w dokumentacji / tutorialu nale偶y przepisa膰 i wykona膰. Jednocze艣nie, mo偶esz poszuka膰 sobie 膰wicze艅 online (na przyk艂ad na Codewars), lub zaproponowa膰 swoje 膰wiczenia i wrzuci膰 je do Anki. Cz臋sto robi臋 to w ten spos贸b – zapisuj臋 sobie fragment kodu na przyk艂ad w JSFiddle i daj臋 w komentarzu opis, jaki rezultat jest oczekiwany. Nast臋pnie podlinkowuje 膰wiczenie w Anki.

膯wiczenia nie musz膮 by膰 w formie problem贸w do rozwi膮zania. Przydatne mo偶e by膰 stworzenie fiszki w kt贸rej zapytasz przysz艂ego siebie, dlaczego jakie艣 rozwi膮zanie jest lepsze albo poprosisz o wyja艣nienie dzia艂ania kodu.

Pozdrawiam – Kamil Naja

Brak komentarzy:

Prze艣lij komentarz