Программы из блоков-пазлов: чем удобны новичку и как стать текстом

Тренажёрыобновлено 07.10.202610 мин чтенияесть тренажёр

Блочное программирование — способ писать программы, собирая их из готовых цветных блоков, как из пазлов, вместо того чтобы набирать текст. Каждый блок — это команда, цикл или условие, и неподходящие детали просто не стыкуются. Так начинают в Scratch и ScratchJr, а идеи из блоков потом почти один к одному переходят в Python.

Загружаем…

Что такое блочное программирование

Блочное программирование — это визуальный способ записи алгоритма: команды выглядят как прямоугольные блоки с надписями, а программа — как столбик сцепленных блоков. Компьютер выполняет их сверху вниз, как строки обычного кода.

У каждого блока есть форма, и она подсказывает, куда его можно поставить. Блок-команда похож на кирпичик с выступом снизу и выемкой сверху, поэтому цепляется под другой командой. Блок цикла напоминает букву «С»: внутрь его «пасти» вкладывают то, что надо повторять. Блок условия тоже обнимает вложенные команды, а у варианта «если … иначе» таких «пастей» две. Числа и слова вписывают в белые окошки на самом блоке, например число повторов.

Новичку не нужно помнить, как пишется команда: все блоки лежат в палитре, разложенной по цветам. Достаточно найти нужный и перетащить его мышью. Создатели Scratch из MIT Media Lab описывают этот принцип как «низкий порог, высокий потолок»: начать легко, а собрать можно и сложную игру[1].

Почему блоки удобны новичку

Блоки снимают 3 главные трудности первых занятий: не нужно печатать, нельзя сделать опечатку и почти нельзя нарушить синтаксис. Всё внимание остаётся на самой идее алгоритма.

В текстовом языке одна пропущенная скобка или двоеточие останавливает программу, и ребёнок 8–9 лет тратит урок на поиск символа вместо того, чтобы думать о логике. В блочной среде такая ошибка невозможна: блок либо встал на место, либо нет. Ошибки, конечно, остаются, но они смысловые — не та команда, не то число повторов, не тот порядок. Именно их и полезно учиться находить, и блочное программирование делает такие ошибки наглядными: робот врезался в стену, спрайт ушёл за край сцены.

Что сравниваемБлокиТекстовый код
Как набирать командыПеретаскивать мышью или пальцемПечатать на клавиатуре
Синтаксические ошибкиПочти невозможныЧастые: скобки, кавычки, отступы
Список командВсегда виден в палитреНужно помнить или искать
Скорость набора больших программМедленнаяБыстрая
Подходящий возраст начала5–7 лет (ScratchJr), 8 лет и старше (Scratch)Обычно 10–12 лет и старше

Второе преимущество — мгновенный результат. Нажал на блок, и спрайт уже идёт по сцене или робот делает шаг. Такая обратная связь удерживает интерес лучше, чем чёрное окно с текстом. Митчел Резник называет это обучением через проекты и игру: ребёнок делает то, что ему интересно, и попутно осваивает понятия[2].

Какие бывают блочные среды

Блочные среды различаются по возрасту: ScratchJr рассчитан на 5–7 лет, Scratch — прежде всего на 8–16 лет, а тренажёры вроде лабиринта на этой странице дают короткие задачи на одну идею.

ScratchJr — бесплатное приложение для планшетов. Блоки в нём почти без слов: стрелки и картинки, поэтому читать уметь не обязательно. Scratch работает в браузере и офлайн, а его блоки подписаны словами и делятся на категории: движение, внешний вид, звук, события, управление, сенсоры, операторы и переменные. Проект Scratch разрабатывает группа Lifelong Kindergarten в MIT Media Lab, а поддерживает Scratch Foundation. Подробно о среде и её возможностях рассказывает статья про Scratch для детей.

Тренажёр «Робот в лабиринте» на этой странице устроен проще Scratch: в палитре всего несколько блоков, а цель одна — довести робота до флажка. Зато в нём хорошо видно, как один блок цикла заменяет десяток одинаковых команд.

