Ostatnio znalazłem kolejny argument na rzecz nauki programowania w szkole, w postaci wykład Conrada Wolframa na TED Talk w Oxfordzie, poświęcony nauczaniu matematyki w szkole, jako przedmiotu wyjątkowo istotnego dla rozwoju naszej cywilizacji. Pan Wolfram twierdzi, że zamiast tępego uczenia dzieci liczenia, powinny być one uczone matematyki przy pomocy komputerów, a dokładnie ich programowania, z naciskiem na logiczne myślenie i formułowanie problemów:
Dawno temu, w epoce komputerów 8-mio bitowych, każdy użytkownik tych maszyn musiał zapoznać się z językiem BASIC, nawet po to, aby załadować grę czy program użytkowy do pamięci.
Zaowocowało to lepszą znajomością możliwości sprzętu i oferowanych przez niego możliwości, oraz sprzyjało jego bardziej twórczemu wykorzystywaniu.
W dzisiejszych czasach, gdzie obsługa komputera jest banalnie prosta i intuicyjna, widać pewien regres, gdyż użytkownicy nie widzą potrzeby pogłębiania swej wiedzy i umiejętności.
Jest to szczególnie frustrujące w przypadku dzieci i młodzieży, które to marnują czas na bierne przeglądanie internetu i granie, zaprzepaszczając możliwości jakie daje nowoczesna technologia w dziedzinie edukacji i rozwoju intelektualnego.
Wbrew obiegowej opinii, obecność komputerów w domach NIE poprawia wyników w nauce, gdyż są one często wykorzystywane do rozrywki, w szczególności gier i Internetu, odrywając dzieci od nauki. Dowodem na to niech będą badania poczynione w Rumunii przez profesora Ofera Malamuda, według których obecność komputerów podnosi co prawda znajomość obsługi tych urządzeń, ale kosztem wyników w szkole.
Postanowiłem sprawdzić, czy w Polsce istnieje obowiązek nauczania programowania w szkole. Poguglałem za publikacjami poświęconymi podstawie programowej nauczania informatyki w gimnazjum, i uderzyło mnie to, że poza jednym napomknięciem o języku LOGO, nie ma ani słowa o wymogu nauczaniu programowania w konkretnym języku wysokiego poziomu na lekcjach informatyki w gimnazjum. Jest nauczanie podstawy algorytmów ale to wszystko. Większość wymagań programowych dotyczy uczenia obsługi systemu Windows, edytora tekstu, arkusza kalkulacyjnego, programów do grafiki i Internetu itp. – można to zobaczyć w założeniach reformy programowej Ministerstwa Edukacji Narodowej. W liceach programowanie ma status "materiałów nadobowiązkowych", co jest moim zdaniem nieporozumieniem.
Mam duże wątpliwości co do takiego postępowania, gdyż większość tych rzeczy dzieciaki mogą się dowiedzieć od rówieśników, rodziców czy prasy komputerowej. Twórcy reformy programowej w MENie zapominają, że nasycenie technologią informatyczną samo z siebie wymusza elementarną wiedzę na ten temat wśród najmłodszych. Mam na myśli wiedzę na poziomie powierzchownym, charakterystycznym dla szarego użytkownika.
Dlatego szkoła powinna iść krok dalej, i powinna uczyć podstaw zaplecza teoretycznego współczesnej informatyki, gdyż obsługi programów użytkowych można nauczyć się chociażby z instrukcji obsługi. Dzieciaki opuszczając gimnazjum w XXI wieku powinny mieć świadomość, że cała "magia" komputerów polega na tym, że po prostu wykonują one po kolei zadane polecenia, bez ustanku licząc. Taką wiedzę może im dać tylko nauka programowania.
I nie jest to wcale "sztuka dla sztuki". Trudno wyobrazić sobie, aby kierowca samochodu nie wiedział jak działa silnik czterosuwowy, mechanik nie miał pojęcia o podstawowych prawach fizyki, a lekarz nie znał się na biologii. Podstawowa wiedza z dziedziny programowania sprzyja bardziej dogłębnemu poznaniu tajników funkcjonowania systemów operacyjnych i oprogramowania, co może zaprofitować wyższą kulturą techniczną, rozumianą jako bardziej twórcze wykorzystywanie możliwości jakie daje technologia. Pierwszy kontakt z komputerem w roli programisty może wzbudzić zainteresowanie informatyką wśród uczniów, co ma potencjalnie duży wpływ na wybór drogi edukacji i kształcenia zawodowego.
Jaki język wybrać do szkolnych pracowni? Moim zdaniem oczywistym wyborem jest język BASIC, pomyślany od początku swego istnienia jako narzędzie edukacyjne. Dlaczego nie słynny Pascal? Pascal jest już zbyt skomplikowany jak na pierwszy kontakt z językiem programowania, gdyż rozróżnia on typy zmiennych i posiada złożone typy danych (w najnowszych wersjach posiada nawet wskaźniki i obiekty).
Jeśli chodzi o BASICa, to do wyboru mamy sporo mutacji tego języka, min. VisualBASIC Microsoftu, czy FreeBASIC, ale na szczególną uwagę zasługuje darmowy, na otwartym źródle, język BASIC-256 (dawniej KidsBASIC), pomyślany jako język dla dzieci i młodzieży szkolnej.
Okno BASIC-256 z programem do rysowania fraktali.
Jest on dostępny w wersji na Linuxa i Windows i posiada zintegrowane środowisko programistyczne, umożliwiające łatwą edycję kodu, podgląd grafiki, podgląd zmiennych i wyjście tekstowe. Sama aplikacja nie jest skomplikowana, pewną niedogodnością może być brak polskiego tłumaczenia interfejsu i dokumentacji. Nauka programowania z użyciem tego narzędzia powinna polegać na tworzeniu prostych programów, które pozwalały by na ogarnięcie przez uczniów zmiennych, instrukcji warunkowych, iteracji itp., w celu np. rozwiązywania zadań z matematyki (np. rozwiązywanie równań z dwiema niewiadomymi), czy zabawy w tworzenie grafiki (proszę mi wierzyć, dzieci to lubią).
Reasumując: nauczanie programowania powinno być obowiązkowe w gimnazjum i liceum. Do tego celu idealnie nadaje się język BASIC, a w szczególności BASIC-256. Nie rozumiem argumentu w stylu "to jest za trudne dla dzieciaków", gdyż jest to po prostu nieprawda. Gdybyśmy kierowali się podejściem, że wiele rzeczy jest za trudnych dla dzieci (bo muszą się ich nauczyć, w toku edukacji, często najeżonej niepowodzeniami) to najlepiej to by było w ogóle ich niczego nie uczyć.