Anki w nauce terminala, edytorów i programowania

Anki to popularny, darmowy program do nauki języków obcych metodą spaced repetition, czyli „fiszek”. W dużym skrócie, to takie „karty” do nauki, po jednej stronie mamy słowo po polsku, po drugiej po angielsku. Oglądamy jedną stronę, szukamy w głowie odpowiedzi, potem patrzymy na drugą stronę i sprawdzamy, czy odpowiedzieliśmy dobrze.

Czy taka metoda nauki dobrze sprawdzi się do nauki programowania?

Używam Anki od 15 lat i uważam, że bardzo pomaga w językach obcych, ale do niedawna byłem sceptyczny co do zastosowania na innych polach. Mimo że czytałem o ludziach używających programu do nauki matematyki (stąd wbudowana obsługa równań w TeXu) lub przygotowania do egzaminów na studiach medycznych.

Wydawało mi się, że pamięciowe wkuwanie nie ma nic wspólnego z zawodowym programowaniem (szkoda, że przeciwne podejście wciąż zdarza się w kuriozalnych procesach rekrutacji, ale to osobny temat). Tak było do czasu, aż złapałem się, że szukam na własnym blogu, jak wkleić parametr w Zsh, albo zaglądam do notatek, żeby sprawdzić, jak sprawnie przesuwać kursor w vimie. Co mi ze skrótu, jeśli muszę czytać objaśnienia, zanim go użyję? Tak nie może być. Postanowiłem użyć Anki do nauki poleceń, których nie mogę zapamiętać.

Okazało się, że narzędzie sprawdza się dobrze również w nauce ezoterycznych kombinacji klawiszy. Postęp był widoczny szybko: po kilku dniach zacząłem w prawdziwej pracy używać skrótów, które wcześniej omijałem, bo nie mogłem sobie ich przypomnieć. Zapamiętałem też tą metodą zupełnie inne rzeczy.

W dalszej części opowiem krótko, jak skonfigurowałem Anki, oraz trochę więcej o tym, czemu uważam, że to dobre narzędzie do nauki takich skrótów.

Czemu Anki

Wcześniej pisałem, jak dobrym edytorem do Gita jest vim. Używam go w ten sposób często, ale nierzadko omijam konsolę i robię commity z IDE. Vim dobrze edytuje pliki linuksowe, ale konfiguracji systemowej nie zmienia się codziennie. Powstaje problem: używam, ale zbyt nieregularnie, żeby wszystko przećwiczyć.

Podobnie z Zsh: opisywałem w artykule, jak przeklejać parametry. Tyle że takich sztuczek nie używam na tyle często, żeby się zautomatyzowały w palcach.

Co zrobić? Nie trzeba wymyślać na nowo koła. Problem został już dawno zauważony i zaproponowano rozwiązanie (oparte o badania): spaced repetition. A jednym z lepszych narzędzi do spaced repetition jest Anki.

W spaced repetition mamy zbiór rzeczy do nauki. Te, które pamiętamy dobrze, widzimy rzadko. Te, które ciężko sobie przypomnieć, będą pokazywane często. Nie trzeba samemu pamiętać, że dziś wypada powtórzyć dawno niewidziane tematy. Program sam układa harmonogram.

Anki reaguje, gdy czegoś nie jesteśmy w stanie się nauczyć i w kółko się mylimy. Po przekroczeniu określonego progu pomyłek „karta” jest zawieszana. Teraz można podjąć decyzję: odpuścić sobie zupełnie jej naukę, albo zmienić podejście (zmodyfikować opis/wygląd, zrobić ćwiczenia praktyczne w innym narzędziu).

Przydatną funkcją Anki jest pole do wpisania odpowiedzi. Anki robi diff z oczekiwaną odpowiedzią. Nie da się tak sprawdzać dowolnych sekwencji klawiszy (Ctrl+c Ctrl+w odpada), ale pasuje wiele z poleceń vima albo rzeczy wpisywane w konsoli.

wpisujemy odpowiedź w pole
dostajemy diff z prawidłową odpowiedzią

Czego się uczyć

Jest świetny artykuł od SuperMemo, jak konstruować karty do spaced repetition. Zgodnie z nim pytania powinny pozwalać na krótką odpowiedź. Czyli, źle: „opisz różnicę w wydajności między ArrayList a LinkedList”, dobrze: „co jest większe, GiB czy GB?” albo „vim: skrót na słowo do przodu”.

