Scratch — язык программирования для детей
Применения визуального языка программирования Scratch и возможности его использования.
Тенденция на повышение компьютерной грамотности и освоение технологий с самого раннего возраста привела к тому, что все больше родителей хотят обучать детей основам программирования с раннего возраста. Создание сайтов или своих проектов в привычных средах разработки вряд ли заинтересует 7-летнего ребенка, и для решения этой проблемы в 2003 году в MIT появился первый прототип языка Scratch, специально предназначенного для обучения школьников младших и средних классов основам создания собственных игр, анимаций и совместной работы над проектами.
Что такое Scratch
Скретч создан как продолжение идей языка Лого и конструктора Лего. Скретч 1.4 был написан на языке Squeak, Скретч 2.0 и 3.0 ориентированы на работу онлайн. Скретч 2.0 был переписан на Flash и ActionScript. Скретч 3.0 (текущая версия) является улучшенной версией Скретч 2.0 и сделана на HTML5, используя движок WebGL, что даёт ему возможность работать на мобильных устройствах и планшетах. Скретч разрабатывается небольшой командой программистов для детей в Массачусетском технологическом институте. Текущая версия — Скретч 3.0, выпущена в январе 2019 года.
Scratch — это визуальная объектно-ориентированная среда программирования. В ней ученики управляют объектами-спрайтами. Для них задается графическое представление, которое может быть импортировано из любого источника изображения, и скрипт действий, который составляется из блоков по принципу drag-and-drop. Эти блоки бывают нескольких видов:
Самое распространенное применение Scratch — это обучение детей программированию в форме создания мультфильмов или игр. Помимо этих применений, Scratch можно использовать для образовательных целей и создавать в программе иллюстративные материалы для уроков не только по программированию, но и по истории, биологии, физике и другим предметам. С версии 2.0 была добавлена функция звукового редактора, что расширяет возможности работы с разными видами данных.
Примеры приложений
Вот несколько примеров проектов, созданных при помощи платформы:
Как начать разработку на Скретч
Пользоваться Scratch можно полностью бесплатно как в онлайн-версии, так и в офлайн-редакторе. В 2014 году также вышла версия Scratch для детей младшего возраста под названием ScratchJr. Это мобильное приложение для Android и iOS, в котором дети так же управляют спрайтами, только в более упрощенной форме. В блоках не используется текст, поэтому дети могут учиться программировать до того, как научатся читать, и им доступен ограниченный набор действий: простые движения спрайтов и работа со звуками и изображениями.
Визуальные языки программирования
Это один из наиболее популярных визуальных языков программирования, который подходит для обучения разработке детей разных возрастов. Создан Митчелом Резником, профессором Массачусетского технологического института. Основная цель – вовлечение детей в процесс обучения. Причем скретч с успехом используется не только для преподавания основ программирования, но и на уроках математики, например.
Создание Scratch, а также его дальнейшее развитие обеспечивается, в первую очередь за счет взаимодействия с известной компанией LEGO. Именно это и позволило начать обучение робототехнике для самых маленьких на базе все того же визуального языка программирования.
В отличие от многих других инструментов разработчика, Scratch не требует знаний синтаксиса. Здесь нет необходимости в написании кода, что было бы затруднительным и, главное, утомительным для любого ребенка. Вместо этого, предлагаются готовые блоки, с помощью которых ребенок сможет постичь азы и принципы разработки в целом.
Например, с помощью Scratch детям намного проще объяснить такие основы основ, как функции, циклы и ветвления. Причем в результате своих действий в Scratch, ребенок создает какую-то игру или мультипликацию, что еще и очень увлекательно. Scratch имеет несколько версий. Последней на сегодняшний день является 3.0
Этот продукт известной компании Google представляет собой библиотеку для создания среды визуального программирования. Появился в 2012 году и с тех пор активно развивается. В основном, применяется для учебных целей. Как и в случае со Scratch или App Inventor, разработчику не нужно писать код для создания программ. Есть готовые блоки, которые необходимо перетаскивать.
У этой библиотеки есть облачное хранилище, с помощью которого можно делиться созданными приложениями с другими. Blockly переведен на многие языки, в том числе русский. Однако не стоит забывать о том, что языком программирования является английский. Поэтому изучать стоит именно его.
Этот визуальный язык программирования появился еще в 1998 году. Разработан Университетом Карнеги-Меллона. Написан на Java. Последняя версия языка появилась в 2013 году. То есть он не так активно развивается, как многие его конкуренты, в том числе Scratch.
Принцип работы с Алисой тот же, что и с другими подобными средами и платформами. Пользователь перетаскивает готовые блоки для создания программ. Правда, сам интерфейс выглядит несколько сложнее и язык, в целом, предназначен больше для обучения взрослых программистов. Хотя дети, уверенно читающие на английском могут вполне неплохо разобраться во всех премудростях Алисы.
Этот визуальный язык программирования создан в 1996 году. Разработан Аланом Кеем на базе языка программирования Squeak (на основе классов). Идея eToys примерно та же, что и у Scratch – создать такую платформу, которая позволила бы детям без труда получить представление об основах программирования без использования кода.
В программе можно создавать любые типы анимаций, то есть делать готовые приложения с помощью предлагаемых блоков, оборачивая их в функции. Также, есть возможность тестирования уже созданных приложений с помощью внутренних ресурсов eToys. Многие эксперты считают, что именно eToys стал прообразом для создания в будущем визуального языка программирования Scratch.
Это еще один визуальный язык программирования, предназначенный именно для обучения детей разработке. Из названия понятно, что речь идет о черепашке. Именно с помощью виртуальной черепахи ребенок будет знакомиться с основами программирования.
На русский язык переводится как щелчок. Идея в том, что разработчик может писать приложения «как по щелчку пальцев». То есть быстро и с готовым набором команд. Появился Snap! В 2011 году. Его разработчиком является Брайан Кейт Харви. Данный визуальный язык программирования можно использовать для обучения детей разного возраста.
Snap! создавался как одно из продолжений идей Scratch. Данная платформа имеет очень удобный интерфейс. Экран разделен на три основных области, каждая из которой имеет свой собственный функционал. Здесь предлагается набор готовых действий, которые можно комбинировать и, тем самым, создавать игры и различные анимации.
И действительно, почему бы не начать с обычных текстовых языков, вроде JavaScript, Python или Java? Преимуществом визуальных платформ в данном случае является то, что они позволяют значительно облегчить процесс понимания и восприятия программирования детьми. То есть они как бы изымают из программирование все то, что ребенку не понадобится на этапе изучения азов, позволяя быстрее проходить путь от появления идеи до конечного результата.
Например, для того, чтобы сделать простую анимацию в Scratch, ребенок будет использовать всего несколько готовых блоков. Сделать тоже самое, например, на языке JavaScript намного сложнее. По крайней мере, до своей первой анимации в JS ребенок дойдет намного позже, так как ему придется изучить синтаксис, а на это может уйти до года.
А почему бы сразу не начать изучать синтаксис?
Это тоже вполне резонный вопрос. Для взрослого именно такой путь и является единственно правильным. Но не будем забывать, что взрослый, изучающий программирование, имеет вполне конкретные цели. Например, он хочет стать разработчиком, сменить сферу деятельности, рассчитывает на более высокую заработную плату.
У ребенка нет такой цели. Поэтому ему важно, чтобы результат был как можно ближе по времени к моменту, с которого он начинает программировать. Если начать преподавать маленьким детям синтаксис языка программирования, скорее всего, они быстро устанут и потеряют интерес. Именно поэтому и были разработаны визуальные языки. Они помогают постичь азы разработки, вникнуть в функции, ветвления, переменные и уже после этого, при желании продолжать, ребенок через какое-то время сможет начать учить один из текстовых языков программирования.
Выбор между визуальным и текстовым программированием для детей
Недавно попалась интереснейшая английская статья, написанная Трейси Гарднер из TechAgeKids. В ней она делится интересными мыслями по поводу программирования детьми в текстовых и визуальных языках. Она приводит интересные наблюдения, которые совпадают с моим опытом развития детей в программировании. Представляю вам перевод данной статьи.
Выбор между визуальным и текстовым программированием для детей
Говорят, что дети должны начинать с визуальных языков программирования, таких как Скретч (Scratch), а затем переходить к текстовым, например Python или JavaScript. Я считаю, что это просто смешно, особенно если учитывать, что большую часть карьеры я работал над созданием визуальных языков, позволяющих сделать разработку программного обеспечения более доступной для тех взрослых, которые обладают предметными знаниями, но не опытом программирования. Я также потратил много времени на разработку программного обеспечения с использованием визуальных языков (зачастую включающих текстовые фрагменты).
В этой статье рассказаны все подробности. Сразу подведу итог для родителей, которые интересуются, нужно ли их ребенку переходить к языкам на основе текста:
Почему мы учим детей программировать?
Прежде всего, давайте взглянем на то, зачем мы учим детей программированию. Некоторые дети станут программистами в будущем. Другие займут рабочие места, на которых наряду с другими знаниями требуются элементарные навыки программирования. Остальных нужно обучить программированию просто для того, чтобы они лучше понимали мир, в котором живут, были в состоянии контролировать его.
Чему мы учим детей?
При обучении детей младшего возраста моя цель состоит не в том, чтобы дать им профессиональные навыки. Я пытаюсь научить их двум основным вещам:
Когда вы обучаете подростков, заинтересованных в программировании, робототехнике и т.п., во главу ставится обучение соответствующим навыкам. Вы можете использовать тот же подход для обучения способных детей младшего возраста, особенно когда у тех есть родители, готовые помочь детям использовать известные им самим языки программирования, но намного меньше родителей, мотивированных помогать с детскими языками программирования.
Что такое визуальные и текстовые языки?
Легче дать определение текстовым языкам программирования. Эти языки, введенные с клавиатуры и хранящиеся в виде текстовых файлов.
Графический или визуальный язык, как правило, использует функцию перетаскивания, а не ввода. Он может содержать значки или текстовые метки на блоках и элементах. Часто используются такие GUI элементы, как диалоги и выпадающие меню выбора.
Популярные детские языки – это Блокли (Blockly) и блокли-подобные.
Как правило, когда люди говорят о текстовых языках, они ссылаются на такие языки программирования, как Python, Lua и JavaScript, которые являются «реальными» языками программирования и используются профессиональными разработчиками программного обеспечения.
Интересно, что есть и детские текстовые языки программирования, например, Лого (Logo) и Снифф (Sniff) (не блокли-подобные, а именно текстовые), которые можно рассматривать в качестве ступеньки между визуальными и текстовыми языками.
Удобство обучения и запоминания
Одна из важных особенностей визуальных языков – то, что дети не должны помнить список команд или сложный синтаксис, который их окружает. Это слишком большое количество данных для детей, изучающих новый язык программирования.
Множество профессиональных разработчиков программного обеспечения тратят десятки часов еженедельно, программируя на одном языке. Это означает, что взрослые могут запомнить многое о синтаксисе и API и, когда знания понадобятся, они мгновенно доступны.
Дети, как правило, находятся в других обстоятельствах. Многие дети будут писать код только во время еженедельного 45-минутного урока, так что они никогда не смогут достичь мастерства и будут вынуждены постоянно повторять команды.
Мой младший сын любит использовать электронные компоненты SAM Labs и изобретать оригинальные штуковины.
Между рабочими сессиями в SAM Labs может пройти несколько недель, но он по-прежнему сможет мгновенно вспомнить, как соединить блоки в визуальном редакторе. Я уверен: если бы для достижения того же результата он использовал текстовый язык, было бы значительно сложнее найти, на чем он остановился. На самом деле, для решения более сложных задач SAM Labs действительно использует текстовое программирование, и, когда я помогаю сыну, за период между сессиями сам успеваю забыть нюансы языка. (Чем быстрее SAM Labs смогут реализовать большинство возможностей в визуальном слое, тем лучше).
Конечно, удобная среда программирования может облегчить обучение и запоминание синтаксиса текстовых языков. Хорошая IDE (интегрированная среда разработки) с этим сильно помогает. Но универсальность типичного языка программирования затрудняет предоставление языка в той же доступной форме, которая есть в Scratch или блокли-подобных языках.
Ошибки синтаксиса
Ошибки в синтаксисе – огромная проблема детей и взрослых. Кто хочет тратить дни, считая скобки, исправляя опечатки или выискивая пропущенное двоеточие, которое точно должно где-то быть?
Да, хорошие редакторы могут помочь вам обнаружить эти ошибки, но даже лучшие редакторы не позволяют сделать синтаксическую ошибку и не исправить ее. В Scratch вы работаете непосредственно с концепцией программирования вместо того, чтобы разбивать ее на отдельные фрагменты задач. (Это иногда разочаровывает, если, например, вы хотите поменять местами повторения в бесконечном цикле. Но это просто работа, сделать ее не сложно. – Вся сложность в том, чтобы упростить полученное решение.)
Дети часто не имеют доступа к отличным инструментам, и в конечном итоге оказываются в ситуации, когда приходится бороться с синтаксическими ошибками. Я обнаружил, что CodeCombat – отличный способ познакомить детей с текстовым программированием и различными IDE, но эта платформа – не универсальная среда программирования.
Существуют проекты, нацеленные на перенос преимущества визуального редактирования в текстовую среду программирования для детей (например, редактирование на основе фреймов).
Иконки против текста
Некоторые визуальные языки полагаются на изобразительные символы или значки, например, LEGO Mindstorms в своем программном обеспечении использует обозначения на основе пиктограмм.
Для маленьких детей, которые еще не умеют читать код, часто используют изображения. Если дети научились читать, то, чтобы достойно конкурировать с текстовыми метками, система на основе пиктограмм должна быть очень хорошо разработана. Если ребенку для понимания увиденного приходится в уме проделывать путь от изображения к слову, вы только создаете ему дополнительные сложности.
Такие языки, как Scratch и Блокли, используют на перемещаемых визуальных элементах текстовые метки. Мой опыт показывает, что для умеющих читать детей это –лучший рабочий вариант.
Визуальный – не значит «упрощенный до нуля»
Профессиональные разработчики программного обеспечения часто предполагают, что такие языки, как Scratch являются «упрощенной дальше некуда» версией программирования.
Но все не совсем так. Что реально делает Scratch, так это удаляет лишние детали, которые на самом деле лишь мешают детям быстро пройти путь от зарождения идеи до запуска кода.
Вместо того, чтобы тратить дни и обнаруживать, что в конце строки пропущено двоеточие, дети могут провести больше времени в размышлениях о логике своего проекта. Они реально тратят больше времени на вычислительное мышление и меньше на то, чтобы осчастливить компьютер.
Scratch может быть сложным настолько, насколько это необходимо. Вы можете рисовать в нем фрактальные деревья и решать сложные проблемы синхронизации.
Я подробнее осветил эту тему в статье «Scratch – неправильный подход к компьютерному программированию, не так ли?» (Статья автора на английском).
Линейность против альтернативности
Одна из особенностей текстовых языков – то, что они по своей природе линейны. Текстовые языки не очень хорошо показывает связи между различными частями кода (хотя, конечно, эти связи там есть и должны быть пройдены парсером).
Визуальные языки обычно поддерживают нелинейную структуру. Современное программирование, особенно разработка игр, аппаратное обеспечение и Интернет вещей, зачастую работают на основе событий и выполняются одновременно. Код – это не книга, он не выполняется последовательно от начала до конца.
В Scratch я могу организовать код, чтобы переместить спрайт следующим образом:
Это ведет непосредственно к фактическому движению спрайта. В текстовом языке понадобилось бы поместить команды в произвольном порядке, и вы бы потеряли дополнительную информацию.
Я изучил Sonic Pi, текстовый язык для создания музыки, и меня обескуражила сложность создания линейного кода, который должен работать одновременно.
В Scratch есть функция для создания макета кода в 2D-пространстве, так что, если вы пишете музыку для нескольких, звучащих одновременно, инструментов, вы можете просто выложить участки кода по горизонтали или разместить их в различных спрайтах, которые будут выполняются одновременно автоматически. Для Scratch параллелизм – это естественная концепция.
Однако, Scratch по-прежнему в основном линейный. Может быть трудно понять модели поведения, которые зависят от одного передающего сообщение спрайта, и нескольких других, которые его получают.
Воркшоп Wonder использовал другой подход к языку Wonder для роботов Dash&Dot. В нем используется многопоточность. Потоки обычно применяют для описания бизнес-процессов точным (и иногда исполняемым) способом. Блоки состояния часто используются в системах управления. Это полезное средство для описания поведения систем, которые ведут себя по-разному в зависимости от текущего состояния.
Очень интересен подход к программирование в Minecraft, там используют смесь текстовых команд и визуальных блоков в 3D-пространстве. Код фактически является частью мира, а ведь для многих детей Minecraft столь же реален, как и настоящий мир вокруг. (Подумайте об Интернете вещей и даже большем!)
(Я еще даже не затрагивал обучение детей искусственному интеллекту и основам машинного обучения, которые требуют различных стилей языка. Поговорим об этом подробнее в будущем.)
Визуальный – не значит «медленный»
Взрослые, которые мало времени проводят с детьми, учащимися программировать на визуальных языках, часто предполагают, что программирование на визуальном языке происходит медленно. Медлительность ощущает взрослый человек, который сравнивает скорость разработки кода в визуальной среде с его скоростью набора кода в текстовой среде.
Но лишь немногие дети умеют печатать быстро, поэтому смотреть на их попытки писать текстовый код действительно тяжело. (Да, они должны научиться печатать, но это тема другой беседы.) Они также делают много опечаток: орфовизуальных ошибок, лишних пробелов.
Кроме того, большая часть времени, затраченного на программирование – это время размышлений. Мысли о том, чего вы хотите добиться от приложения и какой код для этого использовать, занимают больше часов, чем сама процедура ввода команд.
Как насчет сенсорных экранов?
Для многих современных детей первым опытом работы за компьютером становится телефон или планшет с сенсорным экраном. Визуальные языки очень легко переводить на сенсорный интерфейс. Большинство маленьких детей гораздо быстрее работают с интерфейсом перетаскивания на планшете, а не при помощи клавиатуры и мыши или трекпада. И у большинства подростков телефон все время находится под рукой.
Существует множество приложений типа Scratch Junior или Pocket Code, которые эффективно используют сенсорный интерфейс, чтобы позволить «поколению смартфонов и планшетов» писать код.
Microsoft создал сенсорный язык разработки, ориентированный на телефоны и планшеты. Это текстовый язык, но фактически в нем снижена доля набора благодаря использованию нажатий. Эта идея, безусловно, заслуживает изучения.
Apple запускают приложение Swift Playground, которое будет учить детей писать на языке Swift, используя все возможности мультитача на IPad.
Дети часто создают визуальные программы
Дети часто создают визуальные приложения и игры. Визуальные языки зачастую имеют очень тесную связь между конечным результатом и используемым для его достижения языком.
Например, в Scratch вы можете нажать на спрайт, чтобы изменить свой код. Это прямое соединение снижает познавательную перегрузку при разработке визуального приложения.
В Minecraft код действительно встроен в окружающую среду. Управление потоком достигается с помощью игровой пыли Redstone.
Дети и визуальная среда
Большинство детей предпочитают визуальную среду, ведь она приносит им больше удовольствия. Работа в ней ощущается как менее тяжелая. Среда на основе текста может показаться детям довольно сухой. Такие компании, как Tech Rocket, пытаются сделать текстовое программирование интереснее – достаточно посмотреть на их бесплатный учебник Python.
Тяжелее – не значит лучше
Ребенка, который хорош в создании игр на Scratch, может очень разочаровать переход к среде, где создавать подобные игры намного сложнее. Не «по-взрослому» делать больше работы, чем это необходимо.
Иногда приходится затруднять процесс, идя на компромисс ради большей гибкости. Но я считаю, что в других случаях профессиональным языкам разработки ПО и IDE есть чему поучиться у Scratch и подобных языков.
Что насчет смешения визуальной и текстовой основы?
Существует тенденция предлагать детям инструменты, которые позволяют создать из блоков и текстовых команд один и то же код. При этом именно текстовый код считается «реальным» языком программирования.
Например, это предлагается в Code.org и CodeKingdoms and the Microsoft micro:bit (редакторе битовых блоков).
Достаточно хороший подход, ведь сын может частично применять знания текстовых языков в визуальной среде.
Как насчет детских версий языков?
Язык программирования Ready позволяет детям и подросткам писать игры в среде, которая работает поверх игрового движка Unity.
Это интересный подход, который позволит устранить одну из основных претензий к таким языкам, как Scratch – в конечном счете вы можете создать приложение, которое можно запустить вне Scratch или представить на App Store.
Взрослые тоже используют визуальные языки
Визуальные языки могут быть эффективнее текстовых, если используются для решения разовых задач или непрограммистами, которые обладают предметными знаниями.
Программирование все больше входит в повседневную жизнь. IFTTT (если это, тогда то) – очень популярный сервис, который позволяет людям автоматизировать свою жизнь. Он использует визуальный редактор для создания правил. Вам не придется изучать сложный синтаксис для использования IFTTT, вы просто используете собственный редактор. Является ли это на самом деле программированием? Ну, подход предполагает, что вам придется писать код, чтобы сделать все по-другому. Он – то, что нужно, чтобы больше людей могли запрограммировать свою жизнь без необходимости изучать сложный язык.
Игровые движки часто на нижних уровнях детализации сочетают визуальные редакторы с текстовым кодом.
Создатели программного обеспечения всегда ищут способы, позволяющие включить в программные решения менее технически сфокусированных бизнес-пользователей. Эти пользователи обычно понимают (и определяют) бизнес-процессы в организации: определяют детали работы банковского счета или расчета скидок. Они должны быть в состоянии точно указать нужное поведение, чтобы компьютер может выполнить код, но они не хотят беспокоиться о таких вещах, как ошибки синтаксиса импорта библиотек и превращение типов integer в string, так что вы можете добавить их в рассылку.
Также существует практика предлагать взрослым неспециалистам использовать визуальные языки, позволяющие им быстро приступить к работе. Например, эта статья содержит много примеров визуального программирования в Интернете вещей. Для многих людей программирование является средством для достижения цели, а не самоцелью! Если среда на основе блоков делает программирование доступным большему числу людей, это просто фантастика.
Возможно, многие дети, которые учатся программировать сегодня, позже будут в своей работе и хобби использовать визуальные, а не текстовые языки.
Некоторые дети любят текстовое программирование
Некоторые дети с самого раннего возраста искренне любят текстовое программирование. Безусловно, не стоит останавливать их, наоборот, есть все основания для поощрения.
Многие маленькие дети способны писать HTML&CSS и изучать Python, JavaScript или Lua. И для некоторых соблазн написать моды Minecraft приведет к изучению Java. Сегодня вышеперечисленные языки – лучшие инструменты для решения различных задач. А некоторые дети просто хотят научиться программировать, чтобы поднять академическую успеваемость.
Все это – важные аспекты. Я сам был одним из таких детей! (Только в мои дни были языки Spectrum Basic и C на Amiga.)
Но это не значит, что все маленькие дети обязаны выучить текстовый язык или что текстовые языки «лучше».
Резюме
Текстовое программирование – не приоритет в обучении дошкольников и детей младшего школьного возраста.
Программирование в Scratch и других визуальных языках может не только послужить ступенькой для дальнейшего изучения Python и Java. Изучение Scratch полезно само по себе, и некоторые дети продолжат использовать визуальную среду, но уже «взрослую».
Цель обучения – дать детям навыки создания цифровых проектов и профессиональные знания, которые можно применить независимо от языка программирования.
Конечно, некоторые дети станут разработчиками программного обеспечения и должны будут изучать языки, которые используются в коммерческой разработке. Но они должны будут выучить текстовый язык потому, что это подходящий инструмент для разработки их проекта; потому, что они заинтересованы и/или это принесет пользу их профессиональному мастерству. И переходить к этим языкам нужно, когда они достаточно улучшат навыки печати. До тех пор больше пользы принесут визуальные языки программирования.
Я предпочел бы научить ребенка программировать в Scratch, чтобы он мог с энтузиазмом создавать фантастические проекты, а не заставлять того же ребенка бороться с синтаксисом в текстовом редакторе. Ведь так он больше узнает о вычислительном мышлении и будет иметь лучшее представление о мире технологий вокруг.
Дополнительная информация для родителей. Мне известно про зимний городской лагерь в котором дети будут программировать на Scratch и создавать свои проекты для решения реального кейса. Он проходит в центре Москвы 4-6 января 2017. Если это будет вам интересно и полезно, пожалуйста, смотрите подробности здесь.



