Kategoria: Matematyka, logika i programowanie

Uczeń patrzy na zadanie matematyczne i mówi:

„Wiem, co trzeba zrobić”.

Potrafi obliczyć procent.
Potrafi znaleźć średnią.
Wie, którą wartość trzeba odjąć i które liczby porównać.

Na kartce otrzymuje poprawny wynik.

Potem pojawia się drugie polecenie:

Zapisz rozwiązanie w Pythonie.

I nagle problem, który przed chwilą był prosty, przestaje być oczywisty.

Od czego zacząć?

Która wartość powinna być zmienną?

Co program ma obliczyć najpierw?

Czy potrzebny jest warunek?

Który wynik trzeba zachować, żeby wykorzystać go później?

W takiej sytuacji łatwo uznać, że uczeń „nie umie programować”.

Ale często problem leży gdzie indziej.

Wiedzieć, jaki powinien być wynik, i umieć zbudować procedurę prowadzącą do tego wyniku to dwie różne kompetencje.

Matematyka może prowadzić bezpośrednio do wyniku

Weźmy prosty przykład.

Trzy liczby:

14, 20 i 26.

Trzeba obliczyć ich średnią.

Uczeń zapisuje:

[
(14 + 20 + 26) / 3 = 20
]

Zadanie rozwiązane.

Matematyka pozwala nam skupić się na relacji między wartościami i bardzo szybko przejść do wyniku.

Program potrzebuje jednak czegoś więcej.

Musi otrzymać procedurę.

a = 14
b = 20
c = 26

suma = a + b + c
srednia = suma / 3

print(srednia)

Dla człowieka zmienna suma może wydawać się zbędna. Przecież całe obliczenie da się zapisać w jednym wierszu.

Ale dydaktycznie ma ona znaczenie.

Pokazuje, że między danymi wejściowymi a końcową odpowiedzią istnieje wynik pośredni.

I właśnie takich elementów uczeń musi nauczyć się dostrzegać, jeśli chce samodzielnie budować algorytmy.

Komputer nie potrzebuje odpowiedzi. Potrzebuje instrukcji

To jedna z najważniejszych różnic między tradycyjnym rozwiązywaniem zadania a programowaniem.

W matematyce pytamy często:

Jaki jest wynik?

W programowaniu musimy dodatkowo zapytać:

Jak dokładnie dojść do wyniku?

Załóżmy, że produkt kosztuje 400 zł, a rabat wynosi 15%.

Uczeń może od razu policzyć cenę końcową.

Program wymaga rozpisania procesu:

cena = 400
rabat_procent = 15

rabat = cena * rabat_procent / 100
cena_koncowa = cena - rabat

print(cena_koncowa)

Mamy tu dwa różne wyniki pośrednie:

  • wartość rabatu;
  • cenę po rabacie.

Człowiek może połączyć oba kroki w jednej myśli.

Kod wymusza większą precyzję.

Nie dlatego, że Python „komplikuje matematykę”, lecz dlatego, że komputer wykonuje dokładnie tę procedurę, którą otrzyma.

Poprawna idea może dać błędny program

Spójrzmy na taki kod:

x = 10
y = 20

print(x + y / 2)

Uczeń chciał obliczyć średnią dwóch liczb.

Jego intencja była poprawna:

dodać liczby, a następnie podzielić sumę przez dwa.

Python wykona jednak:

[
10 + (20 / 2)
]

zamiast:

[
(10 + 20) / 2
]

Poprawny zapis to:

srednia = (x + y) / 2

print(srednia)

Możemy oczywiście powiedzieć:

„Brakuje nawiasów”.

Technicznie to prawda.

Ale jeśli na tym zakończymy wyjaśnienie, naprawimy jeden kod, a niekoniecznie sposób myślenia.

Ważniejsze pytanie brzmi:

dlaczego uczeń, który znał poprawną operację matematyczną, zapisał inną procedurę?

Algorytm jest pomostem między zadaniem a kodem

Uczeń nie powinien być zmuszany do natychmiastowego przechodzenia od tekstu zadania do składni Pythona.

Między nimi istnieje ważna warstwa:

algorytm.

Pełniejszy proces wygląda tak:

treść zadania → model matematyczny → kolejne działania → algorytm → kod → sprawdzenie

