Что такое блочное программирование
Блочное программирование — это визуальный способ записи алгоритма: команды выглядят как прямоугольные блоки с надписями, а программа — как столбик сцепленных блоков. Компьютер выполняет их сверху вниз, как строки обычного кода.
У каждого блока есть форма, и она подсказывает, куда его можно поставить. Блок-команда похож на кирпичик с выступом снизу и выемкой сверху, поэтому цепляется под другой командой. Блок цикла напоминает букву «С»: внутрь его «пасти» вкладывают то, что надо повторять. Блок условия тоже обнимает вложенные команды, а у варианта «если … иначе» таких «пастей» две. Числа и слова вписывают в белые окошки на самом блоке, например число повторов.
Новичку не нужно помнить, как пишется команда: все блоки лежат в палитре, разложенной по цветам. Достаточно найти нужный и перетащить его мышью. Создатели 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.