Monika Czepukojć ZSMEiE nauczyciel informatyki Toruń, 2017-06-06 Sprawozdanie z pierwszego etapu pilotażowego wdrażania nauki programowania w edukacji formalnej Fot. 1 Uczniowie w trakcie pracy na lekcjach informatyki 1
W roku szkolnym 2016/2017 w ZSMEiE realizowany był autorski program nauczania Informatyka z elementami programowania. Program ten realizowany był w czterech klasach: 1B, 1D - o specjalności technik mechatronik oraz 1K, 1T o specjalności technik informatyk. Realizacja programu związana jest z uczestnictwem ZSMEiE w Pilotażowym wdrażaniu nauczania programowania w związku z zapowiedzią wprowadzania nauczania programowania do edukacji formalnej, wyrażoną wspólnie przez Ministra Edukacji Narodowej, Ministra Cyfryzacji i Ministra Nauki i Szkolnictwa Wyższego. Wraz z przystąpieniem ZSMEiE do pilotażu zapoznałam się wnikliwie z projektem nowej Podstawy programowej kształcenia informatycznego na IV etapie edukacyjnym i na tej podstawie przygotowałam autorski program nauczania na rok szkolny 2016/2017, który został pozytywnie zaopiniowany przez Radę Pedagogiczną ZSMEiE w Toruniu. Wszyscy uczniowie klas pierwszych zostali wdrożeni w pracę na szkolnej platformie e-learningowej Moodle, gdzie mieli dostęp do materiałów, jakie przygotowywałam do każdych zajęć. Fragmenty prezentacji udostępnianych przeze mnie dla uczniów prezentowane są w tym właśnie sprawozdaniu. Na Moodle odbywały się kartkówki i sprawdziany po zrealizowaniu określonej partii materiału oraz dostępne były materiały, z których uczniowie korzystali bezpośrednio na lekcji np. zadania z arkusza kalkulacyjnego, listy zadań z programowania. Już na pierwszej godzinie lekcyjnej zapoznałam uczniów z najpopularniejszymi systemami pozycyjnymi. Wykonując kilka praktycznych ćwiczeń uczniowie nauczyli się prezentować liczby w różnych systemach pozycyjnych. W szczególności istotnym był system binarny z racji zadań, jakie rozwiązywaliśmy programując proste algorytmy w późniejszej fazie zajęć edukacyjnych. Rys. 1 Fragment prezentacji dotyczącej systemów pozycyjnych W początkowej fazie realizacji zajęć edukacyjnych dyskutowaliśmy z uczniami na temat istoty własności intelektualnej, praw autorskich, licencji, chmur internetowych oraz innych form dzielenia się wiedzą i zasobami sieciowymi. 2
Rys. 2 Fragment prezentacji dotyczącej własności intelektualnej Uczniowie mieli okazję zweryfikować swoją wiedzę z zakresu omawianych zagadnień w teście, który rozwiązywali na platformie Moodle. Kolejnym etapem była dyskusja na temat sieci komputerowych oraz ich bezpieczeństwa, systemów operacyjnych, budowy komputera oraz urządzeń współczesnej techniki. Na zajęciach przedyskutowaliśmy różne topologie sieci komputerowych, media transmisyjne, urządzenia sieciowe, krótką historię internetu oraz podstawowe jednostki sieciowe. Rys. 3 Fragment prezentacji dotyczącej sieci komputerowych Uczniowie przygotowali samodzielnie referat oraz prezentacje dotyczące systemów operacyjnych oraz budowy i rozbudowy komputera. Po ocenie referatów i prezentacji przedyskutowaliśmy najistotniejsze kwestie przygotowywanych przez uczniów zagadnień. Przy okazji przygotowywania wspomnianych publikacji uczniowie mogli 3
przetestować działanie chmur internetowych w zakresie udostępniania nauczycielowi na Moodle przygotowanych przez siebie materiałów. Rys. 4 Fragment referatów i prezentacji przygotowanych przez uczniów Również po tym etapie realizacji programu uczniowie sprawdzali swoją wiedzę w teście, który rozwiązywali na szkolnej platformie Moodle. Następnym etapem jaki został zrealizowany na lekcjach informatyki było przygotowywanie dokumentów o złożonej strukturze. Uczniowie przygotowywali broszurę do druku na podstawie dostarczonych przeze mnie materiałów. Pracując z tym dokumentem nauczyli się m.in. stosowania stylów, pracy w widoku konspektu, dodawania spisu treści i spisu ilustracji. Ostatnim elementem przed wejściem w świat programowania i algorytmów był arkusz kalkulacyjny. Aby wdrożyć nieco uczniów w świat konstrukcji warunkowych rozwiązywałam z uczniami zadania typu maturalnego na poziomie podstawowym z bazy zadań CKE. Dzięki odpowiedniemu doborowi zadań uczniowie nauczyli się importowania danych zewnętrznych do arkusza kalkulacyjnego. Szczególną uwagę zwracałam na wszelkiego rodzaju konstrukcje warunkowe, co niewątpliwie dało pozytywny efekt na lekcjach 4
z programowania. Wprowadziłam więc funkcje JEŻELI, SUMA.JEŻELI, LICZ.JEŻELI, LICZ.WARUNKI oraz formatowanie warunkowe. Uczniowie z powodzeniem stosowali te funkcje i dość sprawnie rozwiązywali zadania przy ich użyciu. Rys. 5 Arkusze kalkulacyjne wypracowane z uczniami w trakcje lekcji Pierwsze zajęcia z zakresu programowania poświęciłam na omówienie podstawowych zagadnień jakimi są: algorytm, program, dane wejściowe, dane wyjściowe, kod źródłowy, kod wynikowy. Następnie wprowadziłam reprezentację algorytmów przy użyciu schematów blokowych i uczniowie zapisywali kilka programów właśnie przy użyciu takich struktur. Rys. 6 Pierwsze reprezentacje algorytmów przy użyciu schematów blokowych Schematy blokowe od tego momentu towarzyszyły nam na większości zajęć. Przed zakodowaniem algorytmów w języku programowania rysowaliśmy wraz z uczniami schemat blokowy. Z biegiem czasu uczniowie zauważyli, że schemat blokowy jest prostszą reprezentację algorytmu i nawet na sprawdzianach przed zakodowaniem algorytmu w języku programowania rysowali schematy blokowe, gdyż ułatwiało im 5
to rozwiązywanie problemu. Wraz z prezentacją algorytmów przy użyciu schematów blokowych zostały omówione spójniki logiczne, operator modulo oraz, nawiązując do matematyki, wzór Herona i nierówności trójkąta. Język programowania jaki wybrałam na zajęcia to C++. Przez kilka lat pracy w różnych kompilatorach zauważyłam, że ten język sprawia uczniom najmniej problemów. Tak więc zaraz po nauczeniu się prezentowania algorytmów przy użyciu schematów blokowych wprowadziłam budowę programu w C++ oraz podstawowe operatory wejścia i wyjścia. Rys. 7 Fragment prezentacji z budowy programu w C++ Aby efektywnie przećwiczyć operacje wejścia i wyjścia zaproponowałam uczniom rozwiązanie jednego z zadań, które pojawiło się na konkursie informatycznym dla gimnazjalistów. Przy okazji rozwiązywania zadania konkursowego omówiłam dokładnie typ całkowity oraz operacje arytmetyczne (w tym dzielenie całkowite) jakie można wykonywać w C++. W pierwszym zadaniu omówiłam problem deklaracji zmiennych i ich typów oraz analizę błędów występujących w programie podczas jego kompilacji i uruchamiania. Uczniowie mogli ćwiczyć wprowadzone zagadnienia korzystając z dużej bazy zadań jakie udostępniłam na platformie Moodle. Podsumowaniem zajęć dotyczących budowy programu w C++, operacji wejścia i wyjścia był test z tego właśnie zakresu przeprowadzony na platformie Moodle oraz proste zadanie praktyczne sprawdzające stopień zrozumienia omawianych zagadnień. Obie formy sprawdzenia wiadomości zakończone były wysokimi wynikami większości uczniów. Na tym etapie można było dostrzec drobny problem. Nie wszyscy uczniowie angażowali się w rozwiązywanie zadań z zakresu programowania w domu. W nielicznych przypadkach przełożyło się to na wyniki testu jaki uczniowie rozwiązywali na lekcji. 6
Rys. 8 Przykładowe zadania z testu na platformie Moodle Kolejnym zagadnieniem jakie uczniowie poznali na lekcji informatyki były konstrukcje warunkowe. Na podstawie trzech prostych, aczkolwiek ciekawych zadań, wprowadziłam poza konstrukcją warunkową if..else dodatkowe elementy: - typ string, - operatory logiczne OR oraz AND, - instrukcję wielodecyzyjną if..else if..else, - operator porównania ==. Rys. 9 Fragment prezentacji dotyczącej instrukcji warunkowej 7
Wraz z wprowadzeniem instrukcji warunkowej mogliśmy zakodować wspomniany już przeze mnie algorytm obliczania pola trójkąta z zastosowaniem nierówności trójkąta oraz wzoru Herona. Była to również dobra okazja do wprowadzenia biblioteki manipulatorów: iomanip oraz poleceń fixed i setprecision, które umożliwiały wyświetlenie pola z większą dokładnością. Po konstrukcjach warunkowych i odpowiedniej ilości ćwiczeń przeszłam do omawiania najtrudniejszego dla uczniów zagadnienia - instrukcji iteracyjnych. Rys. 10 Fragment prezentacji wstępnej z pętli Pierwszą z pętli jaką omówiłam z uczniami była pętla for. Wraz z wprowadzeniem tej pętli omówiłam również operatory inkrementacji oraz dekrementacji. Rys. 11 Analiza pętli for Pisząc program będący symulatorem odliczania wstecznego wprowadziłam kolejną bibliotekę: windows.h oraz polecenia Sleep oraz system( cls ). Następnie omówiłam pętle while oraz do..while - ich podobieństwa i różnice. Kilka następnych lekcji informatyki poświęciłam na ćwiczenia związane z poznanymi konstrukcjami. Omawiane zagadnienia sprawiały uczniom wiele trudności. Część uczniów rozwiązywała zadania w domu, dzięki temu łatwiej było analizować z nimi kolejne algorytmy np. obliczanie sumy cyfr podanej liczby oraz iloczynu niezerowych jej cyfr, znajdowanie największej i najmniejszej cyfry w podanej liczbie, sprawdzanie czy liczba jest pierwsza, wypisywanie dzielników danej liczby. 8
Niestety duża grupa uczniów przepisywała rozwiązania zadań domowych od kolegów lub koleżanek i nie wykazywała żadnego zaangażowania na tym etapie nauki programowania przez co kolejne zajęcia przysparzały im wiele trudności. Zauważyłam, że uczniowie nie mają nawyków rozwiązywania zadań domowych z informatyki co było dużym utrudnieniem w omawianiu kolejnych co raz trudniejszych zagadnień. Każdorazowo zanim napisaliśmy program w języku C++ algorytmy były kodowane przy użyciu schematów blokowych. Rys. 12 Analiza pętli while oraz do..while Po teście na platformie Moodle kończącym omawianie instrukcji iteracyjnych i sprawdzeniu stopnia opanowania materiału w zadaniach praktycznych przeszłam do omawiania z uczniami instrukcji wyboru switch oraz problemu liczb pseudolosowych. Te dwa zagadnienia nie sprawiały uczniom większych trudności, a w szczególności możliwość generowania liczb pseudolosowych podsunęła im wiele pomysłów na ciekawe programy. Wraz z wprowadzeniem instrukcji switch wprowadziłam również polecenie getch() co przyspieszyło nieco obsługę napisanych przez uczniów programów. Rys. 13 Fragment prezentacji z instrukcji switch oraz liczb pseudolosowych Następnie etapem było programowanie proceduralne. Wprowadziłam uczniom funkcje i procedury, pokazując tym samym iż programowanie proceduralne jest paradygmatem programowania zalecającym dzielenie kodu na podprogramy, które wykonują określone funkcje. Zwróciłam szczególną uwagę na problem unikania redundancji kodu wraz z wprowadzeniem funkcji, co uczniowie dość dobrze zrozumieli na przykładzie jednej ze znanych gier platformowych. Funkcje były oczywiście dobrym momentem na rozróżnienie zmiennych lokalnych oraz 9
globalnych, a także na wprowadzenie sposobu przekazywania argumentów do podprogramów: przez wartość oraz przez referencję. Rys. 14 Fragment prezentacji z funkcji Po wprowadzeniu do programowania strukturalnego kolejnym etapem był typ tablicowy oraz realizacja prostych algorytmów przy użyciu wspomnianego typu. Uczniowie wymyślali dość ciekawe określenia na tego typu strukturę np. szafa z półkami na dane, co ułatwiło im zrozumienie wprowadzanego zagadnienia. Tablice były dobrą okazją na omówienie ciągu Fibonacciego, problemu złotej liczby oraz złotej spirali. Jednym z zadań uczniów było wyznaczenie najdokładniejszego przybliżenia złotej liczby w obrębie typu danych w jakim się poruszaliśmy. Rys. 15 Fragment prezentacji dotyczącej tablic i ciągu Fibonacciego W klasach, w których zostało mi nieco czasu wprowadziłam również algorytm sortowania bąbelkowego, jako przykład zastosowania tablic oraz pętli zagnieżdżonych. Zanim jednak algorytm został zakodowany w języku C++ pokazałam uczniom bardzo ciekawą animację przygotowaną przez uczniów z Knight School at Menlo School oraz dla ułatwienia zaprezentowałam schemat blokowy realizujący ten algorytm. Niestety nie udało mi się zrealizować wszystkich zagadnień jakie zostały przeze mnie zaplanowane. Wynikało to z konieczności dostosowania tempa pracy do poziomu opanowania omawianych zagadnień przez poszczególne grupy uczniów. 10
Ważniejszym było dla mnie dokładne opanowanie przez uczniów mniejszej partii materiału, niż większej ale w sposób pobieżny. Myślę, że realizowany program po ewaluacji można byłoby kontynuować przez kolejne dwa lata w klasach o tych samych profilach. Mam jednak duże wątpliwości, czy taka ilość materiału byłaby łatwa do przyswojenia dla innych klas zarówno technicznych, jak i ogólnokształcących np. o profilach humanistycznych, czy sportowych. Monika Czepukojć 11