Как блоки соответствуют коду Python

Почти у каждого блока есть точный аналог в Python: «повторить 4 раза» — это for i in range(4):, «если» — это if, а «повторять, пока не» — это while not. Меняется запись, а логика остаётся прежней.

БлокЗапись в PythonЧто общего
«повторить 10 раз»for i in range(10):Тело выполняется заданное число раз
«повторять всегда»while True:Бесконечное повторение
«повторять, пока не …»while not условие:Повтор до наступления события
«если … то»if условие:Выполнить, только если условие истинно
«если … то … иначе»if …: и else:Выбор одной из двух веток
«задать счёт значение 0»score = 0Присваивание переменной
«сказать Привет»print("Привет")Вывод текста

Главное соответствие касается вложенности. Блоки, которые лежат внутри «пасти» цикла, в Python пишутся с отступом в 4 пробела под строкой с двоеточием — так рекомендует руководство PEP 8[3]. Вот программа уровня 6 из тренажёра ниже, переписанная текстом: робот 4 раза проходит три клетки и поворачивает направо.

def forward():
    print("вперёд")

def right():
    print("направо")

for i in range(4):
    for step in range(3):
        forward()
    right()

Функции forward и right здесь только печатают название команды, поэтому код можно запустить в любом окне Python на сайте и увидеть 16 строк: по три «вперёд» и одному «направо» четыре раза. Обратите внимание, что внутренний цикл вложен во внешний ровно так же, как блок «вперёд» лежал бы внутри второго блока «повторить». Больше примеров связи блоков с текстом — в статье про циклы в Scratch.

Попробуйте: 4 уровня с циклами

В тренажёре над статьёй 4 уровня — с 5-го по 8-й, и каждый решается короче, если использовать цикл. Соберите программу, нажмите «▶ Запустить» и посмотрите, сколько блоков в ней понадобилось.

На уровне 5 «Длинный коридор» восемь шагов вперёд сворачиваются в «повторить 8 раз» с одним блоком внутри. На уровне 6 «Вокруг стены» внутри цикла уже четыре блока, а на уровне 7 «Ступеньки» перед циклом нужен ещё один шаг. Уровень 8 «Пока не у флажка» вводит повтор с условием: робот не знает длину коридора и сам проверяет, есть ли впереди стена. В Python тот же приём выглядит так:

corridor = 9
position = 0
while position != corridor:
    position += 1
    print("шаг", position)
print("У флажка!")

Цикл while повторяет тело, пока условие истинно, и останавливается, когда робот дошёл до девятой клетки. Все 12 уровней, включая условия и правило правой руки, собраны на странице «Робот в лабиринте» с разбором.

Когда и как переходить к тексту

Если ребёнок уверенно собирает циклы, условия и переменные из блоков и уже упирается в ограничения среды, пора пробовать текст. Чаще всего это происходит в 10–12 лет, но точного возраста нет.

Признаки готовности такие: проекты становятся длинными, блоки не помещаются на экране, хочется написать то, чего нет в палитре. Переход лучше делать постепенно. Сначала возьмите знакомый проект из блоков и перепишите его на Python, сверяясь с таблицей выше. Потом решите несколько задач, где нужно напечатать результат, и только затем начинайте новые программы с нуля. По федеральной образовательной программе основного общего образования программирование на уроках информатики начинается в 8 классе, и язык учитель выбирает из списка: Python, C++, Паскаль, Java, C# или Школьный алгоритмический язык[4]. Ребёнок, который пришёл из блоков, обычно узнаёт на уроках знакомые циклы и условия. Пошаговое сравнение двух путей — в статье Scratch или Python: что выбрать.

Миф: «Блоки — это не настоящее программирование, они только мешают потом учить текст». Это не подтверждается: в блоках те же последовательности, циклы, условия и переменные, что в любом языке. Бреннан и Резник относят эти понятия к основе вычислительного мышления независимо от формы записи[5].

Когда блочное программирование не подходит

