
Wiele osób zna Scratch – środowisko programowania dla dzieci, którego nauka zazwyczaj sprowadza się do tworzenia kreatywnych projektów według zasady „od prostego do złożonego”. Przy tym „klasyczne podejście” do nauki programowania (zmienne → gałęzie → pętle → funkcje → struktury → obiekty → …) w Scratch jest trudne.
Jednak zmiana kolejności uczenia się pojęć (nazwijmy je koncepcjami) programowania strukturalnego, obiektowego i zdarzeniowego, ich ukrycie za kolorowymi sprite’ami i interaktywną animacją, nie oznacza, że na koncepcjach nie należy kłaść akcentu. Szczególnie, jeśli celem jest nie tyle rozwój zdolności twórczych, co nauka programowania. Tę ideę starałam się odzwierciedlić w moim .
Pierwszym, z czym staje twórca Scratcha, są sprite’y. Chociaż w Scratch nie ma prawdziwego programowania obiektowego, sprite’y można uznać za obiekty. Na tym etapie uczący się widzi, że w programie może być wiele obiektów, których zachowaniem zarządzają zewnętrzne dla nich skrypty. Sprite’y otrzymują polecenia lub na żądanie przekazują informacje o swoim stanie, czyli programowanie sprowadza się do zarządzania obiektami.
Drugim, co natychmiast rzuca się w oczy młodemu programiście w Scratch, jest pojęcie wielowątkowości. Każdy sprite może mieć kilka skryptów, które są wykonywane jednocześnie. Kilka sprite’ów może także wykonywać swoje programy jednocześnie. Co więcej, organizowanie sekwencyjnego wykonania jest bardziej skomplikowane.


Już na pierwszej lekcji nie możemy uniknąć zapoznania się z pętlami. W przeciwnym razie kot zbytnio się nie rozbiegnie. Na tym etapie poznanie pętli musimy pozostawić intuicyjnemu i powierzchownemu. Ograniczamy je do pętli „powtarzaj zawsze” i „powtórz … razy”, które są prostsze do zrozumienia. Pętla z warunkiem jest omawiana w lekcji, specjalnie poświęconej pętli. Ta lekcja wymaga znajomości wyrażeń logicznych i zmiennych.
Ponieważ Scratch jest środowiskiem zdarzeniowym, bloki operatora warunkowego lepiej jest poznawać przed zmiennymi. Warunkiem mogą być różne zdarzenia.

Moim zdaniem taka kolejność jest lepsza, ponieważ w każdym lekcji wprowadzamy minimum pojęć. I to nie są pojęcia abstrakcyjne, ale od razu widzimy ich praktyczne zastosowanie.
Jeśli zaczynamy od zmiennych, trudno jest pokazać ich przeznaczenie i przydatność, ponieważ wcześniej nie zostały omówione instrukcje warunkowe, wprowadzanie danych i generowanie liczb losowych.
W Scratch, z wyjątkiem list, programista napotyka trzy rodzaje danych: liczby, ciągi znaków i typ logiczny. Typ jest związany z wartością, a nie ze zmienną. Nie ma potrzeby przekształcania ciągów znaków w liczby i odwrotnie. Ciągi znaków nie są umieszczane w cudzysłowach.
Blok zwracający wartość logiczną i mający charakterystyczny kształt kanciasty, można umieszczać w okrągłych polach. Przeciwnie: tam, gdzie oczekiwane jest wyrażenie logiczne, nie można wstawić zwykłej zmiennej.

Scratch został zaprojektowany w taki sposób, aby podczas wykonywania nie występowały krytyczne błędy. Dlatego gdy spróbujesz użyć ciągu znaków w operacji arytmetycznej, zostaje on zastąpiony zerem (patrz pierwszy zrzut ekranu).
Programista powinien wiedzieć, że możliwości języków programowania rozszerzają biblioteki. Pracując w Scratch, uczeń może dodawać rozszerzenia, które wprowadzają nowe komendy do środowiska.

Funkcje w Scratch są realizowane w sekcji „Inne bloki”, gdzie z jednej strony tworzysz własny blok, który można wstawiać do innych skryptów. Z drugiej strony musisz zebrać funkcjonalność tego bloku, czyli to, co będzie robił.

Nie ma zwracania wartości z funkcji w Scratch.
Tak więc nauka koncepcji programowania w środowisku z orientacją na zdarzenia ma swój wpływ. W zasadzie najpierw uczymy się bardziej skomplikowanych i abstrakcyjnych pojęć, a dopiero z biegiem procesu przechodzimy do elementów programowania strukturalnego. Czy to jest plus czy minus dla pierwszego kontaktu – to kontrowersyjna kwestia.
Źródło: habr.com
