Учим программировать

Среды для обучения детей программированию

Сам вопрос «Стоит ли учить детей программировать?» достаточно спорный. Я не хотел бы его здесь обсуждать. Вопрос в другом. Если вы вынуждены обучать детей программировать, то на каком языке и в какой среде это делать? Делать для чего? Пока будем рассматривать преподавание программированию как самоцель. Т.е. Вы должны привлечь внимание ребенка к этому виду деятельности, заставить его сфокусироваться на ней, получать удовольствие от процесса. И только.
Дальше я рассмотрю несколько пригодных для этого сред и буду дописывать и корректировать материал по мере того, как буду находить для этого время.

 

Microsoft Game Lab Kodu

Фрагмент программы дирижабля из моей учебной Kodu-игрыhttp://fuse.microsoft.com/page/kodu

Система для создания трехмерных игр. Практически игровой движок с уже заданными физическими явлениями и возможностью управлять ими в определенных пределах. Проектирование поведения ведется в почти удобном визуальном редакторе при помощи мыши. Готовые игры легко могут быть сделаны доступными сообществу (выложены в интернет). Выкладывается игра в формате, доступном для корректировки любому загрузившему ее человеку. Т.е. Open Sourse от Microsoft? Да.
На октябрь 2012 вижу совсем немного недоделок и багов. В основном они касаются создания и корректировки путей (дорог и т.п.). Программа могла бы стать совершенной сенсацией, если бы не некоторые недоделки, специально принятые ограничения.
Набор объектов ограничен. Средств и возможностей для пополнения библиотеки нет. Открыв в системе разработку компонент, можно было бы получить совершенно взрывную волну GameDev’а. Перечислим недостатки системы, поскольку её достоинства прямо кричат о себе сами и их реально много.

  • Игра доступна только в среде Kodu. Т.е. нужен интерпретатор, внутри которого работает игра и этот интерпретатор не встраивается в браузер, а запускается отдельной программой. Действуй Kodu в технике Adobe Flash Playr, и индустрия разработки казуальных игр заполнилась бы как минимум наполовину продукцией для него. Не верите? Создание достаточно занимательной игры в этой системе отнимает у опытного человека около часа!
  • Ну и последнее. Сейчас выкладывать и загружать игр в сеть можно не «на сайт» а во внутреннюю базу. Доступ к базе осуществляется из самой среды Kodu в виде простого списка. Т.е. вы не можете зайти на страничку выложенной Вами игры, проследить за ее загрузками, выложить следующую версию, поговорить с фанатами, отследить клоны и т.п. Можно задать версию игры и посмотреть сколько раз ее загружали, но через полдня Вы уже не найдете ее в списке и не поймете куда она делась. Доработка этой функции до уровня «магазина игрушек» со страничками размещенных игр безусловно привела бы ко взрыву интереса к ней.

Система программирования основана на задании поведения объектов. У каждого объекта своя программа. Программа выглядит как система продукций вида «Если…, то…». На самом деле более соответствует catch блокам, перехватывающим события. Обработчики могут вкладываться друг в друга. Нужно внимательно следить за порядком перехватов, поскольку не из всех обработчиков будет происходить возврат управления.
Общий вывод — система очень мощно и лаконично построена. Некоторые функции не реализованы или реализованы эклектично. Научить чему-то на ней ребенка можно легко, но этого чего-то не так уж и много. Качественную казуальную игру сделать можно, но в пределах очень ограниченного набора объектов и одного стиля.
Очень ждем развития. Потенциал идеи и продукта очень большой.

Scratch

Scratch со скриптами прыгающего мяча

http://scratch.mit.edu/