Блоки не подходят там, где программа большая, нужна точная работа с текстом и числами или где важна скорость набора. Вот 4 таких случая.

  • Программа длиннее 100–200 блоков. Её трудно охватить взглядом, а текстовая запись занимает в несколько раз меньше места.
  • Подготовка к заданию 16 ОГЭ. Его выполняют на универсальном языке программирования, а блоков в списке нет.
  • Подростку 14–15 лет неинтересны спрайты и котики. Ему чаще подходит сразу Python с задачами и мини-играми.
  • Нужна обработка 1000 строк текста или таблиц. Для таких задач в блочных средах просто нет удобных инструментов.

Чего делать нельзя

Нельзя бесконечно оставаться на одном уровне сложности: блоки — ступенька, а не конечная цель. Шесть правил помогут не застрять.

  • Нельзя собирать программы только по образцу — после каждого урока нужен хотя бы маленький собственный проект.
  • Не стоит перепрыгивать через циклы и сразу браться за сложную игру: без них проект превратится в стену одинаковых блоков.
  • Не следует торопить переход к тексту, если ребёнок ещё путает порядок команд.
  • Не стоит переходить к тексту без связи с блоками: покажите, что for — это знакомое «повторить».
  • Не допускается ругать за «детские» блоки — подростку можно просто предложить текстовый язык.
  • Нельзя ждать, что блоки сами по себе разовьют мышление: польза появляется при продуманных занятиях.

Миф: «Кто начал с блоков, будет программировать лучше всех». Такого доказанного эффекта не существует. Метаанализ Scherer и соавторов говорит лишь о среднем положительном влиянии обучения программированию на другие навыки и о том, что перенос не происходит автоматически.

Источники

[1] Maloney J., Resnick M., Rusk N., Silverman B., Eastmond E. The Scratch Programming Language and Environment // ACM Transactions on Computing Education. 2010. Vol. 10, № 4. Article 16.

[2] Resnick M. Lifelong Kindergarten: Cultivating Creativity through Projects, Passion, Peers, and Play. Cambridge, MA: MIT Press, 2017.

[3] van Rossum G., Warsaw B., Coghlan N. PEP 8 — Style Guide for Python Code. Python Software Foundation, 2001.

[4] Приказ Минпросвещения России от 18.05.2023 № 370 «Об утверждении федеральной образовательной программы основного общего образования».

[5] Brennan K., Resnick M. New frameworks for studying and assessing the development of computational thinking // Proceedings of the 2012 Annual Meeting of the American Educational Research Association. Vancouver, 2012.

[6] Scherer R., Siddiq F., Sánchez Viveros B. The cognitive benefits of learning computer programming: A meta-analysis of transfer effects // Journal of Educational Psychology. 2019. Vol. 111, № 5. P. 764–792.

[7] Flannery L. P., Silverman B., Kazakoff E. R., Bers M. U., Bontá P., Resnick M. Designing ScratchJr: Support for early childhood learning through computer programming // Proceedings of the 12th International Conference on Interaction Design and Children. 2013. P. 1–10.

Вопросы и ответы

С какого возраста можно начинать блочное программирование?

С 5–7 лет в ScratchJr, где блоки почти без слов, и с 8 лет в Scratch. Разработчики ScratchJr создавали его именно для дошкольников и младших школьников.

Нужно ли уметь читать?

Для ScratchJr — нет, там команды обозначены картинками. Для Scratch и тренажёров с подписанными блоками чтение уже нужно.

Можно ли из блоков сделать настоящую игру?

Да. В Scratch собирают платформеры, викторины, лабиринты и мультфильмы, а готовыми проектами делятся в сообществе.

Сколько времени уходит на переход к тексту?

Обычно несколько недель регулярных занятий, если идеи циклов и условий уже понятны. Новыми оказываются в основном запись и отступы.

Есть ли блоки в школьной информатике?

Программа 8–9 классов требует текстового языка, но исполнители вроде Робота и Черепашки по логике очень похожи на блочные задачи.

Почему в тренажёре нет блока для переменных?

Тренажёр тренирует только движение, циклы и условия. Переменные удобнее осваивать в Scratch или сразу в Python.