Do powszechnej świadomości weszło przekonanie, że opanowanie umiejętności do mistrzostwa wymaga poświęcania magicznej liczby 10 tysięcy godzin. Prosta matematyka, wystarczy zainwestować „jedynie” trzy godziny dziennie przez okres 9 lat i będziemy zbijali piąteczki z Maciejem Aniserowiczem. Jak przekonuje Peter C. Brown w swojej książce Peak: Secrets from the New Science of Expertise sprawa wcale nie jest taka prosta. Osiągnięcie biegłości to nie tylko kwestia poświęcenia odpowiedniej ilości czasu. O tym czy i kiedy uda nam się dotrzeć na linię mety, decyduje przede wszystkim przemyślana praktyka. To właśnie ona pozwala na utrwalenie niezbędnej wiedzy.
Uwaga: bogaty w dwa lata doświadczenia napisałem nową wersję tego artykułu: „Poznaj metodę, która odmieni Twoją naukę programowania”. Jest dostępna wraz z poradnikiem video na stronie przeprogramowani.pl.
Nauka programowania, scenariusz tradycyjny
Niezależnie czy zdecydujemy na studia, bootcamp czy samodzielną naukę – będziemy musieli przyswoić bardzo dużą ilości informacji. Przypuśćmy, że ktoś doradził nam przeczytanie książki X, więc to na niej opieramy swoje starania.
Spędzamy przy niej kolejne 20-30 godzin wolnego czasu, uważnie czytamy materiał, przeklepujemy przykłady do konsoli. O ile natrafiliśmy na publikację, która oferuje coś więcej niż suchą teorię to sumiennie wykonujemy zadania domowe do każdego z rozdziałów. Przeczytana książka wraca na półkę, a my jesteśmy zadowoleni z naszego sumiennego podejścia. To musi się udać.
Mija tydzień, a dopiero co zdobyta wiedza, zaczyna się skrywać się za swego rodzaju mgłą. Coś tam kojarzymy, ale w głowie pojawia się niepokój. Co raz trudniej przywołać nam nowo poznane definicje, metody czy wzorce projektowe. Z każdym dniem wiedza stopniowo ulatuje z naszej głowy. Zjawisko, z jakim mamy do czynienia podczas tradycyjnej nauki, to iluzja kompetencji. Kiedy masowo wprowadzamy do naszej głowy nowe informacje, początkowo wydaje się nam, że zostaną one z nami na zawsze. W końcu rozumiemy czytany materiał, a wszystko wydaje się takie proste i oczywiste. Niestety, wystarczy kilkanaście dni i ani po nich śladu. Więcej na ten temat w wpisie Justyny Falkowskiej – Uwaga! Wilk w owczej skórze.
Czyżbyśmy faktycznie byli skazani na kilkanaście tysięcy godzin prób wbicia sobie do głowy tych samych informacji?
Otóż nie. Istnieje skuteczny sposób na zapamiętanie wiedzy teoretycznej – wszystkich metod, komend, parametrów, rozwiązań do najpopularniejszych problemów. Możesz mieć to wszystko do dyspozycji w własnej głowie, gotowe do użycia bez zaglądania do materiałów pomocniczych.
Spokojnie, nie będę zachęcał nikogo do budowania pałacu pamięci, układania historyjek czy wymyślania piosenek. Aby otrzymać oczekiwane rezultaty, wystarczy zrozumieć jak naprawdę działa nasza pamięć.
Pamięć absolutna #MadeInPoland
Problem optymalnego zapamiętywania doczekał się dużego zainteresowania ze strony naukowców już czterdzieści lat temu. Wynikało to ze znacznych postępów w dziedzinie neurologii. Duży wkład w rozwój tej dziedziny wiedzy miał nasz rodak, Dr Piotr Woźniak. Jego dysertacja była poświęcona naszym dzisiejszym rozważaniom – ekonomicznej nauce. Dr Woźniak jest magistrem biologii oraz informatyki, a jego badania były wypadkową połączenia tych dwóch dziedzin. Skupił się w nich na opracowaniu algorytmu, który pozwoliłby na oszacowanie po jakim czasie musimy powtórzyć daną informację, aby utrzymać ją w pamięci.
Własnie na tym algorytmie oparty jest zaprezentowany wykres. W momencie zapamiętania informacji mamy stuprocentową szansę na jej ponowne przywołanie. Z upływem każdej godziny, zgodnie z krzywą zapominania, nasze szanse zaczynają spadać. W końcu nadchodzi moment, w którym zapominamy kompletnie coś, co jeszcze kilka dni temu było tak łatwo dostępne. Przed takim rozwojem wydarzeń możemy ratować się, powtarzając daną informację, kiedy nasza szansa na jej przywołanie wynosi około 90%. Wydłużamy w ten sposób czas, na który pełna informacja pozostanie w naszej pamięci. Jednocześnie nie tracimy czasu na ciagłe wbijanie sobie na oślep wszystkich informacji. Jest to całkowicie niepraktyczne, jeżeli zależy nam na czymś więcej niż utrzymaniu wiedzy do momentu oddania egzaminu w ręce profesora.
Dr Woźniak podczas badań zauważył, że powtarzanie informacji poprzez czytanie notatek nie daje najlepszych rezultatów. Ciężko rozróżnić, czy udało się nam coś zapamiętać czy właśnie padliśmy ofiarą iluzji kompetencji. Znacznie lepsze efekty przynosi testowanie samego siebie. Jest to mechanizm dobrze znany z fiszek, które są popularne podczas nauki języków obcych. Każdy kto z nich korzysta, wie o ile skuteczniejsze są od tradycyjnego wkuwania słówek. Jednakże, ich zasadniczą wadą jest, że zajmują dużo miejsca i ciężko ocenić, które z nich powinniśmy powtarzać danego dnia. W końcu zapamiętanie części materiału przychodzi nam z łatwością, podczas gdy niektóre z zagadnień nie chcą zagościć w naszej głowie na dłużej za żadne skarby.
Aby pozbyć się tych problemów, dr Woźniak wraz z współpracownikami przygotowali SuperMemo – program, który pozwala na tworzenie cyfrowych fiszek. Zgodnie z wcześniej przytoczony algorytmem przygotowuje dla nas te karty, które wymagają powtórki danego dnia. W ten sposób możemy utrzymać cały zasób wiedzy w naszej pamięci, jednocześnie poświęcając na to możliwie najmniejszą ilość czasu. Tym są właśnie interwałowe powtórki (ang. spaced repetition).
Oprogramowanie do interwałowych powtórek
SuperMemo jest oprogramowaniem płatnym, na szczęście pojawiła się open-source’owej konkurencja – Anki. Mamy do dyspozycji darmową aplikację na Windowsa, Maca, Linuxa oraz Androida. Niestety, posiadacze iPhone’ów będą musieli liczyć się z wydatkiem 25 dolarów.
Korzystanie z Anki jest bardzo proste. Każdego dnia Anki przygotowuje dla nas zestaw kart, które znajdują się blisko progu 90% szans na ponowne przywołania informacji. Po rozpoczęciu powtórki zostaje wylosowana jedna z kart. Naszym zadaniem jest udzielić odpowiedzi w myślach, po czym odsłonić kartę. Sprawdzamy czy udało nam się podać właściwą odpowiedź. Następnie musimy ocenić naszą odpowiedź za pomocą przycisków ‚Powtórz’ (pomyłka), ‚Trudno’, ‚Dobrze’, ‚Łatwo’. W zależności od wybranego przycisku, algorytm wyliczy, kiedy po raz kolejny karta pojawi się w naszej talii powtórkowej. Interwały są naprawdę różne. Dla nowych/problematycznych kart jest to kilka godzin/dni. Za to karty, które oznaczamy jako łatwe od kilku powtórek możemy wysłać na kilkanaście miesięcy wakacji. Skutecznosć algorytmu jest zależna od naszej szczerości wobec samych siebie. Nie ma miejsca na wstyd związany z błędną odpowiedzią nawet na najprostsze z pytań.
Dlaczego interwałowe powtórki są tak skuteczne?
Nie będę się rozwodził nad naukowymi dowodami na skuteczność interwałowych powtórek. Można poczytać o nich w obszernym artykule Spaced repetition – efficient memorization using the spacing effect: literature review of widespread applicability, tips on use & what it’s good for. Znajdziecie w nim dziesiątki badań naukowych wraz z przystepnym opisem. Po przeczytaniu całości, nikt nie powinien mieć najmniejszych wątpliwości czy Anki to gra warta świeczki.
Anki przyspieszają proces pisania kodu. Im więcej pamiętasz, tym mniej musisz zaglądać do dokumentacji i książek. Pamiętasz rozwiązanie podobnego problemu, więc nie tracisz czasu na rozwiązywanie go od nowa. Jako że w Twojej głowie znajduje się cała baza takich rozwiązań, widzisz coraz ciekawsze możliwości architektoniczne i kreatywność Twoich rozwiązań rośnie.
Kreatywność jest definiowana przez wielu psychologów jako umiejętność tworzenia niedostrzegalnych na pierwszy rzut oka połączeń pomiędzy pozornie niezwiązanymi dziedzinami. Mając to na uwadze, warto umieścić wszystkie karty w jednej talii. Dzięki temu podczas powtórek będziemy odpytywani z najróżniejszych dziedzin, co prowokuje powstawanie kreatywnych połączeń pomiędzy różnymi dziedzinami wiedzy. Taka stymulacja umysłu jest na ogół niedostępna podczas tradycyjnej nauki, która wymusza na nas skupianie się na jednej dziedzinie podczas danej sesji.
Interwałowe powtórki są nie tylko świetnym sposobem na systematyczne utrwalanie wiedzy, ale dodatkowo wymuszają restrukturyzację wiedzy do prostych pytań i odpowiedzi. Zgodnie z założeniem techniki Richarda Feynmana, jasno sformułowana wiedza to klucz do nawet najbardziej skomplikowanych zagadnień. Na kartach nie ma ma miejsca na wywody ani pokrętne i niezrozumiałe definicje.
Jedną z największych zalet Anki jest stały dostęp do CAŁEJ naszej wiedzy. Jeżeli coś wyleci nam z głowy, możemy sprawnie przeszukiwać repozytorium kart i znaleźć odpowiedź. Zaoszczędzimy dużo czasu, który poświecamy każdego dnia podczas odwiedzin na StackOverflow i MDN.
Nasza wiedza cały czas rośnie, poszerza się zrozumienie danej tematyki, więc powinniśmy dbać to, żeby nasza podręczna biblioteka to odzwierciedlała. Nic nie stoi na przeszkodzie, żeby na bieżąco aktualizować stare karty. Podczas ich analizowania, często wpadają mi do głowy pomysły na utworzenie nowych kart, które są bardziej precyzyjne i wyrafinowane. Nasza kolekcja kart ewoluuje razem z naszym umysłem. Daje to głębokie poczucie satysfakcji, na własne oczy widzimy, że robimy postępy.
Anki pozwala efektywniej uczyć się na własnych błędach. Każdy dobrze wie, że naprawianie bugów zajmuje czasami długie godziny cieżkiej pracy. Po uporaniu się z problemem warto stworzyć karty, dzięki którym zapamiętasz, co doprowadziło błędu i sposoby jego naprawy. W przeciwnym razie dokładnie ten sam bug może wkraść się do kolejnego z Twoich programów, a Ty zmarnujesz dużą ilość czasu na ponowne wypracowanie rozwiązania. Rozwiązania, które już raz miałeś przed oczami.
Jakie są wady korzystania z Anki?
Czy jest to metoda pozbawiona słabych stron? Prawie.
Do głowy przychodzi mi jeden zasadniczy mankament. Jeżeli chcemy cieszyć się wszystkimi wymienionymi powyżej zaletami, musimy korzystać z Anki codziennie. Weekendowe korzystanie z tego systemu nie przyniesie żadnych rezultatów. Na szczęście, programiści to bardzo często osoby dobrze zorganizowane. Wierzę, że dacie radę :).
Na dzień dzisiejszy moja kolekcja składa się z 1463 kart. Codzienna powtórka zajmuje mi średnio 23,8 minut (Anki udostępnia dokładne statystyki dotyczące naszej pracy). Powtórki wykonuję za pomocą aplikacji mobilnej przez co mam dowolność co do pory dnia i miejsca, w którym się za to zabiorę. Przerwa pomiędzy zajęciami na uczelni, jazda autobusem do domu, oczekiwanie na spóźnionego znajomego, kolejka w sklepie czy do lekarza – bez różnicy. Możemy zrobić użytek z czasu, który i tak przecieka nam przez palce. Moim zdaniem jest to jedna z inwestycji, która ma niewymiernie większy zwrot niż wkład.
Warto wspomnieć o drugiej „wadzie” tego systemu. Nie wynika ona z samej metody czy oprogramowania Anki, a tego jak działa ludzka pamięć. Mianowicie, korzystanie z cudzych talii nie przynosi dobrych wyników. Po pierwsze, nie jesteś w stanie zapamiętać czegoś, czego nie rozumiesz. Po drugie, część wiedzy może być Ci kompletnie niepotrzebna. Po co spędzać czas na zapamiętywaniu wiedzy, której nigdy nie zastosujesz w praktyce. Po trzecie, nie wyrobisz sobie nawyku tworzenia kart w momencie zdobycia nowej wiedzy.
Podsumowanie
Bloger Jack Kinsella twierdzi, że codzienne powtórki pozwalają na osiągnięcie sprawności w wybranej dziedzinie informatyki w przeciągu 12 miesięcy. To on, jako jeden z pierwszych zauważył, że Anki świetnie sprawdzają się podczas nauki programowania. To właśnie jego wpisy stanowiły dla mnie nieocenione źródło informacji, kiedy zacząłem korzystać z Anki w czerwcu tego roku. Jako że minęło zaledwie kilka miesięcy, to ciężko mi ocenić czy korzystanie z Anki jest, aż tak efektywne. Póki co cieszę sie z niesamowitych rezultatów i uważam tę metodę za największe odkrycie tego roku.
Jeżeli pojawią się zainteresowani, to mogę przygotować dla kompilację rad, które pomogą Wam wycisnąć z Anki możliwie jak najwięcej. Jestem przekonany, że wiele osób może znacznie poprawić swoje wyniki dzięki wdrożeniu tej metody. Stąd szczególnie zachęcam do udostępniania tego wpisu na mediach społecznościowych. Jeżeli macie jakieś pytania to zachęcam do zadawania ich za pomocą komentarzy.
Mam jeszcze kilka asów w rękawie. Jeżeli nie chcecie, aby cokolwiek Wam umknęło to zapraszam do polubienia strony bloga na facebooku, śledzenia mnie na Twitterze oraz zaglądania na Polski Front-end.
W przyszłym tygodniu wracamy do powtórki przed ReactJS – zabierzemy się za zakresy. Nie mam zamiaru tracić czasu na prezentowanie deklarowania zmiennych i funkcji, skupimy się na omówieniu ciekawych i wymagających przykładów, które często pojawiają się na rozmowach kwalifikacyjnych.
Dodatkowe materiały
- AlgoSmart deck. – cała moja kolekcja kart Anki. Na dzień 26/02/2018 liczy przeszło 2200 kart. Jeżeli nie chcesz zaczynać od zera, to zachęcam do pobrania.
- Want to remember everything you’ll ever learn? Surrennder to this Algorithm. – wywiad magazynu Wired z bohaterem dzisiejszego wpisu, dr. Piotrem Woźniakiem. Jest to postać niesamowicie ekscentryczna, warto przeczytać.
- Janki Method, Jack Kinsella – wpis pełen wartościowych rad dotyczących nauki programowania z użyciem Anki.
- Głowa do liczb, dr Barbara Oakley – niesamowita książka o tym, jak się uczyć przedmiotów ścisłych (i nie tylko).
Zdjęcie tytułowe autorstwa: Redd Angelo