Созданная в серьезном месте (Массачусетский технологический институт) система позволяет манипулировать большой библиотекой плоских объектов-спрайтов. Часть объектов имеет прикрепленные скрипты на встроенном языке пазлов. Вообще всё программирование ведется на «языке пазлов». Т.е. операторы представляют собой кусочки пазла, которые можно соединять друг с другом для получения программы. Есть операторы цикла и условные, переменные и операции. Можно создавать и публиковать свои проеты. Проект имеет свою страничку. Известно кто создал, на каком проекте основан, какие есть продолжения (приемники), сколько загрузок, скольким понравился. Можно встраивать в вебстраничку в виде java апплета. Сделать что-либо занимательное практически нереально. Анимация строится из покадровых рисунков, называемых «костюмами». Мотивация у ребенка пропадает, когда ему становится ясно, что занимательного продукта не получить. Но на некоторое время хватает. Особенно, если воспользоваться средствами старого доброго Лого, опустить перо и строить забавные траектории.
Удается продемонстрировать элементы управляющих структур процедурных языков программирования. Имеются переменные, операции с ними (на английский манер называются операторами +, — и т.п.), сенсоры. Физики практически нет.
По сравнению с Kodu пользы больше, фана много меньше. Есть версии для трех популярных операционных систем с автоматической локализацией (в т.ч. русской и украинской).

Имеется несколько похожих проектов, которые нет смысла описывать отдельно. Например, BYOB 3.1 — Build Your Own Blocks (a/k/a SNAP!). Если Вы решили использовать Scratch, то обязательно посмотрите и их. При всей похожести, некоторые нюансы имеют принципиальное значение с точки зрения программирования и выбирать нужно лично.

StarLogo TNG

Фрагмент программы и вида исполнителя для StarLogo TNGhttp://education.mit.edu/projects/starlogo-tng

Проект из того же МИТа. В основе почти те же пазлы, что и в программе Scratch. Есть возможность использовать обычные алгоритмические конструкции типа условных операторов, можно создавать и вызывать процедуры, программировать события типа столкновений. Есть 3D. Физики нет, если не считать передвижения всегда по нормали к поверхности (так и деревья растут как колючки на ёжике). 3D исполнители воспроизводят минимальную анимацию.
Итог — методы программирования лучше всех остальных в обзоре, исполнители (управляемые программой объекты) реализованы значительно хуже Kodu, но чуть эффектней остальных 2D. Как вариант для обучения программированию при помощи мыши вполне приемлем. Если быть очень снисходительным к результату, то можно сделать что-то издалека напоминающее компьютерную игру.

Alice

Двуногие и четырехногий объекты на сценеhttp://www.alice.org/

Одна из наиболее раскрученных программ с хорошей методической поддержкой. Хотя по всем перечисленным программам можно найти литературу и для ученика, и для учителя (иногда даже на русском языке), по Алисе даже написали и защитили несколько диссертаций в области методики преподавания информатики. Тем не менее ждать чего-то  очень уж привлекательного не стоит. Доступная на сегодняшний день версия программы 3.1 не перекрывает, а скорее дополняет предыдущую версию 2. Это почти разные среды. В новой есть поддержка 3 D.  Программирование по-прежнему происходит перетаскиванием шаблонов блоков кода и заданием параметров. Правда, сами блоки текстовые, а не графические объекты-пазлы. Есть возможность переключаться со внутреннего языка системы на Java. Т.е. фрагменты перетаскиваемого кода будут теперь написаны на Java, что собственно мало что меняет в технике, но забавно. Видны конструкторы объектов, это полезно. И вообще, с точки зрения кода программа вполне подходит для освоения азов шагов недетского программирования. У объектов выделяются методы (отдельно процедуры, отдельно функции) и свойства. Некоторые объекты представлены трехмерными моделями, у которых отдельные (анатомические) части можно программировать самостоятельно. Т.е. можно поднять руку, повернуть кисть, наклонить голову и т.п. Правда действия выполняются последовательно, так что сложных движений не создать. Есть отношения между объектами. Т.е. можно «идти к…» или «идти от…», «стать перед…» и т.п.

Что все портит? Уже упомянутое отсутствие параллелизма в программировании движений и главное… Физики нет. Объекты-приведения проходят друг сквозь друга.

Конечно, какую-либо игру, кроме живых историй составить невозможно. Система может заинтересовать детей, которые склонны обращать внимание на детали и не ждут от жизни ничего хорошего. Можно показывать студентам для иллюстрации чего-нибудь из ООП, но их уже можно натаскивать на серьезную работу и без игрушечных систем.

Вывод — система ближе всех, из рассмотренных выше, к «взаправдышнему» программированию, хорошие 3D модельки с анатомией и суставами, есть понятия о взаимном положении объектов в духе Терри Винограда, физики нет. Наиболее острые ощущения: 1)где физика? 2)что я такого сделал, что скрутил голову страусу?

