Scratch — язык программирования для детей
Параметры для контроля конкурентности
Мы рассмотрели все элементы, предоставляемые операционной системой, которые могут использоваться для создания конкурентных программ. Но, как упоминалось в предыдущей статье, они могут создавать множество проблем. Самая очевидная проблема (и в то же время наиболее сложная в определении) – несколько конкурентных задач, обращающихся к одному и тому же ресурсу. Если нет механизма для обработки этих доступов, это может привести к тому, что одна задача запишет одно значение, а другая другое значение. Когда первая задача попытается считать данные, она будет ожидать, что они будут теми, которые записаны в первый раз – однако значение будет уже изменено. Таким образом, по умолчанию используется блокировка доступа к ресурсу и предотвращение доступа к ним других тредов, если оно заблокировано.
Приоритетная инверсия (Priority Inversion)
Чтобы понять различные механизмы блокировки, нам также необходимо понять приоритеты тредов. Как вы можете догадаться, треды могут выполняться с высоким или низким приоритетами – высокие раньше, а низкие позже. Типичным примером является процесс с низким приоритетом, получающий ресурс, который требуется высокоприоритетному процессу, а затем он вытесняется процессом среднего приоритета, поэтому процесс высокоприоритетного процесса блокируется на ресурсе, в то время как средний приоритет фактически выполняется, даже обладая более низким приоритеом. Это называется Приоритетной инверсией (Priority Inversion) и может привести к тому, что тред с более высоким приоритетом будет “голодать до смерти”, так как он никогда не будет выполнен. Поэтому, определенно, надо избегать этого.
Представьте себе наличие двух высокоприоритетных тредов (1 и 2) и тред с низким приоритетом (3). Если 3 блокирует ресурс, к которому 1 хочет получить доступ, 1 придется ждать. Поскольку 2 имеет более высокий приоритет, вся его работа будет выполнена в первую очередь. В случаях, когда процесс не заканчивается, тред 3 не будет выполнен, и, таким образом, поток 1 будет заблокирован до бесконечности.
Наследование приоритета (Priority Inheritance)
Решение для Priority Inversion – это наследование приоритета (Priority Inheritance). В этом случае тред 1 отдаст приоритет треду 3, если он заблокирован. Таким образом, тред 3 и 2 имеет высокий приоритет и оба выполняются (в зависимости от ОС). Как только 3 разблокирует ресурс, высокий приоритет возвращается к треду 1, и он будет продолжать свою первоначальную работу.
Atomic
Atomic содержит ту же идею, что и транзакция в контексте базы данных. Вы наверняка захотите написать значение сразу, как одну операцию. Приложения, скомпилированные для 32 бит, могут иметь довольно странное поведение при использовании int64_t и не иметь его в atomic. Почему? Давайте подробно рассмотрим, что происходит:
int64_t x = 0
Thread1: x = 0xFFFF
Thread2: x = 0xEEDD
Наличие неатомной операции может привести к тому, что первый поток начнет записывать в x. Но поскольку мы работаем в 32-разрядной операционной системой, мы должны разделить значение, которое мы записываем в x, на две очереди 0xFF.
Когда в то же время Thread2 попытается записать значение в x, может произойти планирование операций в следующем порядке:
Thread1: part1 Thread2: part1 Thread2: part2 Thread1: part2
В итоге мы получим:
x == 0xEEFF
который не равен ни 0xFFFF, ни 0xEEDD.
Используя atomic, мы создаем единую транзакцию, которая приведет к следующему поведению:
Thread1: part1 Thread1: part2 Thread2: part1 Thread2: part2
В результате x содержит значение, установленное Thread2. Сам Swift не работает с atomic. В Swift Evolution предлагается добавить его, но на данный момент вам придется реализовать его самостоятельно.
Lock
Lock – это простой способ предотвратить доступ нескольких тредов к ресурсу. Сначала тред проверяет, может ли он войти в защищенную часть или нет. Если он может войти, он блокирует защищенную часть и продолжает работу. Как только он выйдет, то разблокирует его. Если при входе тред встречает заблокированную часть, то он будет ждать. Обычно это делается при помощи сна и регулярного пробуждения, что позволяет проверить, заблокирован все еще ресурс, или нет.
В iOS это можно сделать с помощью NSLock. Но имейте в виду, что при разблокировке тред должен быть тем же самым, что и блокировал.
Существуют также другие типы блокировок, такие как рекурсивные блокировки (recursive locks). С их помощью тред может блокировать ресурс несколько раз и должен отпускать его так часто, как он заблокирован. В течение всего этого времени исключается работа других тредов.
Другим типом является блокировка чтения-записи (read-write lock). Это полезно для больших приложений, когда многие треды читают ресурсы и иногда пишут. Пока тред не пишет в ресурс, все треды могут получить к нему доступ. Как только тред хочет писать, он блокирует ресурс для всех тредов. Они не могут читать, пока блокировка не будет отпущена.
На уровне процессов существует также распределенная блокировка (distributed lock). Разница заключается в том, что в случае блокирования процесса он просто сообщает об этом процессу, и процесс может решить, как справиться с этой ситуацией.
Циклическая блокировка (Spinlock)
Блокировка состоит из нескольких операций, которые «усыпляют» треды, пока они снова не включатся. Это приводит к изменениям контекста для CPU (переключением регистров и так далее для сохранения состояния тредов). Эти изменения требуют большого времени вычислений. Если у вас действительно небольшие операции, которые вы хотите защитить, вы можете использовать спинлоки. Основная идея в том, потоки опрашивают блокировку в процессе ожидания. Для этого требуется больше ресурсов, чем просто в спящих тредах. В то же время они наблюдают за изменением контекста и, таким образом, быстрее работают при небольших операциях.
Это звучит неплохо в теории, но в iOS всегда все по другому. iOS имеет концепцию Quality of Service (QoS). С QoS может случиться так, что треды с низким приоритетом не будут выполняться вообще. Наличие спинлока на таком треде и более приоритетный тред, пытающийся получить доступ к его ресурсу, приведут к тому, что более приоритетный тред будет «голодать» по нижнего треда, не разблокируя требуемый ресурс и блокируя самого себя. Как результат, спинлоки являются незаконными на iOS.
Mutex
Mutex подобен замку. Разница в том, что это могут быть разные процессы, а не только треды. К сожалению, вам придется реализовать свой собственный Mutex, поскольку Swift его не поддерживает. Это можно сделать с помощью pthread_mutex от C.
Semaphore
Семафор – это структура данных, обеспечивающая взаимную эксклюзивность в синхронизации тредов. Он состоит из счетчика, очереди FIFO и методов wait() и signal().
Каждый раз, когда тред хочет войти в защищенную часть, он вызывает wait () на семафоре. Семафор уменьшит счетчик, и пока он не равен 0, треду будет разрешено работать. В противном случае он сохранит тред в очереди. Всякий раз, когда тред выходит из защищенной части, он будет вызывать signal(), чтобы информировать семафор. Семафор сначала проверяет, есть ли очередь ожидания. Если есть, то из нее вызывается тред, который сможет продолжить работу. Если нет, он снова увеличит счетчик.
В iOS мы можем использовать DispatchSemaphores для реализации такого поведения. Предпочтительно использовать именно их, чем семафоры по умолчанию, так как только они работают на уровне ядра, если это действительно необходимо. В противном случае он просто работает намного быстрее.
Можно рассматривать двоичный семафор (семафор со значением счетчика 0 или 1) как Mutex. Но в то время как Mutex связан с механизмом блокировки, семафор является сигнальным механизмом. Это особо не помогает, так где же разница?
Механизм блокировки – это защита и управление доступом к ресурсу. Таким образом, он предотвращает одновременное обращение нескольких тредов к одному ресурсу. Сигнальная система больше напоминает вызов “Эй, я закончил! Продолжай!”. Например, если вы слушаете музыку на своем мобильном телефоне и вам звонят, общий ресурс (наушники) будет задействован на телефоне. Когда звонок закончится, система проинформирует ваш mp3-плеер при помощи сигнала для продолжения. Это тот случай, когда следует предпочесть семафор мьютексу.
Так в чем же фишка? Представьте, что у вас есть тред с низким приоритетом (1), который находится в защищенной области, и у вас есть тред с высоким приоритетом (2), который просто вызывает wait() на семафоре. 2 спит и ждет, когда семафор разбудит его. Теперь у нас есть тред (3), который имеет более высокий приоритет, чем 1. Этот тред в сочетании с QoS блокирует сигнал от 1 к семафору и, таким образом, голодают оба других потока. Таким образом, семафоры в iOS не имеют приоритетного наследования (Priority Inheritance).
Synchronized
В Objective-C существует также опция использования @synchronized. Это простой способ создания мьютекса. Поскольку у Swift его нет, мы должны копнуть глубже. Вы можете познакомиться с @synchronized, вызвав objc_sync_enter.
Поскольку я неоднократно видел этот вопрос в интернете, давайте ответим на него тоже. Насколько я знаю, это не конфиденциальный метод, поэтому его использование не исключает вас из App Store.
Concurrency Queues Dispatching
Поскольку в Swift нет мьютекса, и синхронизация также была удалена, он стал золотым стандартом для разработчиков Swift, которые используют DispatchQueues. Если вы используете его синхронно, то получите такое же поведение, как и мьютекс, так как все действия помещаются в одну очередь. Это предотвращает одновременное выполнение.
Недостатком является большое количество времени, поскольку нужно много перемещений и изменений контекста. Это не имеет значения, если ваше приложение не нуждается в высокой вычислительной мощности, но в случае, если у вас возникнут потери фреймов, вы можете рассмотреть другое решение (например, Mutex).
Dispatch Barriers
Если вы используете GCD, у вас есть больше возможностей для синхронизации вашего кода. Один из них – Dispatch Barriers. С их помощью мы можем создавать блоки защищенных частей, которые должны выполняться вместе. Мы также можем контролировать, в каком порядке выполняется асинхронный код. Это звучит странно, но представьте, что вам предстоит выполнить долгую задачу, которую можно разделить на части. Эти части необходимо запускать по порядку, но их можно снова разделить на более мелкие куски. Эти меньшие куски части могут выполняться асинхронно. Dispatch Barriers теперь можно использоваться для синхронизации больших частей, в то время как отдельные куски могут работать сами по себе.
Trampoline
Trampoline на самом деле не является механизмом, предоставляемым ОС. Это шаблон, который вы можете использовать, чтобы гарантировать, что метод вызывается в правильном треде. Идея проста: метод проверяет в начале, находится ли он в правильном треде, иначе он вызывает себя в правильном треде и возвращается. Иногда вам будет необходимо использовать вышеуказанные блокирующие механизмы для реализации процедуры ожидания. Это имеет значение только в том случае, если вызванный метод возвращает значение. В противном случае вы можете просто вернуться.
Не используйте этот шаблон слишком часто. Это заманчиво, но в то же время это путает ваших коллег. Они могут не понять, почему вы меняете треды повсюду. В какой-то момент это захламляет код и тратит ваше время.
Заключение
Вау, это был довольно тяжелый пост. Существует так много возможностей для параллельного программирования, и этот пост раскрыл вам только самые общие положения. В то же время, существует множество механизмов и много примеров для рассмотрения. Я, наверное, раздражаю всех на работе всякий раз, когда говорю о тредах, но они важны, и медленно, но верно, но мои коллеги начинают соглашаться. Как раз сегодня я должен был исправить ошибку, в которой операции получали асинхронный доступ к массиву, а Swift, как мы узнали, не поддерживает атомарные операции. Угадайте, что? Это заканчивалось сбоем и падением. Возможно, этого не произошло бы, если бы все мы знали больше о конкурентности, но, честно говоря, я тоже этого не заметил.
Изучить свои инструменты – лучший совет, который я могу вам дать. Надеюсь мой пост дал вам отправную точку для параллелизма, а также предоставил способ контролировать хаос, который проявится, как только вы погрузитесь глубже. Удачи!
apptractor.ru
Язык программирования для детей Scratch
Язык программирования для детей Scratch
- Подробности
- Категория: Разное
- Создано 04 Ноябрь 2010
- Автор: Николай Ковач
- Просмотров: 120720
Сегодня я хочу рассказать о программе Scratch.
Scratch – это совершенно уникальная среда программирования для детей. Или правильнее сказать – среда для обучения программированию. Какому языку программирования она учит? Языку Scratch!
И, конечно, наберитесь терпения, в конце концов вы узнаете, какая может быть связь между программой Scratch и платой Марсоход.
Давным-давно, когда я ходил в школу, мы на уроках информатики изучали язык Basic. Это в общем-то довольно простой язык программирования. С его помощью учителя нам объясняли что такое алгоритмы, переменные, циклы и ветвления программ. Теперь наверное языку Basic уже не учат. Учат работе с программами типа Paint, Wordpad, иногда программирование черепашек и ЛогоМиры. Сказать по правде – меня не очень впечатляет.
А вот язык Scratch меня действительно удивил. И довольно быстро я смог научить своих детей этому «странному программированию». Scratch – «объектно ориентированный» язык программирования с «многопоточностью». Странность программирования на языке Scratch заключается в том, что не нужно писать программу в виде текста. Вместо этого, программа составляется из блоков, которые нужно перетаскивать и соединять как кубики Lego.
Давайте по порядку.
Scratch — это бесплатная программа, покупать ее не нужно.
Сперва зайдите на сайт http://scratch.mit.edu/ — это сайт программы Scratch. Найдите на этом сайте кнопку “Download Scratch”. Вот сейчас я загрузил этот файл ScratchInstaller1.4.exe – всего 33Мб, совсем мало по нынешним временам. Теперь нужно запустить его и программа будет установлена. При установке программы вы увидите всякий текст на английском языке – не пугайтесь, просто жмите кнопки Next (Далее) и Install (Установить). После установки язык отображения программы можно установить какой угодно: хоть русский, хоть греческий или арабский.
Теперь запустим программу Scratch. Вот что мы видим:
Окно программы разделено на несколько частей.
Справа вверху большое окно с белым фоном и объектом Кошка в центре.
В этом окне будут происходить события, запрограммированные нами. Объект Кошка сразу появлятся по умолчанию. Мы можем использовать ее в нашей программе, а можем и не использовать. Клик мышкой на зеленом флажке вверху запускает программу, а на красном кружочке – останавливает.
Чуть ниже есть три кнопочки в виде звездочек:
Это кнопочки «Рисовать новый объект», «Выбрать новый объект из файла», «Выбрать случайный объект». Собственно первая кнопка «Рисовать новый объект» на самом деле позволяет создать новый объект. Программирование на языке Scratch можно условно назвать объектно ориентированным. Мы создаем объекты, описываем их поведение с помощью скриптов и помещаем их на «сцену».
Внизу справа – это область, где отображаются все объекты нашего проекта и все имеющиеся у нас сцены.
Объекты и цены можно удалять (правая кнопка мыши и появляется меню) или дублировать: создавать копии существующих объектов. Поведение каждого объекта определяется его программой – скриптом.
В средней части программы можно описывать скрипты-программы объектов, их костюмы и звуки, которые они играют.
Костюм – это внешний вид объекта, он может меняться. Например, если ваш объект – это ракета, то в конце полета она может взорваться, значит понадобятся 2 картинки – изображение объекта ракеты до и после взрыва. Костюмы можно добавлять и удалять, исправлять. В примере с Кошкой мы видим у нее два Костюма — это две позы, когда она как бы идет:
Меняя Костюмы по очереди мы получаем анимацию идущей Кошки. Перейдем на закладку скрипты. Скрипт такой анимации будет выглядить, например, вот так:
Этот скрипт описывает цикл в котором по очереди сменяется вшенший вид Кошки. Чем больше костюмов будет сменяться по очереди, тем плавнее будет анимация.
Один объект может иметь одновременно много разных скриптов.
Например, второй скрипт для Кошки может управлять ее положением на экране, слушаясь некоторых клавиш:
Если запустить оба эти скрипта на исполнение, то Кошка будет шевелить ногами, идти и будет перемещаться влево или вправо в зависимости от нажатия клавиш на клавиатуре.
Конечно возникает вопрес – где брать все эти блоки-модули для наших скриптов?
Очень просто: слева в окне программы есть область, где все эти блоки лежат. Все блоки-кирпичики разделены на несколько типов: движение, контроль, внешность, сенсоры, звук, операторы, перо, переменные
Например, вот так выглядят все возможные блоки движения:
А вот так выглядят блоки управления:
Для создания скрипта просто выбирайте мышкой нужный блок и тяните его в область скриптов. Модули сами слипаются между собой, только нужно выбрать им правильное место, чтобы они делали то, что нужно для вашей программы.
Вот пожалуй и все, что нужно знать для начала программирования на языке Scratch.
Программы можно сохранять в памяти компьютера, потом позже открывать исправлять или показывать знакомым. Их даже можно публиковать в интернете! Для этого нужно зарегистрироваться на сайте Scratch (http://scratch.mit.edu/) и, после этого, воспользоваться в программе соответствующим пунктом меню!
А теперь самое главное!
К компьютеру можно подключить внешнюю плату сенсоров и управление мотором! Программа Scratch может получать сигналы от внешней платы и подавать команды внешней плате! Таким образом, можно писать программы управляющие реальными объектами: лампочками, моторчиками!
Зайдите в пункт меню Редактировать/Показать блоки моторов. В списке блоков Движение и Сенсоры появятся еще дополнительные блоки:
и
Так вот, плата у нас есть – это плата Марсоход. Попробуем подключить ее к компьютеру в качестве платы для Scratch. Про это и будет моя следующая статья.
marsohod.org
Мой опыт обучения детей 8-10 лет программированию на Scratch / Хабр
Давно собирался написать об этом, но, модная болезнь прокрастинация брала вверх. Последней каплей стал пост«Учим детей делать игры» из блога «Кодабры».
Знакомство со Scratch
Когда сыну Артёму исполнилось 7 лет и он пошел в школу, мы ему подарили компьютер, чтобы он не отставал от жизни. Несколько месяцев он играл в разные игры, наслаждался, развлекался и т.п. Мне стало немного обидно, что такой дорогой и сложный прибор как компьютер используется только для развлечений, и я решил придумать, как использовать компьютер для обучения. А чему можно научиться на компьютере? Конечно, программированию! Тут я и вбил в «Яндекс» заветную фразу «обучение детей программированию».
Scratch нашёлся не сразу. Помню чувство, которое я испытал при первом запуске программы: «эх, жаль что в моем детстве этого не было». Быстренько пробежав по блокам Scratch, я высоко оценил его возможности. Полчасика потыкал в него и, переключив на русский язык, позвал ребёнка. После показа нескольких блоков, ребёнок попросил меня немного подвинуться, и продолжил самостоятельно. Через полчаса квартиру огласили дикие вопли Кота: «Ого, ребенок сам разобрался со звуками», — подумал я.
Артёму Скретч понравился, несколько месяцев он проводил с ним по несколько часов в день. Проекты вылетали как из пулемёта, их количество приближалось к сотне штук. Интересный момент: ребенок не хотел признавать переменные. Он считал, что можно обойтись и без них, и долгое время обходился. Я говорил ему, что переменные — это важная фишка, но он не верил. Пришлось сочинить ему задание, которое без переменных не решалось. В общем, весь первый класс ребенок игрался со Скретч и пытался рассказывать о нем в школе. Никто не понимал о чем он говорит, и ему стало обидно, что он не может делиться ни с кем своими проектами. Интернет я ему тогда еще не показывал, да и потом, когда показал, он сказал, что хочет общаться с реальными людьми, а не по интернету.
Я стал думать, как решать эту проблему. Первая мысль была такая: установить в классе на нетбуки Scratch, показать его учительнице, пускай на продлёнке дети занимаются. Учительница была не против. Я научил Артёма устанавливать Scratch с флешки; и вот, как-то вечером мы пошли «на дело». Устанавливали мы его на 26 нетбуков около 2 часов, устали от рутинной работы, после чего сын сказал, что не хочет быть системным администратором.
Организация кружка юных программистов на Scratch
К сожалению, во втором классе на группе продлённого дня Scratch так ни разу и не включили… Тогда я стал думать дальше. Это начинало напоминать крокодила Гену, который искал друзей для Чебурашки. В мультфильме друзья появились, когда начали общее дело. Мы тоже решили начать «дело» — организовать кружок Scratch. Ребенок уже ходил на рисование в молодежный клуб, к директору которого я и обратился.
Помещения, конечно же, не было, поэтому нам предложили заниматься в музыкальном классе по воскресеньям, когда там нет занятий. Так-как опыта ведения кружка у меня не было, в целях привлечения максимального количества потенциальных «друзей», занятия сделали бесплатными. Помню подозрительный взгляд директора и вопрос: «А зачем вам это надо?» Не помню, что я там мычал в ответ, но решили попробовать. Осталось набрать народ, для этого были проведены следующие мероприятия:
— объявление на стенде в клубе;
— реклама на местном форуме;
— раздача перед началом уроков в школе рекламы.
Поиск учебной литературы, подходящей для детей начальной школы, ничего не дал. Поскольку не было проектора, то я предварительно распечатал каждому по три листа — блоки скретч с описаниями.
На первое занятие пришли 8 детей 7-10 лет. Разместились, начали устанавливать Скретч — тут очень пригодились навыки Артёма по скоростной установке программы, полученные в школе. Среди пришедших детей одна девочка, у которой папа программист, уже знала как работать в Скретч. Она помогла нам показать ребятам как двигать блоки. Через 15 минут все освоились с интерфейсом и стали делать то, что написано в листочках. Как обычно, на первом уроке раздалось громогласное мяуканье. Но теперь творилось что-то невообразимое, одновременно орали 8 котов! Срочно изучили на ноутбуках кнопку уменьшения громкости. Занятие продолжалось 2 часа, дети были в восторге. Подробнее про восторги можете прочитать у Кодабры. Были пройдены основные блоки, и дети стали требовать игр. Мои объяснения, что надо немного подождать, и изучить ещё несколько блоков и координатную плоскость — не принимались. На совместном совещании с Артёмом было принято решение ускорить процесс обучения, так как все дети попались смышлёные. Изначально я планировал рассказать о координатах примерно на 5 занятии, однако без координат ни мультфильм, ни игру не сделать. Я был приятно удивлен, когда оказалось, что некоторые дети во 2-м классе уже знали, что такое координатная плоскость. Со словами: «мне папа объяснял» — дети сходу начали применять блоки с координатами.
Игру на втором занятии делать не стали, а сделали мультфильм.
Для запуска нажмите на зелёный флаг в центре экрана.
На второе занятие пришли ещё несколько новичков. Я раздал им первый урок, остальные проходили мультфильм. Быстро сделав мультик, начинали его видоизменять. Выбирали других персонажей, писали разные фразы, и все делали вид, что поняли, что такое координаты. Это я заметил через несколько занятий. Многим нравилось делать смешные игры, прикалываться и веселиться, а чтобы я не приставал со скучными объяснениями, говорили, что всё понимают. Не смотря на все мои усилия, некоторые дети координаты так до конца и не поняли. Кстати, те, кто не поняли координаты, через некоторое время кружок побросали. Остался костяк смышлёных учеников. Общая статистика после трёх полугодий обучения примерно следующая: те, кто занимаются всё это время, человек 10, это костяк. Всего ходило на занятия человек 40. Те, кто побросали — посетили примерно по 10 занятий каждый, поняли, что им это не интересно — и ушли.
Надо отметить, что у меня не хватало фантазии придумывать каждую неделю новый урок. В этом мне помогал Артём. Его хватило на два полугодия, а потом я стал придумывать сам. Это очень сложно, и детям нравились не все уроки. Я каждое занятие прошу детей придумать тему следующего занятия, за всё время они помогли мне 3-4 раза. В последнее время, в поисках вдохновения, я часто захожу на сайт scratch.mit.edu, там очень много классных примеров.
По образцу «Кодабры» попытаюсь сформулировать правила обучения.
1. Каждую минуту ребенку должно быть интересно. Если хотя бы одному не интересно, он включает постороннюю игру, или мультик на ноуте, и к нему тянутся остальные. Если ребенок заскучал, ему всегда можно показать новый прикол на Скретч, ведь это очень глубокая и мощная программа.
2. Все предложения детей по усовершенствованию игр — на конец занятия. Есть один мальчик, он не хочет делать по написанному, а сразу начинает генерировать идеи. В результате отходит от плана урока. Понаделает своих скриптов. У него ничего не работает, и он начинает отвлекать меня. А разобраться в чужом коде не всегда просто, даже если его писал 8 летний пацан.
3. Всегда иметь под рукой дополнительные задания. Некоторые дети очень смышлёные, у них сразу всё получается, а занятия длились по 2 астрономических часа. Если ребенок за час все сделает — надо дать ему ещё что-нибудь интересное.
4. Занятия дольше 1 астрономического часа проводить не следует. 40 мин, как в школе — оптимально. Дальше у детей реально ухудшается концентрация и они начинают хулиганить.
5. Берите с собой воду и печеньки. Поощрение печенькой реально работает. Я умилялся, когда это подтвердилось на практике.
Появление книги
В процессе создания уроков я постоянно мониторил интернет в поисках литературы по Scrath. К сожалению, книга уважаемого Евгения Патаракина написана не для начальной школы, а других книг на русском я не нашел. После первого полугодия занятий у меня накопилась куча материалов с уроками, и, совместно с Артёмом, мы решили сделать книгу. Писал и делал скриншоты, конечно, я. От Артёма были все идеи уроков, и пара историй про Котёнка Тесея и летучую мышь Rousettus aegyptiacus (которая, как оказалось, переносит вирус Эбола). Так-как издать книгу дело не дешёвое, было принято решение делать её в электронном формате epub. По этой ссылке можно скачать книги и журналы про Scratch созданные в период с 2013 по 2016гг.
Основные цели написания книги
1. Показать Артёму, что «не боги горшки обжигают», что если на русском языке нет книг по Scratch для самостоятельного изучения детьми младших классов, то это можно исправить;
2. Помочь школьникам начальных классов самостоятельно разобраться со Scratch. Папа с мамой должны только скачать книгу на планшет, а дальше ребенок сам должен делать игры;
3. Помочь другим родителям организовать кружки юных программистов;
4. Найти единомышленников, занимающихся обучением детей Scratch и программированию вообще;
5. Рекламировать Scratch как отличный способ обучения. Максимальная цель — каждый ученик начальной школы должен знать о существовании Scratch. Дальше ребенок сам поймёт — нравится ему это или нет, но подвигать блоки хотя бы раз в жизни он должен.
Результат
1. На книжной ярмарке NonFiction 2013, где мы с Артёмом проводили мастер класс по Scratch, ему дали бэйджик — участник выставки и мы прошли в помещение без очереди, которая была 100 метров. Никогда я не видел ещё такого гордого выражения лица. И, потом, на мастер классе, он сиял уверенностью, и с огромным удовольствием показывал всем ребятишкам Scratch;
2. Книга на данный момент скачана более 4500 раз на русском и 1700 на английском языке. Есть несколько положительных отзывов. Надеюсь, некоторым детям она действительно помогла сделать первые шаги в Scratch;
3. Несколько человек написали что планируют сделать кружки Scratch;
4. Один очень уважаемый человек даже приезжал на наше занятие с дочкой перенимать опыт. Он уже тоже открыл кружок в Москве. В интернете всё больше людей попадаются со схожими интересами;
В процессе написания книги выяснилось, что электронные книги можно продавать. Так как в нашей стране никто покупать электронную книгу не будет, было решено перевести книгу на английский, чтобы протестировать схемы распространения электронных книг.
Заключение
Друзей у Артёма прибавилось. Многие из его класса приходили на кружок, и, хотя и побросали, авторитет ребенка вырос. Несмотря на то, что теперь он переключился на майнкрафт, я иногда спрашиваю у него совета по Scratch.
Очень надеюсь, через несколько лет в начальной школе будет предмет «основы программирования на Scratch».
Вот ещё пример игры, которую сделал Артём.
upd 19.10.2016
Ура!
Наконец-то издан мой учебник по программированию на Scratch!
Scratch для юных программистов.
Оптимизирован для детей 9-10 лет.
Вот кусочек книги
http://ozon-st.cdn.ngenix.net/multimedia/1015649918.pdf
upd 22.09.2017
Проделана большая работа, и вот теперь появился первый в мире учебник по Scratch и Arduino
с комиксами! Называется «Школа капитана Грампа». Специально для тех, кто освоил Scratch и хочет чего-то большего. Достать можно здесь в магазинчике
Эта книга и еще две изданы в издательстве Ridero, и доступны по технологии «Печать по требованию».
По указанным ссылкам можно ознакомится с первыми 20% книг.
Сайт книги «Школа капитана Грампа»
Сайт книги «Scratch для учителей и родителей».
Сайт книги «Знакомьтесь, это Snap! Блочная среда программирования мощнее Scratch»
Кстати, Snap! — это реально мощная вещь. Основным отличием от Scratch являются расширенные возможности по построению собственных блоков, а также списки и функции первого класса. Эти мощные возможности позволяют использовать Snap! не только в начальной школе, но и для обучения старшеклассников и студентов. Мне бы очень хотелось чтобы он широко использовался в нашей стране.
upd 29.11.2017
Издан второй учебник по программированию на Scratch!
upd 18.05.2018
Запускаю с 1 июня 2018 два мощных онлайн курса
1. обучение программированию детей на Scratch
2. обучение программированию школьников в среде Minecraft
подробности на страничке educationforkids.online
upd 20 августа 2018
Вышла новая книга
Scratch и Arduino. 18 игровых проектов для юных программистов микроконтроллеров
www.bhv.ru/books/book.php?id=200704
Есть не во всех магазинах. Заказывайте на сайте scratch5russia.com/store
А также я перевел еще пару итальянских книжек о программировании на Scratch
«Видеоигры на Scratch» и «Анимация на Scratch»
habr.com
Что такое Scratch? scratch программирование
Заканчивая в середине 90-х общеобразовательную школу, я и понятия не имел, что такое программисты и программирование. Да, у нас был одни год предмет под названием «информатика», но понять что-то без желания и компьютера было невозможно. Сейчас, по прошествии такого большого периода времени, понимаю, что в моей жизни всё могло бы быть по-другому, если бы в наше время была возможность пройти обучение на Скретч. Итак, приступим баловаться изучать основы этой занимательной среды программирования! Заранее желаю всем успехов в этом направлении информатики!
И хотя среду Scratch, до сих пор не проходят на уроках информатики, в настоящее время во многих школах и СЮТах существуют кружки по внеурочной деятельности по изучению этой программы. Также есть учителя-энтузиасты, которые на своих уроках внедряют общедоступные или свои личные разработки на Скретч. Ведь многим детям, да и чего греха таить, взрослым, очень интересно покопаться в этих разноцветных блоках.
Что такое Scratch?
Начнём с раскрытия самого главного вопроса, поставленного в заголовке этого материала — «Что такое Scratch?» Вспомните, как вы собирали блоки из набора ЛЕГО, собирая из них в итоге какую-то модель объекта или здания. Точно также происходит и здесь, только в данном случае, каждый отдельный блок выполняет вполне определенные действия, в конечном итоге приводящие к какому-то результату. Но тут количество вариаций практически бесконечно.
Если говорить кратко, то программа Scratch — это визуальная среда программирования, где в отличие от других языков программирования (где нужно писать код вручную), вы собираете код программы из блоков. Причем результат своих манипуляций вы видите сразу же, после запуска программы на экране и очень наглядно.
Однако авторы задумали Scratch не только для изучения программирования, но и для того, чтобы дети могли создавать свои творческие проекты и делиться ими с окружающими. Поэтому в Scratch можно создавать анимацию и живые открытки, рисовать мультфильмы, писать музыку, делать мультимедийные проекты и тому подобное.
Поэтому Скретч так хорошо подходит для обучения, моделирования, управления устройствами и развлечения. Для создания программных проектов Скретч имеет все необходимые средства: язык программирования, движок (интерпретатор) языка, графический редактор, систему помощи, образцы проектов, библиотеку рисунков и звуковых файлов. Все можно сделать здесь — в самой программе, и сейчас — сразу, без установки дополнительных программ.
Scratch (далее будем иногда использовать русское обозначение — Скретч) является свободно-распространяемой бесплатной программой. Поэтому его можно использовать практически везде.
Этот факт и ряд других преимуществ дают программе широкие возможности по продвижению её в народные массы. Именно поэтому она стала так популярна и востребована. Тем более она явлется отличным трамплином для плавного перехода в мир настоящих программистов. Мы вам покажем, что с помощью Скретч можно писать достаточно сложные программы, над которыми тоже нужно поломать голову.
Для какого возраста подходит Scratch?
Scratch подходит для человека абсолютно любого возраста. Начинать занятия на Scratch можно ещё в дошкольном возрасте (существует даже специальная разработка Scratch Junior),желательно в среднем звене, и обязательно при изучении элементов программирования — среди школьников старших классов.
После изучения Scratch вы сами сможете нести его в массы и быстро научить его азам свою бабушку или младшего брата (сестру). Образовательная среда Скретч объединяет всех школьников в мире, поэтому вы сможете делиться своими программами с детьми живущих на других материках.
Кто придумал Scratch?
В 2003 году небольшой группой исследователей под предводительством Митчела Резника из MIT Media Lab решила создать понятный для многих визуальный язык программирования. В результате их стараний в 2007 году появился Скретч. Поэтому создавать компьютерные программы могут уже даже дошкольники.
Какие существуют версии Scratch?
За время своего взросления Скретч развивался и сменил несколько версий.
К устаревшей можно отнести версию 1.4 (Скачать можно по этой ссылке http://scratch.mit.edu/scratch_1.4/)
Современная версия имеет обозначение 2.0. Последнее обновление идёт под номером 451.
Откуда взять Scratch?
Для того чтобы установить Скретч на свой компьютер необходимо загрузить последнюю версию программы по ссылке https://scratch.mit.edu/scratch3download/. Существуют версии для почти всех используемых пользовательских операционных систем: Mac OS X, Mac OS 10.5 и более старые версии, Windows и Linux.
Онлайн-версия программы Скретч
Существует и другая возможность работы в среде программирования Скретч. Это так называемый онлайн-сервис, расположенный по адресу http://scratch.mit.edu, в котором можно вести полноценную работу на Скретч. К тому же, в этом случае, у вас появляются дополнительные возможности:
- не нужно устанавливать программу
- не нужно обновлять программу
- можно легко делиться своими новыми программами с сообществом
- всегда под рукой, где есть доступ в интернет
- не нужно пользоваться флешкой, чтобы скопировать на чужой компьютер
В общем, плюсов великое множество, однако под рукой у вас всегда должен быть доступ в Интернет и ваш браузер должен поддерживать загрузку Flash-роликов. Кстати оффлайн-версия программы тоже даёт возможность загружать готовые проект на этот сайт через существующий аккаунт.
И самая главная идея, на основе которой задумывался и создавался Скретч – это не только программирование, но и всемирная социальная сеть (http://scratch.mit.edu), объединяющая людей со всего мира. Здесь вы сможете опубликовать свои личные проекты, а также посмотреть и изучить проекты других участников.
Как в Скретч сохранять файлы проектов?
inphormatika.ru
Одно из самых удивительных занятий нашего времени — программирование. Повелителей компьютеров называют программистами. Они знают слова языков программирования, которым подчиняются компьютеры, и умеют соединять их в компьютерные программы. В 2003 году группа исследователей под руководством Митчела Резника из MIT Media Lab решила сделать общедоступный язык программирования. Через 4 года появился Скретч (англ. Scratch — линия старта). Делать в нем компьютерные программы смогли даже дошкольники.
В любой момент в программу можно вносить любые изменения. При этом вы сразу увидите, как они отражаются на ее работе. Рис.1.1. Программы в Скретче собирают мышкой из готовых блоков Создаваемые в Скретче программы называют проектами. Этот термин используется во всех сферах человеческой деятельности.
Мы живем среди проблем (от греч. problema — преграда, задача): маленьких и больших, простых и сложных, временных и вечных. Все вещи, машины, произведения искусства, компьютерные программы — созданы людьми для их решения, это — результаты проектов. Задание 1.1Скретч — инструмент создания разнообразных программных проектов: мультфильмов, игр, рекламных роликов, музыки, “живых” рисунков, интерактивных историй и презентаций, компьютерных моделей, обучающих программ для решения проблем: обучения, обработки и отображения данных, моделирования, управления устройствами и развлечения. Для создания программных проектов Скретч имеет все необходимые средства: язык программирования, движок (интерпретатор) языка, графический редактор, систему помощи, образцы проектов, библиотеку рисунков и звуковых файлов. Все можно сделать здесь — в самой программе, и сейчас — сразу, без установки дополнительных программ. Задание 1.2 Скретч – это не только среда программирования, но и социальная сеть (http://scratch.mit.edu), которая объединяет пользователей из разных стран. Здесь можно опубликовать свои проекты и посмотреть чужие, скачать их, изменить. Отсюда можно бесплатно загрузить последнюю версию программы по ссылке: http://scratch.mit.edu/download.Задание 1.3
Рис.1.2. Элементы интерфейса Скретч Новый интерфейс. Найдите отличия в интерфейсе Скретч 2: |
scratch.uvk6.info
Язык программирования Scratch: создаем первую программу
Говорят, что программист — это профессия будущего. Так ли это? Возможно, но точных ответов дать на этот вопрос нельзя. Однако многие родители уже с 5-6 лет отдают своих детей на кружки по программированию. Действительно, программирование для детей очень полезно, ведь оно развивает логику и стратегическое мышление, а также учит решать большие задачи постепенно. Может показаться странным посещение ребенком кружка по программированию в раннем возрасте, ведь там сложные вычисления, неизвестные слова и прочее, но все это не так. Дело в том, что были придуманы языки для обучения программированию детей. Например, язык «Скретч».
Подробнее о языке Scratch
Скретч разрабатывался небольшой группой программистов. Целью являлось обучение любого человека азам программирования. В основном, конечно, рассматривалось использование языка программирования Scratch для обучения детей.
В этом языке используется не код, а блоки с событиями. Может возникнуть вопрос: «Какое же это программирование, если там нет кода?». Дело как раз в развитии логического мышления. Дело в том, что программирование на всех языках, в принципе, одинаково, отличается только синтаксис. Главное — вникнуть в логическую составляющую, а дальше просто применять необходимые операторы, чтобы компьютер вас понял. Поэтому развитие логического мышления в программировании является основой всего.
Появился Scratch лишь в 2006 году. Этот язык стали применять по всему миру. Он состоит из объектов, а также блоков с определенными командами. Сами блоки делятся на 8 типов — в зависимости от их команды. В каждом обозначена та или иная команда, например, команда «повернуть налево».
Где скачать и как установить?
Скачать программу можно на официальном сайте проекта. Там же можно и посмотреть уроки и примеры. Кстати, у этого языка очень обширная и понятная документация, которая всегда будет помогать вам во время обучения. Ее также можно найти на официальном сайте языка программирования для детей Scratch.
Скачайте программу и запустите в работу. Перед вами появится следующее окно.
Выберите место, куда должен установиться Scratch, и нажмите «Продолжить». После этого начнется установка. После завершения установки произойдет самозапуск программы.
Выглядит Scratch следующим образом.
Как можно заметить, изначально он на английском языке. Если же вам нужен русский или любой другой язык, то нужно нажать на кружочек в левом верхнем углу, который похож на земной шар, после чего выбрать необходимый вам язык.
Первая программа на языке программирования Scratch
Попробуйте сделать свою первую программу на этом чудесном языке. Допустим, вам нужно, чтобы персонаж (в нашем случае кот Scratch) двигался при каждом нажатии на пробел. Для этого перейдите в раздел скрипты и нажмите на вкладку «События». Выберите при помощи мышки блок «Когда клавиша нажата» и перетащите его вправо. Все должно получиться, как на картинке.
Следующим этапом перейдите во вкладку «Движение». Выберите там строчку «Идти 10 шагов» и перетащите вправо, после чего соедините с первым блоком. Должно получиться следующим образом:
Готово? Теперь нажмите на зеленый флажок и пробел. Ваш кот будет двигаться при каждом нажатии на клавишу. И это займет всего пару минут.
Итак, нет ничего сложного в создании программ. Абсолютно каждый прямо сейчас может войти в мир программирования!
Выводы
Язык программирования Scratch является одним из самых лучших языков для вхождения в мир программирования. Всего за несколько минут вы сможете сделать свою первую программу и показать результаты родным и друзьям.
Кстати, еще на языке программирования Scratch можно программировать платформу Arduino и делать свои первые шаги в робототехнике. Например, собирать роботов, умные системы и многое другое. Если вы хотите начать программировать, но не знаете, какой язык выучить первым, ответ прост — Scratch!
fb.ru
язык программирования для начинающих и детей
В 21 веке программирование стало очень перспективным направлением. И многие родители хотят обучить ему своих детей с раннего возраста, чтобы они стали в будущем хорошими специалистами. Однако объяснять 5-летнему ребенку материал о создании приложений под мобильные платформы или о разработке сайтов — неэффективно. Ребенок не поймет ничего, да и к тому же интерес к программированию пропадет. На сегодняшний день существует несколько языков программирования для детей. Они очень простые, легкие, красочные. Обучаться с помощью них — одно удовольствие. Одним из таких языков является «Скретч». Scratch — язык программирования для детей. Именно о нем пойдет речь в этой статье.
О языке
Язык программирования «Скретч» разработала небольшая группа программистов в Массачусетском технологическом институте. Первый экспериментальный вариант появился в 2003 году. Целью было, чтобы его изучали в качестве первого языка программирования. И это касается не только детей, но и вообще людей в целом. Например, если человек даже совсем не понимает в компьютерах, а тем более в программировании, но у него есть желание научиться, то язык программирования «Скретч» ему в этом поможет.
Таким образом, в 2006 году состоялся официальный выпуск этого языка. И можно сказать, что идея «выстрелила». Этот язык начали использовать во всем мире. Например, в Америке в начальных курсах колледжа и университетов «Скретч» используют в качестве первого языка программирования. Вообще, этот язык был создан как продолжение языка Logo. Поэтому внешний вид состоит из блоков. Scratch — объектно-ориентированный язык программирования. Основными компонентами являются объекты, их еще называют спрайтами. Сам же спрайт может быть анимированным, то есть состоять из нескольких кадров. Программирование происходит с помощью перетаскивания блоков в раздел скрипты. На каждом блоке написан текст, например «Всегда выполнять». Сами блоки делятся на 8 типов и различаются цветами.
В основном язык программирования «Скретч» используют при создании мультфильмов и простейших игр. Кстати, этим языком пользуются даже учителя для создания красочных презентаций для уроков, с которыми можно взаимодействовать. Кстати, Scratch также используют в робототехнике. В 2008 году появилась возможность программировать с помощью этого языка микроконтроллер Arduino. То есть даже дети могут собирать своих роботов. Область применений «Скретч» достаточно широка. Можно сказать, что программистам Массачусетского института действительно удалось создать идеальный язык для начинающих.
Где скачать и как установить
Творить на языке программирования «Скретч» можно, как скачав программу, так и онлайн. Более того, даже существуют мобильные приложения под Android и IOS для изучения языка. Для удобства в использовании лучше скачать программу для вашей операционной системы на официальном сайте. Весит она мало, всего лишь 58 Мб. Также на официальном сайте языка программирования «Скретч» можно скачать примеры, уроки и ознакомиться с документацией. Установочный файл выглядит следующим образом:
Нажимаем «Продолжить», после чего принимаем лицензионное соглашение и начинается установка среды разработки. После успешной установки программа сама откроется. Можем видеть следующее.
Как можно заметить, программа на английском языке. Расстраиваться не стоит, ведь «Скретч» доступен на многих языках, в том числе и на русском. Чтобы поменять язык в программе, вам нужно нажать на кружочек в виде земного шара в правом левом углу, пролистать вниз и выбрать «Русский», после чего вы сможете работать с русским языком.
Первая программа
Создадим свою первую программу в языке программирования «Скретч». Кстати, как на официальном сайте, так и в самой программе можно увидеть множество примеров и уроков по этому языку. Также здесь есть множество уже готовых спрайтов для творения. Мы же создадим простенькую программу с использованием стандартного спрайта, кота. Создадим программу, чтобы при нажатии этого самого кота он двигался на 10 шагов вперед. Для этого сначала перейдем в раздел «Скрипты».
Там идем во вкладку «События» и перетаскиваем в поле блок «когда спрайт нажат».
Далее идем во вкладку «Движение» и перетаскиваем оттуда блок «идти на 10 шагов», после чего соединяем их вместе с первым блоком. Получается так.
Все, первая программа на языке программирования «Скретч» готова. Теперь при нажатии кота он будет двигаться на 10 шагов. Как можно заметить, работать с этим языком действительно очень легко.
Итоги
Подводя итоги, можно сказать, что «Скретч» действительно является одним из лучших языков для начинающих в программировании и отлично подходит для обучения детей. Язык программирования «Скретч» на русском пользуется большой популярностью, ведь даже дети самых младших возрастов смогут приобщиться к миру программирования и сделать свои первые шаги.
fb.ru