Etapy kształtowania umiejętności programowania

  1. Nabywanie umiejętności
  2. Świadome stosowanie umiejętności
  3. Etapy kształtowania umiejętności
  4. Stosowanie i integracja umiejętności
  5. Ocena i refleksja
  6. Utrwalenie umiejętności

Proces nauki w IT💡

W dzisiejszych czasach wielu programistów, oprócz swojej podstawowej pracy, zajmuje się tworzeniem treści edukacyjnych, nauczaniem oraz mentoringiem. Nauczanie programowania stało się nowym trendem, co wymaga dużej liczby instruktorów. Jednak problem polega na tym, że programiści często nie potrafią skutecznie uczyć innych ludzi. Mając doświadczenie jako programista w firmie IT-Deweloper oraz jako projektant kursów, chciałbym przedstawić etapy nauki dowolnej nowej umiejętności w programowaniu. Te etapy są uniwersalne i mogą być zastosowane w każdej dziedzinie, ale przykłady w artykule będą dotyczyły programowania.


Nabywanie umiejętności 📚

1.1 Umiejętność

Umiejętność to zdolność do wykonywania określonych działań w celu osiągnięcia zamierzonego wyniku lub rozwiązania problemu. W kontekście programowania, umiejętnością może być zarówno umiejętność programowania jako całość, jak i zdolność do wykonania konkretnej operacji, na przykład deklaracji zmiennej czy znalezienia indeksu elementu w tablicy. W tym przypadku możemy mówić o różnym stopniu złożoności umiejętności. Umiejętność programowania jest bardzo złożoną umiejętnością, składającą się z wielu mniejszych umiejętności. Z kolei umiejętność deklaracji zmiennej to prosta, podstawowa umiejętność, która praktycznie nie wymaga innych umiejętności programistycznych.

Algorytm działań i wiedza

Każda umiejętność wyraża się w jakimś algorytmie działań, który należy wykonać, aby osiągnąć wynik. Na przykład, aby zadeklarować zmienną w JavaScript, trzeba:

Świadome stosowanie umiejętności

Nie trzeba posiadać wszystkich tych umiejętności na wysokim poziomie, aby zadeklarować zmienną. Na przykład, student może po prostu pamiętać, że nauczyciel używał angielskich nazw zmiennych: age, count, res i używać podobnych słów podczas rozwiązywania zadań. Jednak student może nie pamiętać żadnych zasad nazywania zmiennych i w niektórych przypadkach spróbować nazwać zmienne po prostu cyframi. Na przykładzie zmiennej dochodzimy do kwestii świadomości zastosowania umiejętności. Świadomość zastosowania umiejętności to zdolność studenta do powiązania działań związanych z wykonywaniem umiejętności z wiedzą na temat danej dziedziny. Im więcej wiedzy na temat danej dziedziny i im lepiej student ją powiązuje z działaniami, tym wyższa jest świadomość zastosowania umiejętności i poprawność działań. Nauczyciel zawsze powinien pamiętać, że zewnętrznie student może demonstrować posiadanie umiejętności, ale świadomość wykonywanych działań może być niska. Przy zmianie kontekstu zadania taki student może nie poradzić sobie z zastosowaniem umiejętności. Dlatego tak ważne jest nie tylko rozwiązywanie zadań, ale także proszenie studentów o wyjaśnienie procesu rozwiązywania, argumentowanie wykonywanych działań. W takim przypadku lepiej jest rozwiązać mniej zadań, ale dokładniej je przepracować.

Złożone umiejętności

Bardziej złożone umiejętności wymagają większej liczby działań w algorytmie, większej zmienności tych działań oraz większej wiedzy o danej dziedzinie, aby wybrać odpowiednie działania. Na przykład, przy tworzeniu prostego programu, takiego jak ToDo List, student musi nie tylko świadomie pisać kod, ale również organizować swoją pracę, dzielić ją na etapy i myśleć kilka kroków do przodu. Często pojawia się problem, że studenci nie wiedzą, od czego zacząć i jak ustalić kolejność kroków prowadzących do wyniku. W takich przypadkach nieoceniony jest live coding, gdy nauczyciel na żywo pokazuje, jak z niczego powstaje program.

Etapy kształtowania umiejętności

Przekazywanie wiedzy 📖

Najpierw przekazujemy studentowi niezbędną wiedzę i pokazujemy, jak wykonać algorytm działań, aby osiągnąć wynik. Fakt, że przekazaliśmy studentom wiedzę, nie oznacza jeszcze, że ją przyswoili. Przekazywanie wiedzy to jak włożenie jedzenia do ust studenta – teraz trzeba pobudzić go do jej przyswojenia. Aby sprowokować przyswajanie wiedzy, można użyć takich metod:

