0

Sposoby nauki

Cześć! Sposobów na zdobywanie wiedzy jest dużo, bardzo dużo. Nie wszystkie są odpowiednie, nie wszystkie mają dobre przełożenie czas -> zdobyta wiedza. Ja zebrałem kilka najważniejszych metod i omówiłem troszkę bardziej ich plusy i minusy. Zapraszam do przeczytania i komentowania.

Nauka poprzez własny projekt

Zaczniemy z grubej rury i kategorii, która chyba nikogo nie zdziwi. Najlepszym sposobem na zdobywanie wiedzy jest oczywiście prowadzenie własnego projektu.

Nic tak nie uczy, jak dostanie solidnego wycisku od siebie samego. Realizując własny projekt masz ten komfort, że możesz się skupić na funkcjonalności. Nie gonią cię żadne terminy, więc możesz badać, testować, realizować różne rozwiązania.

Podczas realizacji projektu na pewno natkniesz się na jakieś problemy. Problemy, które czasami zajmują godziny jak nie dni, jeżeli je rozwiążesz, to na pewno to zapamiętasz. Jeżeli jednak stwierdzisz, że coś zepsułeś np. w architekturze, to również będzie to wartościową lekcją.

Oczywiście nauka będzie przynosiła efekty, jedynie pod jednym warunkiem: musisz sobie stawiać ambitne cele, realizować projekt, który coś Ciebie nauczy. Przy planowaniu nie możesz odrzucać funkcjonalności, bo to „może być trudne”, wręcz przeciwnie! To powinno Cię motywować do tego, aby zmierzyć się z takim tematem.

Pamiętaj, najszybciej uczysz się samemu znajdując rozwiązanie dla napotkanych problemów. Istnieje przysłowie, że mądry człowiek uczy się na błędach innych, ale nie jestem pewien czy w programowaniu się to sprawdza. Na pewno bardziej zapamiętasz rozwiązanie, do którego doszedłeś po całodniowym wysiłku, niżeli takie, które ktoś Ci poda na tacy.

Rozmowa i konsultacje

Nawet jeżeli chcesz wszystko zrobić samemu, czasami istnieje potrzeba skonsultowania się z kimś mądrzejszym albo kimś posiadającym świeże (inne) spojrzenie.

Konsultacje takie mogą być niezwykle owocne, gdyż nie następuje tutaj efekt „marnowania czasu”. Razem z drugą osobą poruszacie tylko takie tematy, które faktycznie dotykają problemu. Nie mówicie o tysiącach innych rzeczy, które dzieją się w około, tylko skupiacie się na jednym zagadnieniu.

Dodatkowo dużym plusem jest, to że oboje znacie swój poziom, wiecie jak możecie rozmawiać, aby konwersacja była najbardziej owocna. Chodzi mi tutaj o to, że nie tracicie czasu na tłumaczenie błahostek.

Świetną osobą do konsultacji jest na pewno Twój Team Leader (chyba, że sam nim jesteś to musisz rozmawiać z gumową kaczką 😉). Osoby na tym stanowisku z reguły lubią dzielić się wiedzą i bardzo chętnie Ci pomogą rozwiązać Twój problem.

Jeżeli nawet oboje nie macie pomysłu na rozwiązanie problemu, to „burza mózgów” jest super efektem. Potrafi to doprowadzić do rozwiązań, których samemu by się nie wymyśliło.

Oczywiście czasami możecie napotkać sytuację, że druga osoba odradzi Ci jakieś podejście, bo ona miała kiedyś z tym problemu. W takiej sytuacji staraj się wypytać dokładnie: dlaczego? Wprawdzie nie zapamiętasz tego tak dobrze jakbyś sam zetknął się z tym problemem, ale jeżeli będziesz posiadał dużo informacji, to w głowie coś Ci zostanie.

Nauka poprzez projekt open source

Kolejnym sposobem na zdobywanie wiedzy poprzez rozwiązywanie realnych problemów są różnego rodzaju projekty open source.

W sieci jest od groma takich projektów, każdy może znaleźć coś dla siebie i próbować swoich sił. Realizowanie zadań odbywa się z reguły na prostych zasadach:

  • wybierasz sobie zadanie do implementacji,
  • realizujesz,
  • oddajesz kod do repozytorium,
  • ktoś zatwierdza zmiany albo wysyła Ci sugestie,
  • wprowadzasz ewentualne poprawki i oddajesz kod.

Proces jak widzisz nie jest skomplikowany. Szczególnie na etapie otrzymywania sugestii można się sporo nauczyć, nie mówiąc już oczywiście o samodzielnym zrealizowaniu zadania.

Dużym plusem tego podejścia jest, to że można nauczyć się różnych technologii, o których istnieniu się czasami nawet nie wiedziało. Można podglądnąć kod innych osób, aby sprawdzić jak oni sobie radzili z jakimiś problemami albo jakie np. wzorce stosują. Co się sprawdza, a co nie.