Greenfoot

Учебный проект с листиками и Вомбетом в Greenfoothttp://www.greenfoot.org

Программирование на языке Java в текстовом режиме. Настоящая IDE со всеми базовыми функциями. Есть сцена (мир), актеры и сценарии. Прозрачная модель ООП. Даже чтобы раместить актера на сцене нужно счелкнуть правой кнопкой мыши по классу и вызвать конструктор. Появляется графический образ нового объекта, прилипает к курсору и его можно куда-нибудь положить.  По части программирования все очень разумно и корректно. С точки зрения реализации — быстрая, четкая работа, качественный интерфейс. Исполнители (актеры) — плоские картинки без анимации. После часа знакомства с программой основная ощущение — недоумение. Зачем это все сделали? Для чего? Я не могу придумать ни одного осмысленного применения этой, безусловно, качественной программе. Может планируется какое-то развитие? Нужно подождать, посмотреть.

Впрочем утверждается, что можно с помощью программы создавать игры. В качестве примера есть несколько проектов. Два из них идут вместе с учебником на сайте проекта. Сразу вспомнилась игра «Посадка на Луну» в которую я играл в 1982 году на текстовом терминале EC-1022 в диалоговой системе Focus (или Primus?). Думаю, что геймплей игр в GreenFoot запросто можно дотянуть до такого уровня.

 

BlueJ

Диаграмма классов и редактор кода в BlueJhttp://www.bluej.org

BlueJ особый продукт в этом обзоре. Здесь нет исполнителей и сцены. Есть только программирование на Java с использованием специфической IDE для начинающих. Очень интересных возможностей две. Первое — визуализация классов в виде наглядной диаграмы, чем то напоминающей об UML. Второе — возможность интерактивного создание объекты и возможность экспериментировать с ними. В принципе можно написать небольшой Java-проект. Если ребенок не собирается в дальнейшем программировать, то идеальный выбор для спартанца. В принципе этот вариант за полшага до хардкора с выбором Eclipse в качестве среды для обучения школьников программированию. Кстати, если ребенок в дальнейшеп планирует заниматься программированием, то наверное хардкорный вариант предпочтительнее — не придется переучиваться с детской IDE на взрослую.

Впечатление с точки зрения программиста очень приятное. Наверное хорошо использовать для изучения программирования старшеклассниками и первокурсниками. Минус (или плюс?) — полное отсутствие развлекательной компоненты.

 

КуМир

KyMup

http://lpm.org.ru/kumir2/

http://www.niisi.ru/kumir/

Очень старый и полезный проект. Впервые я с ним познакомился году эдак в 1991-м на компьютерах Yamaha MSX. И сейчас, с высоты прожитых лет, могу сказать — не так уж все изменилось к лучшему. Во всяком случае в описываемой области. Если не считать интернет-коммуникаций, конечно.

Новый переписанный (точнее переписываемый на современные платформы) проект где-то потерял отличного исполнителя «Строитель» и прикольного бипеда «Двунога». Может они еще в работе? Надеюсь. Новый проект практически повторяет то, что было более 30-лет назад. Но, тем не менее, на фоне остальных выглядит очень пристойно.

Перечислим возможности. Начну с «Черепашки» — русскоязычный лого. Не проверял сейчас, как у него со списками, но рекурсию отлично потянул (см. рис. — помнят руки:). Исполнитель робот позволяет исследовать клеточную карту, измеряет температуру и т.п. Есть еще «Кузнечик», «Чертежник» и «Водолей» для задач о переливаниях.

Неоценимый плюс наличие школьного учебника Кушниренко с массой задач для этой системы. Если повезет, то возможно добудете еще и книгу для учителя. В таком комплекте Вы вооружены для проведения отличного курса.

Конечно есть и большой минус. Идейно проект мало развивался последние 30 лет и ни какого ООП там нет. К сожалению, в свое время туда не очень-то влили функционального программирования. А ведь дело к тому шло — слушали Пейперта (дай ему Бог здоровья — 84 года человеку уже)! Сделай это тогда, мы сейчас были бы на самом гребне волны.