Jeśli pominiemy środkowe etapy, uczeń próbuje jednocześnie:

  • zrozumieć zadanie;
  • znaleźć metodę matematyczną;
  • zaplanować rozwiązanie;
  • przypomnieć sobie składnię;
  • napisać poprawny kod;
  • kontrolować błędy.

To duże obciążenie poznawcze.

Dlatego czasami uczeń zna matematykę i zna podstawy Pythona, a mimo to nie potrafi połączyć obu obszarów.

Znajomość składni nie jest jeszcze myśleniem algorytmicznym

Uczeń może wiedzieć, czym są:

  • zmienne;
  • input();
  • print();
  • instrukcje if;
  • pętle;
  • funkcje.

Może nawet poprawnie wykonywać ćwiczenia dotyczące każdego z tych elementów osobno.

A jednak nowe zadanie matematyczne może go zatrzymać.

Dlaczego?

Bo zadanie nie mówi:

„Użyj teraz zmiennej, potem instrukcji if, a następnie pętli”.

Uczeń sam musi rozpoznać strukturę problemu.

Musi zdecydować:

co jest daną wejściową;

co jest wynikiem;

jakie wartości pośrednie są potrzebne;

czy istnieją różne przypadki;

czy jakaś czynność się powtarza;

w jakiej kolejności należy wykonać operacje.

To jest myślenie algorytmiczne.

Python jest narzędziem do jego zapisania.

Procedura staje się szczególnie ważna, gdy zadanie się zmienia

Dopóki zadanie jest identyczne z przykładem z lekcji, można odtworzyć zapamiętany schemat.

Prawdziwe rozumienie staje się widoczne dopiero wtedy, gdy zmienimy warunki.

Co się stanie, jeśli:

  • zamiast dwóch liczb mamy dwadzieścia;
  • rabat zależy od wartości zamówienia;
  • trzeba odrzucić błędne dane;
  • wynik jednego obliczenia staje się początkiem następnego;
  • program ma obsłużyć kilka różnych przypadków?

Uczeń, który zapamiętał kod, zaczyna mieć problem.

Uczeń, który rozumie procedurę, może przebudować rozwiązanie.

Dlatego celem nie powinno być jedynie:

„napisz działający kod”.

Lepszym celem jest:

„zbuduj rozwiązanie, którego strukturę potrafisz wyjaśnić i zmienić”.

Gotowy kod może ukryć brak rozumienia

Dziś bardzo łatwo otrzymać fragment programu.

Można znaleźć podobne rozwiązanie w internecie albo wygenerować je za pomocą narzędzia AI.

To bywa użyteczne.

Ale pojawia się ważne pytanie:

czy uczeń rozumie procedurę, którą właśnie otrzymał?

Jeśli nie potrafi wyjaśnić:

  • dlaczego ta zmienna jest potrzebna;
  • dlaczego działanie występuje właśnie w tym miejscu;
  • co zmieni się po zmianie danych;
  • dlaczego użyto warunku lub pętli;

to działający program nie jest jeszcze dowodem zrozumienia.

Kod jest wtedy gotowym produktem.

Nie wiedzą, którą uczeń potrafi samodzielnie wykorzystać.

Excel, GeoGebra i Python rozwiązują inne problemy poznawcze

Te same dane matematyczne można przedstawić w różnych narzędziach.

W GeoGebrze szczególnie łatwo zobaczyć relacje, wykresy i obiekty geometryczne.

W Excelu naturalnie pracujemy z tabelami, formułami, seriami danych i powtarzalnymi obliczeniami.

W Pythonie szczególnie wyraźna staje się procedura: kolejność działań, warunki, powtórzenia i zależności między etapami.

Dlatego sprawność w jednym narzędziu nie gwarantuje sprawności w innym.

Uczeń może świetnie korzystać z GeoGebry, ale mieć problem z algorytmem.

Może znać formuły Excela, ale nie umieć samodzielnie zaprojektować programu.

Nie oznacza to, że „nie zna matematyki”.

Może po prostu brakować mu doświadczenia w przechodzeniu między różnymi sposobami reprezentowania tego samego problemu.

A jeśli matematyka jest nauczana w języku obcym?

W szkołach międzynarodowych dochodzi jeszcze jeden poziom.

Uczeń może otrzymywać zadania matematyczne po angielsku, niemiecku lub w innym języku, a następnie wykonywać je za pomocą Pythona.

Wtedy rzeczywisty proces wygląda tak:

język zadania → interpretacja → matematyka → procedura → algorytm → kod

Problem widoczny w Pythonie może więc rozpocząć się znacznie wcześniej.

Uczeń mógł:

  • nieprecyzyjnie zrozumieć termin;
  • przeoczyć warunek zapisany w tekście;
  • błędnie odczytać relację między wielkościami;
  • poprawnie policzyć coś, czego zadanie w rzeczywistości nie wymagało.

Dlatego w edukacji międzynarodowej języka i przedmiotu nie zawsze da się sensownie rozdzielić.

Język może być częścią mechanizmu rozwiązywania zadania.

Dobry nauczyciel nie zaczyna od napisania kodu za ucznia

Jeżeli celem jest tylko ukończenie jednego zadania, najłatwiej pokazać poprawny program.

Jeżeli celem jest samodzielność ucznia, trzeba najpierw odsłonić procedurę.

Pomagają pytania:

  • Co dokładnie wiemy?
  • Co mamy obliczyć?
  • Jakie dane będą potrzebne programowi?
  • Jaki jest pierwszy krok?
  • Jaki wynik pośredni powstanie?
  • Co zależy od tego wyniku?
  • Czy istnieje warunek?
  • Czy coś trzeba wykonać wielokrotnie?
  • Jak sprawdzimy, czy program rzeczywiście rozwiązuje zadanie?

Dopiero wtedy kod staje się zapisem rozumowania, a nie zgadywaniem składni.

Najpierw diagnoza: matematyka, algorytm, Python czy język?

W Levitin Language School nie zakładamy automatycznie, że uczeń, który nie potrafi zaprogramować zadania matematycznego, potrzebuje po prostu „więcej Pythona”.

Trudność może znajdować się w różnych miejscach:

  • w rozumieniu matematyki;
  • w rozłożeniu problemu na kroki;
  • w myśleniu algorytmicznym;
  • w samym Pythonie;
  • w języku, w którym uczeń poznaje przedmiot.

To rozróżnienie pozwala pracować z przyczyną, a nie tylko z widocznym błędem.

W Language Learnings szczególnie ważna jest sytuacja, w której język staje się narzędziem uczenia się matematyki, informatyki lub innego przedmiotu. Wtedy kompetencja językowa i przedmiotowa spotykają się w jednym zadaniu.

W metodologii Tymur Levitin punktem wyjścia jest właśnie mechanizm: nie tylko czy odpowiedź jest błędna, lecz na którym etapie poprawne rozumowanie przestało działać.

Dlatego trzy elementy wzajemnie się wzmacniają:

Tymur Levitin — autorska diagnoza procesu uczenia się i mechanizmu błędu;

Levitin Language School — indywidualna praca z językami, matematyką, programowaniem i innymi przedmiotami;

Language Learnings — międzynarodowy kontekst uczenia się oraz połączenie języka z rzeczywistym użyciem wiedzy.

Matematyka + programowanie + język

Dla jednego ucznia właściwym rozwiązaniem będzie praca z matematyką.

Dla innego — z Pythonem.

Dla kolejnego najważniejsze będzie nauczenie się budowania algorytmu przed napisaniem pierwszej linijki kodu.

A uczeń szkoły międzynarodowej może potrzebować jeszcze jednego połączenia:

przedmiot + język, w którym przedmiot jest nauczany.

Dlatego skuteczna nauka nie zawsze mieści się w jednej szkolnej etykiecie.

Czasami trzeba połączyć kilka kompetencji dokładnie tam, gdzie spotykają się w rzeczywistym zadaniu.

Dowiedz się więcej

Jeżeli uczeń potrafi rozwiązać zadanie matematyczne, ale nie potrafi samodzielnie zapisać rozwiązania w Pythonie, warto najpierw ustalić, czego naprawdę brakuje: wiedzy matematycznej, procedury, myślenia algorytmicznego, programowania czy języka nauki.

W Levitin Language School nauka może zostać zbudowana wokół konkretnej kombinacji tych potrzeb — matematyki, programowania, języka albo zintegrowanego Language + Subject Learning.

Levitin Language School
https://levitintymur.com/

Language Learnings
https://languagelearnings.com/


Tymur Levitin
Założyciel i dyrektor
Levitin Language School / Language Learnings

Globalna edukacja. Indywidualne podejście.

© Tymur Levitin. Wszelkie prawa zastrzeżone.