Niestety tego typu projekty mają też minusy. Na początku trudno znaleźć coś idealnie dopasowanego do siebie. Wątpliwe jest, że znajdziesz projekt, który odpowiada Ci w 100%. Następnie, podświadomie lub z lenistwa, możemy unikać zadań trudnych i wybierać tylko te łatwiejsze.

Zagrożeniem może również być, to że tak naprawdę nie wiemy kto sprawdza nasz kod. Czy ta osoba jest kompetentna, czy jej uwagi będą wartościowe i można na nich polegać, czy nie. Kod w repozytorium również może nie być najwyżej jakości.

Tego niestety nie unikniemy, ale w większych projektach open source, raczej można zaufać społeczności i prawdopodobieństwo otrzymania wartościowego feedbacku jest znacznie większe niż otrzymanie złego.

Nauka z książek

Książki należą raczej do kategorii wiedzy teoretycznej, gdyż – przynajmniej według mnie – przedstawiają wszystko w pozytywnym świetle (wszystko działa). Nie spotkasz tam opisów problemów, tylko działające rozwiązania.

Nie zmienia to jednak faktu, że książki to prawdziwe źródło wiedzy (część książek wartych przeczytania polecam w czytelni), nie ma chyba osoby, która by się z tym nie zgadzała. W książkach można znaleźć wszystko, jak powiedział Will Smith „…there have been gazillions of people that have lived before all of us. There’s no new problem you could have–with your parents, with school, with a bully. There’s no new problem that someone hasn’t already had and written about it in a book.” (link). Co prawda nie odnosiło się to do książek technicznych, ale częściowo można to podciągnąć pod tą kategorię.

Książki mają tą korzyść, że wszystko na dany temat jest zebrane w jednym miejscu, w dodatku z przykładami. Warto mieć taką pomoc pod ręką, szczególnie jak wchodzimy w jakąś technologię. Osobiście preferuję książki w formacie pdf, niżeli papierowe, ponieważ łatwiej w nich coś wyszukać i nie zajmują miejsca (w sensie… sam wiesz jakim).

Istnieje kilka zagrożeń przy korzystaniu z książek. Na początku, nie każda książka jest dobra, trzeba zapoznać się z opiniami o publikacji, aby nie wyrabiać sobie złych nawyków czytając brednie. Chyba, że mowa o znanych autorach np. Wujek Bob (np. Czysty kod), wtedy można brać w ciemno 😉.

Kolejnym minusem jest, to że treść w książkach technicznych z czasem się dezaktualizuje, przez co książki kilkuletnie czasami już się do niczego nie nadają. Oczywiście nie wszystkie, ale książka o konkretnej technologii np. EF jest już mocno nieaktualna po kilku latach.

Jako ostatni drobny minus dodałbym, to że czasami w książkach zdarzają się błędy, które nie są na bieżąco poprawiane (co jest logiczne, gdyż kolejnych wersji książek nie wydaje się co miesiąc). Są to jednak sporadyczne sytuacje.

Wiedza z blogów tematycznych

Kolejną kategorią są blogi tematyczne. Blogi są dobrym pomysłem na początek, gdyż dużo osób chętnie dzieli się wiedzą w sposób przystępny dla początkujących np. w postaci przewodników “krok po kroku”. Początkujący łatwiej nabędzie wiedzę realizując taki tutorial niżeli miałby się tego dowiedzieć z książki (książka porusza temat bardzo dokładnie).

Blogi są też nieocenioną pomocą przy rozwiązywaniu codziennych problemów w realnych projektach. Jeżeli jakiś problem jest dosyć popularny to znajdziesz wpis na jakimś blogu przedstawiający rozwiązanie.

Dużym plusem blogów jest, to że można z nich dowiedzieć się o nowościach w danej dziedzinie. Praktycznie każdego dnia możesz dowiedzieć się czegoś nowego. W przypadku książki musiałbyś czekać aż ktoś taką książkę napisze i wyda.

Oczywiście zdarzają się blogi, które przekazują błędne informacje (niekoniecznie umyślnie), jednak tutaj wchodzi do gry społeczność, która na pewno takie błędy wytknie. Autor może zawsze edytować wpis, przez co sytuacja, że błąd wisi kilka miesięcy/lat (jak w książkach) nie zachodzi. Dodatkowo jak czegoś nie rozumiesz, to zawsze możesz zadać pytanie. Autor prawdopodobnie udzieli Ci wyczerpującej odpowiedzi.

Rozwiązania z for internetowych

Kategorią podobną do poprzedniej są fora tematyczne. Umieściłem je pod blogami, gdyż uważam, że bardzo łatwo się zapędzić korzystając z takich stron.

