Nauka programowania od podstaw: przewiduj, zanim uruchomisz

Krótka odpowiedź

Żeby opanować pojęcia programistyczne, przewiduj, co zrobi dany fragment kodu, zanim go uruchomisz, a potem wyjaśnij każde zaskoczenie. Śledź zmienne ręcznie, po kilku dniach pisz małe programy od nowa z pamięci i mieszaj rodzaje zadań. Oglądanie i kopiowanie kodu daje oswojenie, a przewidywanie i tworzenie daje zrozumienie.

Tytuł Nauka programowania od podstaw: przewiduj, zanim uruchomisz na spokojnym, monochromatycznym wzorze

Wielu początkujących spędza tygodnie na tutorialach, kiwa głową, a potem nie wie, co napisać w pustym edytorze. Nazywa się to czasem tutorial hell i ma prostą przyczynę. Podążanie za tutorialem wymaga rozpoznawania kodu, a pisanie programu wymaga jego tworzenia. Jeśli nauka programowania od podstaw ma ci się przydać na egzaminie i w projekcie, ćwiczenia muszą przypominać tworzenie.

Ten poradnik jest dla studentów pierwszego lub drugiego kursu programowania oraz dla samouków. Przykłady są w Pythonie, ale każda technika działa w dowolnym języku. Dostaniesz pętlę przewiduj-uruchom, metodę śledzenia kodu, format fiszek na pojęcia i plan tygodnia.

Dlaczego tutoriale programistyczne nie zostają w pamięci?

Tutoriale podejmują za ciebie każdą decyzję, więc nigdy nie ćwiczysz najtrudniejszego: wyboru, co napisać dalej. Kod, który już widziałeś, wydaje się później znajomy, co przypomina wiedzę, ale jest tylko rozpoznawaniem. Przypominanie i przewidywanie budują model mentalny, którego da się używać.

Porównanie biernego oglądania tutoriali i aktywnej praktyki kodowania w czterech nawykach

Tutoriale nadal mają sens. Użyj ich, żeby poznać nowy pomysł. Potem zamknij film i odtwórz to, co zobaczyłeś, w pustym pliku. To, czego nie umiesz odtworzyć, jest właśnie tym, czego trzeba się uczyć.

Jak w nauce programowania od podstaw uczyć się pojęć, a nie samej składni?

Skup się na tym, co kod robi w pamięci: na co wskazuje każda zmienna, jak zmieniają się wartości i kiedy. Przewiduj wynik krótkich fragmentów przed uruchomieniem i zapisuj, dlaczego przewidywanie okazało się błędne. Składnia przychodzi z użyciem, a pojęcia wymagają celowej praktyki.

Podstawowy nawyk to pętla czterech kroków. Zajmuje sekundy na fragment i zamienia każdy przykład z kursu w ćwiczenie.

Czterokrokowa pętla nauki kodu: przeczytaj, przewiduj, uruchom, wyjaśnij różnicę

Spróbuj teraz. W Pythonie ustaw a = [1, 2, 3], potem b = a, potem wywołaj b.append(4), a na końcu print(a). Zanim przeczytasz dalej, przewidź wynik. Wielu początkujących mówi [1, 2, 3]. Prawdziwy wynik to [1, 2, 3, 4], bo b = a nie kopiuje listy; obie nazwy wskazują tę samą listę. To jedno zaskoczenie uczy o działaniu zmiennych więcej niż strona wyjaśnień. Oficjalny tutorial Pythona jest pełen krótkich fragmentów, które możesz wykorzystać w ten sam sposób.

Czym jest śledzenie kodu i dlaczego pomaga?

Śledzenie polega na przejściu przez kod ręcznie i zapisaniu wartości każdej zmiennej po każdej linii. Zmusza cię do symulowania komputera, a właśnie na tym modelu mentalnym opiera się pisanie i debugowanie. To także częsty format pytań egzaminacyjnych.

Tabela śledzenia pętli w Pythonie, która dodaje 2, 4 i 6 do bieżącej sumy, z sumą po każdym kroku
Kod: total = 0, potem for n in [2, 4, 6]: total += n

Ostatni wiersz skrywa szczegół, który często pojawia się na egzaminach: w Pythonie zmienna pętli zachowuje ostatnią wartość także po zakończeniu pętli. Zauważysz to dopiero, gdy zapiszesz każdy wiersz. Co tydzień śledź kilka pętli, instrukcji warunkowych i wywołań funkcji, zwłaszcza w tematach trudnych do wyobrażenia, jak rekurencja.

Jak zapamiętać pojęcia programistyczne na długo?

Kilka dni po pierwszej nauce pisz małe programy od nowa z pamięci i prowadź talię fiszek z pojęciami, które pytają dlaczego, a nie tylko co. Powtarzane przypominanie rozłożone na dni sprawia, że pojęcia pozostają dostępne; jedna udana próba nie wystarczy.

Badania nad pamięcią to potwierdzają. W jednym eksperymencie studenci, którzy po pierwszej poprawnej odpowiedzi nadal przypominali sobie materiał, tydzień później pamiętali około 80 procent, a ci, którzy przestali po jednym sukcesie, około 35 procent, jak opisują Karpicke i współpracownicy. W kodzie odpowiada temu napisanie wyszukiwania binarnego albo definicji klasy od zera w poniedziałek, w czwartek i znów za tydzień. Pełną metodę znajdziesz w tekstach o aktywnym przypominaniu i powtórkach rozłożonych w czasie.

Przykładowa fiszka programistyczna z pytaniem o różnicę między listą a krotką w Pythonie i o to, kiedy używać której
Zamień stronę dokumentacji w pytania o pojęcia, nie opuszczając karty.