Na tym etapie przyswajanie wiedzy się nie kończy. W trakcie praktycznej pracy studenci będą uzupełniać i doprecyzowywać swoje wyobrażenia na temat dziedziny. Jednak zanim wejdą w praktyczną pracę, gdzie zetkną się nie tylko z problemami ze zrozumieniem, ale i poprawnym pisaniem kodu, lepiej, aby omówili kolejność pracy z nową konstrukcją programistyczną. W rzeczywistości na zajęciach nauczyciele często czekają na pytania od studentów. A ci zazwyczaj nie mają pytań. To oczywiście nie oznacza, że wszystko jest jasne. Studenci po prostu nie potrafią analizować swojej wiedzy i zadawać pytań. Dlatego ten etap wymaga proaktywnej postawy nauczyciela. Nawet przy proaktywnej postawie nauczyciela i zadawaniu pytań nie zawsze udaje się nawiązać użyteczny dialog. Na przykład, jeśli grupa jest zupełnie nieaktywna i nie udaje się nawiązać kontaktu ze studentami, nie warto się na tym etapie zatrzymywać, ale później warto do niego wracać w trakcie pracy nad świadomym rozwiązywaniem problemów.

Kształtowanie umiejętności 🚀

Poprzedni etap przyswajania wiedzy jest jedynie wstępem do rozpoczęcia kształtowania umiejętności. Jak wspomniano wcześniej, umiejętność polega na zdolności do stosowania i adaptacji algorytmu działania w celu rozwiązania zadania. Im bardziej złożona umiejętność, tym większy łańcuch działań oraz więcej warunków, które wpływają na wykonanie każdego działania.

Porównanie z nauką chodzenia: Kształtowanie umiejętności można porównać do nauki chodzenia przez dzieci. Na początku dzieci dużo obserwują, jak chodzą dorośli (przekazywanie i przyswajanie wiedzy). Jednak to nie prowadzi do tego, że od razu wstają i idą. Początkowo potrzebują wsparcia, możliwości wykonania ograniczonej liczby kroków itp. Stopniowo ich mięśnie się wzmacniają, zaczynają lepiej czuć równowagę, co pozwala im pokonywać coraz dłuższe dystanse, aż w końcu zaczynają chodzić swobodnie.

👨‍🏫Rozwiązywanie zadań z pomocą nauczyciela:

  1. Nauczyciel proponuje rozwiązanie zadania jednemu ze studentów i kieruje go za pomocą pytań i wskazówek do prawidłowego rozwiązania.
  2. Następnie bierze innego studenta i inne zadanie, stopniowo zmniejszając liczbę wskazówek.
  3. Więcej studentów angażuje się w udział w rozwiązywaniu zadań.

✍️Rozwiązywanie zadań, gdzie już jest część rozwiązania (zadania na zakończenie):

  1. Nauczyciel daje zadania, w których już częściowo napisano kod, ale brakuje niektórych kroków.
  2. Studenci muszą zrozumieć istniejący kod i dodać brakujące części.
  3. Stopniowo zmniejsza się ilość gotowego kodu, a zwiększa się ilość kodu, który studenci muszą napisać.

🧩Rozwiązywanie zadań w grupie studentów:

  1. Studenci pomagają sobie nawzajem, co pozwala na swobodniejsze dyskusje i analizę podejścia do rozwiązania problemu.
  2. Nauczyciel może pełnić rolę trenera, interweniując w razie potrzeby, aby skierować grupę na właściwe tory.

Wsparcie w kształtowaniu umiejętności Na początku ważne jest, aby studenci mieli zawsze pod ręką przykłady składni nowych konstrukcji programistycznych. Zapamiętanie ich na wstępie jest trudne, więc brak takiej pomocy może stanowić przeszkodę dla głębszego zrozumienia. Stopniowe zmniejszanie wsparcia prowadzi do samodzielnego rozwiązywania zadań przez studentów. Kluczowe jest, aby nauczyciel umiał zaplanować optymalną ścieżkę zmniejszania tego wsparcia. W niektórych tematach ta ścieżka powinna być krótka, a w innych wymagać więcej kroków pośrednich (zadań z wsparciem).

🛠️Procesy w trakcie kształtowania umiejętności:

  1. Zmniejszanie wsparcia ze strony nauczyciela.
  2. Zwiększanie wymagań dotyczących świadomego rozwiązania: bardziej uzasadnione wyjaśnienia, wyszukiwanie luk i błędów w wiedzy studentów.
  3. Zwiększanie trudności zadań (dłuższe algorytmy, wykorzystanie rzadszych wiedzy).