Owszem, fora umożliwiają bardzo szybkie rozwiązanie problemu, ale nie zawsze (nawet rzadziej niż częściej) udzielona nam odpowiedź będzie prawidłowa. Na takich forach może wypowiadać się każdy, w dodatku anonimowo, co jest zupełną odwrotnością bloga. Jeżeli nie podpisujemy się pod czymś swoim nazwiskiem, to też nie przykładamy takiej uwagi do treści (oczywiście nie zawsze).

Oczywiście, można znać jakieś osoby i wiedzieć, że odpowiedź przez nich udzielona jest właściwa. W ocenie mogą pomóc różnego rodzaju systemy reputacji itd. Nie zwalnia to jednak z myślenia przy spisywaniu rozwiązania.

Jako minus takich for przytoczę dwa przykłady. Pierwszym będzie taki, z którym na pewno się spotkałeś. Ile razy w kodzie produkcyjnym znalazłeś kawałek kodu, który nie wiadomo co robił, a przed nim był link do stackoverflow? No właśnie. Bezmyślne kopiowanie.

Nie byłoby to może jeszcze takie złe, jeżeli nie fakt, że kopiowane odpowiedzi czasami są karygodne. Zdarzyło mi się znaleźć pod pytaniem (również na stackoverflow) odpowiedź (najwyżej punktowaną), która rozwiązywała problem, ale wprowadzała krytyczną lukę bezpieczeństwa.

Także, korzystaj, ale uważaj.

Konferencje / wykłady

Zbliżamy się powoli do końca. Kolejnym sposobem na zdobywanie wiedzy są konferencje i wykłady. Wykłady dobrze znamy z chociażby studiów, wiemy więc też, że z takich wykładów dużo się nie nauczymy 😉. Wiedza wykładowców jest bardzo nieaktualna, szczególnie jeżeli chodzi o strefę IT. Oprócz tego, że nie aktualna to czysto teoretyczna. Jak dla mnie uczenia się programowania z wykładów całkowicie mija się z celem.

Z drugiej strony mamy konferencje. Konferencje można znaleźć praktycznie każdego dnia w Polsce. Jedne mniejsze, drugie większe. Do tego dochodzą również spotkania zza granicą. Generalnie, też trzeba dobrze trafić, aby coś wartościowego z tego wynieść. Na tych większych spotkaniach do wyboru mamy zazwyczaj kilka ścieżek, więc każdy coś dla siebie znajdzie.

W odróżnieniu od wykładów, wykładowcami tutaj są osoby, które codziennie pracują w prezentowanej technologii. Można więc uznać, że ich wiedza jest bardzo aktualna. Dodatkowo często wyłapiemy ciekawe rozwiązania czy tzw. hacki.

Zwyczajem jest, że firmy ogłaszają nowości na takich właśnie spotkaniach. Więc jest to idealne miejsce do wyłapania ciekawych perełek, których jeszcze nikt nigdzie w Internecie nie opisał.

Nauka poprzez kurs wideo

Ostatnim już sposobem przeze mnie opisanym są kursy wideo. Jest on na końcu listy, gdyż uważam, że jest to najgorszy z możliwych sposobów zdobywania wiedzy. Na popularnej platformie Udemy jest tego pełno. O ile takie kursy mają sens w np. grafice (sam korzystałem, polecam), muzyce itp. to w przypadku programowania się nie sprawdzają.

Dlaczego się nie sprawdzają? Otóż stosunek czasu do wiedzy jest tutaj bardzo mały. Często się zdarza, że przez połowę odcinka autor gada jakieś pierdoły, mówi o czymś banalnym, pomijając coś ważnego. Oglądamy, jak klepie ten kod w tempie ślimaka i opowiada, to jest klasa… ble ble ble. Mnie to odrzuca. Nawet nie wiadomo, gdzie przewinąć odcinek, aby w końcu było coś ciekawego. Flaki z olejem.

Oczywiście nie każdy kurs jest taki, spotkałem się z dosyć ciekawymi, ale większość tych słabych zniechęciła mnie totalnie do tego rodzaju nauki.

Podsumowanie

Uff… dotarliśmy do końca. Trochę tego było. Jak widzisz sposobów nauki jest dużo, ja też nie wymieniłem wszystkich. Wszystkie mają wady i zalety, ale to tak naprawdę nie jest najważniejsze. Najważniejsze jest to, aby coś robić, jeżeli jeden sposób Ci odpowiada i przynosi efekty, to się go trzymaj. Nie każdy musi być taki sam i nie jest. Coś co odpowiada mi nie będzie odpowiadało Tobie i vice versa. Nie jest to jednak wymówką do braku eksperymentów, może a nóż coś Ci się spodoba?

Dzięki za przeczytanie i być może spotkamy się kiedyś na jakiejś konferencji!

Pozdro!

Patryk Bogdański

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.