Czy tłumaczenie kodu na głos naprawdę pomaga?

Tak. Wyjaśnianie każdej linii prostymi słowami, koledze z roku albo nawet gumowej kaczuszce na biurku, ujawnia kroki, które pomijałeś. Jeśli nie umiesz powiedzieć, po co jest dana linia, to znaczy, że znalazłeś pojęcie do nauki.

Programiści nazywają to rubber duck debugging, a badacze uczenia się ten ogólny nawyk nazywają samowyjaśnianiem. Idea jest ta sama: ubranie rozumowania w słowa zmusza do uzupełnienia luk, które pomija ciche czytanie. Gdy uczysz się z rozwiązanego przykładu, zatrzymuj się po każdym bloku i powiedz, co robi i dlaczego autor wybrał to zamiast alternatywy.

To jeden z najtańszych sposobów na głębokie zrozumienie pojęć programistycznych, bo działa na dowolnym kodzie, jaki spotkasz: na przykładach z kursu, dokumentacji biblioteki czy projekcie kolegi. Połącz to z pętlą przewidywania, a większość nieporozumień wyłapiesz na długo, zanim staną się błędami w zadaniu.

Czy warto mieszać różne rodzaje zadań programistycznych?

Tak. Gdy temat wydaje się już znajomy, mieszaj zadania z kilku tematów, żeby musieć zdecydować, które narzędzie pasuje: pętla czy rekurencja, lista czy słownik. Tego wyboru wymagają prawdziwe problemy i egzaminy.

W badaniu z matematyki wśród 787 siódmoklasistów uczniowie, którzy ćwiczyli mieszane typy zadań, uzyskali w niezapowiedzianym teście 61 procent, a ci, którzy ćwiczyli po jednym typie naraz, 38 procent, według randomizowanego badania finansowanego przez Institute of Education Sciences. Programowanie ma tę samą trudność wyboru metody. Zbuduj niewielki zbiór zadań, oznacz każde tematem i w każdej sesji losuj z kilku tematów. Jak to robić, pokazuje nasz poradnik o nauce przeplatanej.

Plan tygodnia na kursie programowania

Poznaj pojęcie na wykładzie lub w tutorialu, tego samego dnia przepuść jego przykłady przez pętlę przewidywania, w środku tygodnia napisz od zera mały program, a tydzień zakończ mieszanym zestawem zadań i odtworzeniem z pamięci zeszłotygodniowego programu.

  1. Dzień 1: Przewidź i uruchom każdy przykład z wykładu.
  2. Dzień 2: Prześledź ręcznie dwa fragmenty, w tym jeden z wywołaniem funkcji.
  3. Dzień 3: Napisz mały program używający tego pojęcia, nie patrząc na przykłady.
  4. Dzień 5: Mieszane zadania z tego tygodnia i wcześniejszych.
  5. Dzień 7: Odtwórz z pamięci zeszłotygodniowy program, a potem porównaj.

Prowadź obok dziennik błędów. Przy każdym błędzie zapisz objaw, przyczynę i pojęcie, które źle zrozumiałeś. Po kilku tygodniach powstanie osobista lista słabych punktów, podobna do metody zeszytu błędów stosowanej na matematyce i przedmiotach ścisłych. Więcej poradników przedmiotowych zaczyna się od tekstu jak uczyć się przedmiotów przyrodniczych.

Najczęściej zadawane pytania

Ile trwa nauka pojęć programistycznych?

Podstawy, takie jak zmienne, pętle, instrukcje warunkowe i funkcje, zwykle wymagają kilku tygodni regularnej praktyki, żeby stały się naturalne. Głębsze idee, jak rekurencja czy projektowanie obiektowe, zajmują więcej czasu i poprawiają się z każdym projektem. Regularne krótkie sesje liczą się bardziej niż łączna liczba godzin.

Czy uczyć się kilku języków programowania naraz?

Na początku zwykle nie. Pojęcia przenoszą się między językami, ale nauka dwóch składni naraz podwaja liczbę szczegółów. Najpierw oswój jeden język, a drugi pójdzie znacznie szybciej.

Czy podczas nauki można używać AI do pisania kodu?

Używaj go do wyjaśniania kodu albo sprawdzania rozumowania po własnej próbie. Jeśli AI napisze rozwiązanie pierwsze, pomijasz ćwiczenie, które buduje umiejętność. Dobra zasada: najpierw przewidź albo napisz własną wersję, potem porównaj.

Jak uczyć się do egzaminu z programowania na papierze?

Ćwicz śledzenie i pisanie kodu ręcznie, bo taki jest format egzaminu. Mierz czas na krótkich funkcjach bez edytora, a potem sprawdzaj je, uruchamiając. Zwracaj uwagę na błędy o jeden i granice pętli.

Źródła

  1. The Python Tutorial, Python Software Foundation (Oficjalny tutorial z krótkimi przykładami kodu dobrymi do ćwiczenia metodą przewiduj-uruchom.)
  2. Metacognitive strategies in student learning: Do students practise retrieval when they study on their own?, Memory (Karpicke, Butler and Roediger, 2009) (Powtarzane przypominanie po pierwszym sukcesie dało około 80% zapamiętania po tygodniu, wobec około 35%, gdy elementy odrzucano.)
  3. Efficacy Study of Interleaved Mathematics Practice, Institute of Education Sciences, U.S. Department of Education (787 uczniów klasy 7; ćwiczenie przeplatane 61 procent wobec 38 procent w niezapowiedzianym teście.)