Wielu nauczycieli ma trudności z zaplanowaniem stopniowego procesu zmniejszania wsparcia dla studentów. Często, jeśli czas lekcji nie został w całości przeznaczony na przekazywanie wiedzy, następuje nagły przejście od przekazywania wiedzy do samodzielnego rozwiązywania zadań przez studentów. Część studentów nie jest na to przygotowana i wyłącza się z lekcji. Warto zwrócić uwagę na potrzebę istnienia zadań pośrednich z wsparciem przed przejściem do samodzielnego rozwiązywania zadań przez studentów.

Stosowanie i integracja umiejętności 🔄

Kiedy studenci nauczą się rozwiązywać małe izolowane zadania związane z daną umiejętnością, należy stopniowo rozszerzać kontekst zadań. Powinniśmy dawać bardziej złożone zadania, które wymagają zastosowania nie tylko nowo nauczonych konstrukcji, ale także innych wcześniej przerabianych koncepcji programistycznych. Na przykład, w przypadku useEffect można zlecić studentom napisanie programu, który używa również useState, useRef, renderowania tablicy w JSX itd.

Nie należy jednak lekceważyć trudności takich zadań dla studentów. Fakt, że będą używać tylko wcześniej przerobionych konstrukcji, często sprawia, że takie zadania wydają się studentom proste, a czasem wręcz odmawiają ich wykonania z powodu większego priorytetu nowej tematyki. Jednak integracja i wspólne zastosowanie kilku umiejętności to osobne trudne zadanie edukacyjne. Studenci mogą osobno dość dobrze stosować przerobione konstrukcje, ale jednocześnie nie być w stanie pisać złożonych programów. Biorąc pod uwagę, że końcowym celem nauki programowania jest rozwiązywanie zadań biznesowych wymagających współdziałania wielu umiejętności, integracja jest ważnym krokiem w nauce, którego nie należy pomijać ani zostawiać na koniec kursu.

Jeśli chodzi o trudności dla nauczycieli na tym etapie, to dla tych, którzy dochodzą do takiej zintegrowanej praktyki, może nie zawsze wystarczyć czasu, biorąc pod uwagę niską szybkość programowania studentów. Powszechnym błędnym przekonaniem jest, że do integracji wystarczy duży kompleksowy projekt na koniec. To nieprawda, potrzebna jest regularna "ciągła integracja".

Na początku ważne jest, aby studenci mieli zawsze pod ręką przykłady składni nowych konstrukcji programistycznych. Zapamiętanie ich na wstępie jest trudne, więc brak takiej pomocy może stanowić przeszkodę dla głębszego zrozumienia. Stopniowe zmniejszanie wsparcia prowadzi do samodzielnego rozwiązywania zadań przez studentów. Kluczowe jest, aby nauczyciel umiał zaplanować optymalną ścieżkę zmniejszania tego wsparcia. W niektórych tematach ta ścieżka powinna być krótka, a w innych wymagać więcej kroków pośrednich (zadań z wsparciem).

Ocena i refleksja 📝

Ocena
odbywa się w trakcie całej lekcji. Nauczyciel powinien stale porównywać przebieg swojego wykładu, proponowane aktywności i zadania z poziomem opanowania nowych umiejętności przez studentów. Niemniej jednak, pod koniec lekcji lub tematu należy poświęcić więcej uwagi ocenie, aby mieć jasne zrozumienie możliwości studentów:

  1. Co studenci wiedzą/rozumieją, w czym się orientują z przerobionego materiału?
  2. Co są w stanie napisać, jakie zadania rozwiązać?
  3. Czy potrafią zintegrować zdobyte umiejętności w kontekście bardziej złożonych zadań?

Przy ocenie należy przede wszystkim opierać się na obserwacjach:

  1. Zadajesz pytania, a studenci odpowiadają na nie z argumentacją;
  2. Dajesz studentom zadania lub bardziej złożone projekty, a oni je sami rozwiązują.

Istnieje pokusa, aby iść ścieżką: „przecież im to tłumaczyłem”, „przecież rozbieraliśmy taki przykład”, więc powinni to wiedzieć, umieć itp. Oznacza to ocenianie studentów na podstawie tego, co jako nauczyciel mówiłeś, pokazywałeś, pisałeś, a nie na podstawie tego, co rzeczywiście zrobili sami studenci. W ocenie chodzi nie o to, co studenci powinni, ale co faktycznie potrafią. To wydaje się oczywiste, ale błędne przekonania na ten temat pojawiają się w 3 na 4 przypadkach.