Nie uczę się faktów, których nie muszę szybko przywołać. Żadnych rzeczy typu „która funkcja z biblioteki standardowej pozwoli przeglądać drzewko katalogu” (od tego mam Google) albo „czy metoda X zwraca File czy InputStream” (matko jedyna, po co mi ta wiedza, wpiszę w IDE, to zobaczę, czy kod świeci się na czerwono, czy nie).

Nie zdecydowałem się na razie na uczenie się jakichkolwiek rzeczy z języków programowania. To nie znaczy, że uważam, że Anki nie pasuje to takiego zastosowania. Pewnie największe korzyści będą widoczne przy nauce nowego języka albo technologii (nie mam takich w tym momencie). Polecałbym zwrócenie uwagi na zasady tworzenia dobrych kart (podlinkowane wyżej), uczenie się bardziej zasad (typu priorytet selektorów w CSS) niż wkuwanie nazw funkcji jak książki telefonicznej.

U mnie dodałem trochę skrótów w Zsh i vimie, co do których czuję, że są ważne, mimo że są potrzebne rzadko. Są też całe polecenia w terminalu.

Mam też wiedzę innego typu (powyższe „GiB czy GB”).

Staram się unikać nadmiernego rozrostu talii. Dużo kart to dużo czasu wymaganego na powtarzanie. Dodaję do Anki tylko takie rzeczy, bez których nie mogę żyć. Na przykład, mógłbym otworzyć dokumentację vima i zrobić karty dla pierwszych 50 skrótów, które znajdę. Tyle że pewnie w praktyce większości nigdy bym nie użył. W razie wątpliwości, czy czegoś na pewno potrzebuję, rezygnuję z dodawania kart.

Anki ma aplikacje na systemy mobilne. Korzystam z programu na telefonie, ale nigdy nie powtarzam tam kart z programowania. Chcę wyrabiać sobie pamięć mięśniową do skrótów pisanych na fizycznej klawiaturze, a nie klawiaturze telefonu. Nie będę przecież używał Vima na Androidzie.

Jak ustawić Anki

Rzeczy do nauki organizuje się w „talie”. Mam osobną talię „informatyka”, żeby nie mieszać języków obcych z programowaniem.

To, jak wyglądają karty, zależy od „typu notatki”. Domyślnie dostajemy typ pokazujący z jednej „strony” pytanie, a z drugiej „strony” odpowiedź. Taki wystarcza do zwykłych pytań („GiB czy GB”).

Na screenshotach pokazuję pole do wpisywania odpowiedzi – coś takiego wymaga trochę customizacji. Potrzebny jest osobny typ notatki, gdzie w szablonie karty zamiast {{Odpowiedź}} mamy {{type:Odpowiedź}}. W tutorialach Anki tego rodzaju typ notatki nazywa się zazwyczaj „Type in”. Miałem taki typ gotowy do nauki angielskiego, więc po prostu użyłem go do mojej talii „informatyka”. Dla zainteresowanych: tu dokumentacja type-in krok po kroku.

Anki jest programem zdecydowanie bardziej pod nerdów niż pod sekretarki. Może jest bardziej przyjazny niż vim, ale też nie zrobi wszystkiego za nas. Wiele rzeczy staje się jasne dopiero po przeczytaniu rozdziału dokumentacji. Po instalacji dostajemy program o surowym wyglądzie. Są ogromne możliwości customizacji, ale warto przeglądnąć Internet, żeby podpatrzeć rozwiązania sprawdzone u innych. Da się zacząć używać Anki bez specjalnego przygotowania, ale procentuje poświęcenie czasu na doszkolenie się.

Źródeł jest wiele, są artykuły i nagrania na YouTubie. Również po polsku i dotyczące programowania (na przykład „Jak uczyć się programowania z Anki” na kanale Przeprogramowani, powiązany artykuł proponuje, jak znaleźć czas na powtórki i czego się uczyć). Są nawet płatne kursy pokazujące, jak ustawić Anki pod swoje potrzeby.

Creative Commons License
Except where otherwise noted, the content by Piotr Kubowicz is licensed under a Creative Commons Attribution 4.0 International License.