Motywacja uczniów do pisania programów jest niezwykle ważna. To dzięki niej uczniowie pracują i rozwijają swoje umiejętności. W jaki sposób zmotywować uczniów do pracy? Nauczyciele z całego świata próbują znaleźć odpowiedź na to pytanie. Ale samo pisanie kodu nie wystarczy. Kod pisany przez programistów musi być wysokiej jakości. Więc już na etapie edukacji przyszłych programistów trzeba wprowadzać zagadnienie jakości kodu. Jak to zrobić? Jak sprawić by kod pisany przez uczniów był wyższej jakości? Czy system grywalizacji może zmotywować uczniów do pisania kodu o wyższej jakości? Czy wpłynie to na liczbę rozwiązanych przez nich problemów?
Takie pytania postawili sobie naukowcy z Waseda University w Tokio
Naukowcy z Waseda University w Tokio podjęli rozważania nad jakością kodu pisanego przez ich studentów. Zauważyli, że kod jaki piszą ich studenci jest niskiej jakości. Postanowili zadbać o poprawę jakości kodu studentów. Rozwiązaniem tego problemu stała się grywalizacja.
Standardowo podczas nauki programowania kluczowe jest pisanie przez uczniów programów zgodnie z zadaną specyfikacją. Nauczyciele w zadaniach dla uczniów umieszczają pewne problemy do rozwiązania. Następnie uczniowie czy studenci piszą kod, który jest sprawdzany pod kątem zgodności z zadaną specyfikacją. To jest podstawowe podejście, niezwykle ważne w procesie nauki programowania. Jednakże wraz ze zmianą potrzeb rynku pojawiło się nowe podejście. Jak pokazują analizy i wyniki badań, niska jakość kodu powoduje problemy wydajnościowe pisanych programów. Wyniki tych analiz stały się motywacją naukowców z Waseda University do zmiany sposobu nauczania i zwiększenia nacisku na aspekt związany z jakością kodu. Istota jakości kodu jest zależna od projektu jaki jest realizowany oznacza to, że jeśli piszemy oprogramowanie czy systemy, które nie są bardzo złożone albo nie będą użytkowane przez dużą liczbę użytkowników, wówczas jakość kodu nie jest kluczowa. W momencie, gdy brane jest pod uwagę bardziej zaawansowane oprogramowanie, jakość kodu jest kluczowa, po tym poznajemy jakość programisty. Inne analizy wskazują na fakt, że gdy pisany przez programistów kod jest niskiej jakości, wówczas produktywność całego zespołu jest niska. Pokazuje to wpływ jakości kodu na produktywność a w efekcie na pracę całego zespołu programistycznego, dlatego jakość pisanego kodu jest bardzo ważna.
Jak więc zmotywować uczniów do pisania kodu wyższej jakości?
Jak można zmotywować uczniów i studentów do poprawy swojego kodu w taki sposób, żeby jakość tego kodu była wyższa, pomimo tego, że rozwiązali poprawnie zadanie? Zadanie wprawdzie zostało wykonane przez studenta poprawnie, otrzymany wynik jest zgodny ze specyfikacją, ale jakość kodu jest niezadowalająca albo może być wyższa.
Tutaj warto przejść do kolejnego elementu; w jaki sposób można sprawdzać jakość kodu?
Wyróżniamy dwie podstawowe metryki jakości kodu
Liczba linijek jaka została użyta do napisania kodu, a także “złożoność cyklomatyczna” (ang. Cyclomatic Complexity). Weryfikacja kodu poprzez jego objętość jest metodą bardzo prostą, ale to złożoność cyklomatyczna, pomimo tego, że jest metodą bardziej złożoną, jest stosowana częściej. Złożoność cyklomatyczna bazuje na obliczeniu tzw. Punktów decyzyjnych, które programista zastosował w swoim kodzie. To właśnie rozwiązanie oparte na złożoności cyklomatycznej zostało zaimplementowane do systemu opracowanego przez naukowców z Waseda University.
Automatyczna sprawdzarka pomaga nauczycielom
Kwestią wartą omówienia jest sposób weryfikacji poprawności kodu uczniów przez nauczycieli. Obserwując pracę nauczycieli na każdym poziomie edukacji można zauważyć jak trudna i żmudna jest ich praca. Setki programów tworzonych przez uczniów, w każdym dziesiątki czy setki linii kodu, które nauczyciel musi przeczytać (pod warunkiem, że musi to robić ręcznie). Dzisiaj świat już od wielu lat stosuje automatyczne mechanizmy sprawdzania kodu. Mechanizmy te nazywane są automatycznymi sprawdzarkami. Wspomniani naukowcy z Waseda University posiadają własną sprawdzarkę, działającą w obrębie całego uniwersytetu. Standardowa sprawdzarka analizuje jedynie podstawowe parametry, czyli dane na wejściu i pasujące do nich dane na wyjściu. Sprawdzarka stosowana na Waseda University posiada jeszcze dodatkowy parametr jakim jest wspomniane sprawdzanie jakości kodu poprzez wykorzystanie metryki CC (Cyclomatic Complexity). Niewątpliwą zaletą automatycznych sprawdzarek jest fakt otrzymywania przez uczniów natychmiastowej informacji zwrotnej. Uczeń nie musi więc czekać na sprawdzenie kodu przez nauczyciela. Dodatkowo zastosowanie sprawdzarek pozwala na odciążenie nauczyciela. Aspekt dostępności nauczyciela także jest niezwykle istotny. Obecnie zmagamy się z niedoborem nauczycieli na wszystkich szczeblach edukacji, a nauczyciele informatyki nie są w tym przypadku wyjątkiem. Rynek sygnalizuje potrzebę coraz szerszego wprowadzania programowania do programu nauczania informatyki, co w połączeniu z brakiem nauczycieli wydaje się zadaniem trudnym. Obciążanie nauczyciela zadaniami, które są powtarzalne i możliwe do zautomatyzowania (takie jak sprawdzanie kodu) prowadzi do niewłaściwego wykorzystania jego czasu. Nauczyciel ten czas mógłby poświęcić na to by być bliżej ucznia, co bezpośrednio wpłynęłoby na poprawę wyników uczniów Warto także podkreślić, że taki stan prowadzi do obniżenia motywacji nauczyciela.
Jak kwestię motywacji rozwiązali naukowcy z Waseda University?
Wróćmy do tego wspomnianego badania przeprowadzonego na Waseda University. Badanie polegało na sprawdzeniu metryki jakości kodu. Przeprowadzony eksperyment był krótki, gdyż trwał zaledwie sześć tygodni. Metryka sprawdzająca jakość kodu została wprowadzona ramach kursu CS2 (oznacza to, że jest to dla studenta drugi język programowania). Badanie zostało przeprowadzone w języku C (uczestnicy badania odbyli już kurs CS1 co oznacza, że znali podstawy programowania i umieli pisać kod). Grupa biorąca udział w badaniu była mała, gdyż składała się z 35 osób. Badani zostali podzieleni na dwie grupy. Pracę jednej z tych grup sprawdzał system bez zaimplementowanej metryki sprawdzającej jakość kodu, zaś drugiej z metryką jakości. Dodatkowo druga grupa posiadała dostęp do tablicy rankingowej (pozycja w rankingu zależała od jakości napisanego kodu). Uczniowie byli oceniani jedynie na podstawie poprawności kodu, jakość kodu nie była brana pod uwagę przy ocenie. Napisany przez studenta kod po weryfikacji jakości pozycjonował go w rankingu. Student w celu zmiany swojej pozycji w rankingu na wyższą musiał poprawić jakość kodu (poprawa jakości kodu nie miała wpływu na ocenę jaką otrzymał student, miała jedynie wpływ na pozycję w rankingu więc kluczowy był tu aspekt rywalizacji). Studenci dobrowolnie poprawiali kod, zwiększając jego jakość i jednocześnie wraz ze wzrostem jakości kodu zajmowali wyższe miejsca w rankingu. Wyniki badania pokazały, że grupa, której kod był sprawdzany pod kątem jakości, a także miała dostęp do tabeli rankingowej, chętniej poprawiała jakość swojego kodu. Studenci poprawiali swój kod jedynie w celu zmiany pozycji w rankingu, po pokazuje wpływ grywalizacji na działania studentów. Drugą częścią badania było sprawdzenie, czy poprzez wielokrotne poprawianie kodu studenci z drugiej grupy lepiej przyswajają wiedzę i tym samym rozwiążą więcej zadań niż pierwsza grupa. Wyniki wskazały na to, że nie miało to wpływu na zwiększenie ilości rozwiązanych zadań, gdyż obie grupy rozwiązały taką samą ich ilość.
Warto wskazać na sposoby jakimi studenci redukowali wskaźnik CC w celu poprawy jakości kodu.
Po pierwsze uczniowie wykonywali najprostszą rzecz, usuwali zbędne instrukcje warunkowe (każdy “if” jest instrukcją warunkową, w której program musi podjąć decyzję). Po drugie usuwali nadmiarowe wyrażenia warunkowe (weryfikowali, które były nadmiarowe, a następnie je usuwali). Po trzecie studenci tworzyli nowe funkcje mające na celu usuwanie duplikacji kodu. Ostatnim elementem jaki zastosowali studenci było użycie tablicy wskaźników (jest to charakterystyka języka C, bardziej specyficzna metoda, która pozwalała zwiększać jakość kodu, poprzez obniżenie złożoności punktów decyzyjnych). Właśnie tak zwiększa się jakość kodu.
Grywalizacja motywuje uczniów
Stosowanie rankingu przynosi pożądane efekty, czyli grywalizacja daje dodatkową motywację. Omówiony przykład badania przeprowadzonego przez akademików z Waseda University obrazuje istotę stosowania elementów grywalizacji w procesie nauczania. Grywalizacja przyczynia się do wzrostu motywacji wewnętrznej studentów. Studenci czy uczniowie mają motywację do tworzenia kodu, początkowo na pewno tą zewnętrzną, która zależy od uzyskania przez nich oceny. Badania nad istotą motywacji w procesie nauczania programowania są wciąż prowadzone. Pierwsze wyniki wskazują, że uczniowie na początku swojej drogi są motywowani głównie zewnętrznie (poprzez uzyskanie dobrej oceny), zaś kiedy zauważają, że ich kod staje się coraz lepszy pojawia się motywacja wewnętrzna do dalszego doskonalenia. Wprowadzenie dodatkowego czynnika motywacyjnego w postaci rankingu lub tablicy wyników pozwala na zwiększenie motywacji wewnętrznej uczniów. Tak jak studenci Waseda University początkowo byli motywowani oceną (motywacja zewnętrzna), tak później chcąc osiągnąć lepsze miejsce w rankingu doskonalili swój kod, w efekcie ucząc się tworzenia kodu wysokiej jakości (motywacja wewnętrzna).
Jak rozwinąć umiejętności pisania kodu lepszej jakości wśród uczniów i studentów?
Przede wszystkim należy zwrócić uwagę na zastosowanie automatycznych sprawdzarek kodu (najlepiej tych z metryką sprawdzania jakości kodu), które przekładają się na odciążenie nauczycieli, którzy w efekcie mogą poświęcić więcej czasu na rozwijanie wśród uczniów przydatnych umiejętności. Sprawdzarki takie są używane na wszystkich konkursach algorytmicznych, zarówno krajowych jak i międzynarodowych. Coraz więcej szkół i uniwersytetów na świecie posiada system automatycznego sprawdzania.
Aby rozwinąć umiejętność pisania kodu wysokiej jakości wśród uczniów warto wprowadzić do procesu nauczania moduły dotyczące jakości kodu takie jak zajęcia omawiające zagadnienie złożoności cyklomatycznej. Warto także pokazywać uczniom sposoby na poprawę jakości kodu dopasowane od języka w jakim pracują. Jeżeli uczniowie będą wiedzieli czym jest jakość kodu i w jaki sposób ją zwiększyć to będą w stanie pisać swój kod tak by od samego początku był wysokiej jakości. Pomocnym rozwiązaniem jest także wprowadzenie systemu rankingowego motywującego uczniów poprzez grywalizację. W tym wypadku najlepiej sprawdzi się zewnętrzne rozwiązanie posiadające taką funkcjonalność takie jak np. Platforma CyberSkiller.
Jak wprowadzić sprawdzarkę do swojej szkoły?
Możemy sami stworzyć taką sprawdzarkę lub skorzystać z istniejącego na rynku rozwiązania. Jednym z rozwiązań jest utworzenie w ramach własnych zasobów zespołu programistów, którzy sami napiszą taki system. Jeśli zdecydujemy się sami stworzyć taki system to pierwotny koszt utworzenia i utrzymania jest wysoki, ponieważ system nie zawsze działa bezawaryjnie; trzeba opłacać osoby, które będą w stanie wprowadzić poprawki bądź dodać nowe funkcjonalności. Plusem takiego rozwiązania są mniejsze koszty miesięczne, gdyż jest to nasz system, więc jego utrzymanie nie jest drogie, ale start takiego systemu zajmuje sporo czasu w zależności od zasobów od sześciu do dwunastu miesięcy. Przy zastosowaniu systemu zewnętrznego, koszty miesięczne są wyższe w stosunku do własnego rozwiązania. W przypadku systemów zewnętrznych ich największą zaletą jest szybkość wdrożenia, która jest praktycznie natychmiastowa, z dnia na dzień. Przy wyborze lub tworzeniu konkretnego rozwiązania warto zwrócić uwagę na implementację metryki służącej do sprawdzania jakości kodu, gdyż jak zostało dowiedzione wpływa to na motywację uczniów. Jednym z systemów, które są dostępne na rynku jest system utworzony przez firmę CyberSkiller, to rozwiązanie pozwala wdrożyć w szkole system automatycznej kontroli kodu i wiele innych rozwiązań dotyczących nauczania informatyki w szkole i na uczelni.
Podsumowanie
Odpowiadając na główne pytania postawione na początku można stwierdzić, że warto pomyśleć o wprowadzeniu grywalizacji do procesu nauczania, wprowadzać do oceny jakość kodu, ponieważ to zwiększa umiejętności osób uczących się, czy to są uczniowie czy studenci, a tym samym zwiększa ich wartość w przyszłości na rynku pracy.

Zapisz się do Newslettera CyberSkiller