Ogólnie rzecz biorąc, ocena wiedzy studentów w trakcie lekcji jest jednym z najtrudniejszych i najmniej oczywistych zadań dla nauczyciela. Z jednej strony nie można zajrzeć do głowy każdego z nich. Z drugiej strony słabe wyobrażenie o możliwościach studentów koreluje z wykładowym stylem nauczania. W takim przypadku w trakcie lekcji po prostu brakuje aktywności, w których studenci mogliby się wykazać, a nauczyciel na podstawie obserwacji ich pracy mógłby wyrobić sobie wyobrażenie o poziomie studentów.

Nieprawidłowa ocena lub jej brak stopniowo prowadzi do coraz większej przepaści między nauczycielem a studentami. Studenci coraz mniej rozumieją lekcje i coraz mniej się w nie angażują, trudniej im sformułować konkretne pytania, większość z nich zamyka się w sobie, a mniejszość staje się bardziej agresywna. Naprawienie takiej sytuacji zaczyna się od oceny studentów w celu wyrobienia sobie przez nauczyciela jasnego obrazu rzeczywistego stanu rzeczy: rzeczywistej wiedzy i możliwości studentów, od których trzeba się odnieść podczas prowadzenia lekcji.

🤔Refleksja
Oznacza tutaj samoocenę studenta lub jego wyobrażenie o własnej wiedzy, umiejętnościach, możliwościach. To osobna miękka umiejętność, która u większości studentów jest słabo rozwinięta. W trakcie lekcji warto stymulować studentów do refleksji nad tym, co zrozumieli, co potrafią napisać, jakie zadania rozwiązać. Zadawać proste pytania, na przykład:

  1. W czym czujesz się pewnie, a w czym nie w nowym temacie?
  2. Co wydaje ci się nielogiczne lub mylące w nowym temacie?
  3. Wyobraź sobie, jakie zadania mógłbyś rozwiązać z obecnym zrozumieniem tematu? Pomyśl, w którym momencie mogą pojawić się trudności.

Nie są tu potrzebne skomplikowane pytania. Regularna praca nad refleksją pomoże znaleźć najskuteczniejsze pytania dla twojej grupy studentów. Jednak 90% sukcesu refleksji zależy od atmosfery: na ile studenci ufają nauczycielowi, na ile emocjonalnie bezpieczne wydaje się im ujawnianie niezrozumienia itd.

Utrwalenie umiejętności🔒

Istnieje pokusa, aby iść ścieżką: „przecież im to tłumaczyłem”, „przecież rozbieraliśmy taki przykład”, więc powinni to wiedzieć, umieć itp. Oznacza to ocenianie studentów na podstawie tego, co jako nauczyciel mówiłeś, pokazywałeś, pisałeś, a nie na podstawie tego, co rzeczywiście zrobili sami studenci. W ocenie chodzi nie o to, co studenci powinni, ale co faktycznie potrafią. To wydaje się oczywiste, ale błędne przekonania na ten temat pojawiają się w 3 na 4 przypadkach.

Powtarzająca się, regularna praktyka nie oznacza, że na każdej lekcji trzeba rozwiązywać zadania z wszystkich przerobionych tematów. To byłoby nadmiarowe i nie dałoby się tego zrealizować czasowo. Wręcz przeciwnie, z biegiem czasu odstępy między powtórzeniami powinny się zwiększać.

Utrwalanie umiejętności następuje naturalnie, jeśli przy nauce nowych tematów nauczyciel regularnie przechodzi ze studentami etap stosowania i integracji umiejętności, który zakłada rozwiązywanie złożonych zadań obejmujących nie tylko nowo poznane konstrukcje, ale także wcześniej przerobione tematy. Warto tutaj zwracać uwagę, aby nie zadawać jedynie jednorodnych zadań, gdzie na przykład stale używa się pracy z tablicą i pętli for, ale bardzo rzadko stosuje się obiekty i pętlę while. Przy tworzeniu zadań integracyjnych warto po prostu zadać sobie pytanie: co z wcześniej przerobionego dawno nie było używane?

Praca z etapami formowania umiejętności 💼

Proces nauki nie jest liniowy. W jego trakcie można wiele razy wracać do poszczególnych etapów. Niektóre etapy mogą zachodzić równolegle z innymi (na przykład przyswajanie wiedzy, ocena i refleksja). Nie zawsze trzeba przechodzić przez wszystkie etapy. Jednak zrozumienie procesu formowania umiejętności jest pomocne. Analizując przeprowadzone lekcje i te etapy, można lepiej zrozumieć problemy studentów związane z formowaniem umiejętności programowania.