Очень жаль, что наши чиновники от образования в свое время завернули школьную информатику от алгоритмизации в сторону набора текста в MS Word’e и прочих умений писать и рисовать при помощи компьютера. Дальше должно идти 100500 страниц текста в духе «какую страну про**рали», но здесь это не к месту.

 

Прочее

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

Panther — авторы утверждают, что это улучшенная версия Scratch. Поскольку все разработчики активно что-то пишут на этом Scratch, то возможно они знают о чем говорят. Имеется возможность экспорта собранного проекта в исполняемый exe-файл.

Jeroo — плоские исполнители на плоской сцене, но их программирование можно проводить либо в стиле языка Java, либо в стиле Python. Подготавливает к ООП.

Stagecast Creator — еще одно двухмерное чудище, но на этот раз без программирования. С помощью остроумной визуальной системы просто указываешь, что будет когда ситуация из одной нарисованной станет другой нарисованной. Можно добавлять отдельные объекты со своим простым поведением.

Mama — система построена на базе уже описанной Alice. Существенных отличий за короткое время знакомства не обнаружил.

Robot Emil — трехмерный робот Эмиль передвигается при помощи простых команд «Шаг» и «Поворот». Умеет класть, убирать и трансформировать блоки различной формы, умеет их красить. Что-то в духе исполнителей КуМир из школьного учебника Кушниренко по информатике

Общие выводы

На данный момент неутешительные. Ни одна из систем не стоит потраченного времени. Конечно стоит показать Kodu как самый эффектный способ быстро создать продукт. Придется потом как-то погасить разочарование ребенка из-за невозможности какого-либо использования (отторжения) полученного продукта. И как-то погасить разочарование учителя из-за невозможности что-либо проиллюстрировать из области программирования.
Остальные продукты при богатстве идей и глубине методической проработки вряд ли стоят времени, затраченного на их освоение ребенком. Но… Если вы вынуждены преподавать ребенку программирование долго… любой из перечисленных подойдет. Легче всего осваивается Scratch. Ближе всего к программированию Alice. StarLogo похож на Scratch и, пожалуй, только дело вкуса, каким из этих двух продуктов пользоваться. Если нужно развить навыки алгоритмического мышления и азы рекурсивной обработки, то КуМир (с соответствующим учебником) еще может очень даже пригодиться.

 

P.S. Вместо послесловия

Выкладываю здесь Light Bot 2:

LightBot игра для будущих программистов

Это одна из множества обучающих игр такого вида. Правила простые — собираете из команд движения, поворота, прыжка программу, которая приведет к цели — синему квадрату. Последней ставите команду включения лампочки. Для некоторых заданий нужны процедуры и даже рекурсия. Есть редактор задач. Можно экспортировать результаты.

Попробуйте.

Чтобы начать просто нажмите мышкой на один из светящихся квадратиков доступных уровней. Когда уровень загрузится щелкните на информационном окне в центре. А дальше выбираем команду (вверху) и устанавливаем ее в программу (справа). Недоступные ячейки залиты красным. Закончив, жмем Run внизу. Впрочем, есть учебные видео

Вот такой маленький бонус.

P.P.S. Через полтора года

spartacus-421e492dbea28d8468b5af59080501e1[1]Вдруг попался забавный  ruby-warrior. Что-то вроде 2D аркады из 80-х. В этой игре необходимо писать программу на Руби, которая определяет очередной ход игрока: идти, стрелять из лука, сражаться мечом, освобождать заложника или отдыхать (восстанавливает уровень здоровья).  Делать это можно как налево так и направо. Исходной информацией для принятия решений было количество здоровья (в начале игры 20), ощущение (возвращает объект соседней клетки), зрение  (возвращает объект 3-х соседних клеток). Объект (соседней) клетки имел методы, позволяющие определить находится ли там враг, стена, заключенный, ступени к выходу на следующий уровень или бомба с часовым механизмом. За освобождение заложников и победу над врагами присуждают очки. Враги бывают нескольких видов — ближнего и дальнего боя с разными силами и дистанциями поражения.

загруженное

После десятого уровня все как-то заглючило. На интермедиате уровне появилось что-то про башни и лестницы, но заглючило сразу.

Возможно игра еще в разработке. Нужно заглянуть сюда еще как-нибудь.

Share
Вы можете оставить комментарий, или ссылку на Ваш сайт.