Концепции программирования в Scratch

    Арифметическая операция в Scratch между числом и строкой


    Многим знаком Scratch – детская среда программирования, обучение в которой обычно сводится к созданию творческих проектов по принципу «от простого к сложному». При этом «классический подход» к изучению программирования (переменные → ветвления → циклы → функции → структуры → объекты → …) в Scratch затруднителен.

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

    Первым, с чем сталкивается начинающий скретчер, являются спрайты. Хотя в Scratch как такового объектно-ориентированного программирования нет, спрайты можно считать объектами. На этом этапе обучающийся видит, что в программе может быть множество объектов, поведением которых управляют внешние для них скрипты. Спрайты получают команды или по требованию передают информацию о своем состоянии, то есть программирование сводится к управлению объектами.

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

    Одновременное выполнение скриптов


    Последовательное выполнение


    Уже на первом занятии мы не можем избежать знакомства с циклами. Иначе кот особо не разбежится. На этом этапе знакомство приходится оставлять интуитивным и поверхностным. Мы ограничиваем его циклами «повторять всегда» и «повторить … раз», которые более просты для понимания. Цикл с условием изучается в уроке, специально посвященном циклам. Этот урок предполагает знание логических выражений и переменных.

    Поскольку Scratch событийно-ориентированная среда, блоки условного оператора удобнее изучить до переменных. Условием могут выступать те или иные события.

    Условный оператор, в котором логическим выражением выступает событие


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

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

    В Scratch, не считая списков, программист сталкивается с тремя типами данных: числами, строками и булевым типом. При этом тип привязан к значению, а не переменной. Преобразовывать строки в числа и обратно не требуется. Строки в кавычки не заключаются.

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

    Строковая переменная в арифметической операции


    Scratch реализован так, чтобы в процессе выполнения не возникало критических ошибок. Видимо поэтому, если попытаться использовать строку в арифметической операции, она заменяется нулем (см. первый скрин).

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

    Расширения в Scratch


    Функции в Scratch реализованы в разделе «Другие блоки», где с одной стороны вы создаете собственный блок, который можно вставлять в другие скрипты. С другой стороны – должны собрать функциональность этого блока, то есть то, что он будет делать.

    Определение и вызов функции


    Возврата значении из скретч-функции нет.

    Таким образом, изучение концепций программирования в событийно-ориентированной среде накладывает свой отпечаток. По сути мы сначала изучаем более сложные и абстрактные понятия и, лишь углубляясь в процесс, переходим к элементам структурного программирования. Плюс это или минус для первого знакомства – вопрос спорный.
    • +13
    • 3,9k
    • 9
    Поделиться публикацией

    Комментарии 9

      0
      Знакомы ли Вам проекты языка программирования Форт (Forth) на базисе языка Scratch
      и если да, то что Вы об этом думаете?
      Примеры таких проектов с Github:
      ikforth is an idiomatic Forth implementation written from scratch.
      MOBLuSE_FORTH — a Forth (programming language) in Scratch 2 for Scratch.MIT.Edu
        0
        Не знакомы. Как нибудь посмотрю.
        0

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


        Хотя в Scratch как такового объектно-ориентированного программирования нет, спрайты можно считать объектами.

        Думаю тут лучше подойдёт термин "формальный исполнитель" вместо "объект".
        Объекты из ООП это все таки уже про абстрактные типы данных: упаковка множества значений в одну переменную, скрытие состояния, операции над скрытым состоянием.
        Формальный исполнитель имеет особенность по сравнению с объектами — он может "если касается края, оттолкнуться". То есть он может получать информацию о внешнем мире. В ООП обычно наоборот — объект знает только о себе, а мир — о себе. При этом объекту давать знания о мире нельзя — нарушит SRP. Придется заводить менеджер передвижения и отталкивания.


        Причем оказывается сложнее организовать последовательное выполнение.

        Эта мысль как то не развернута. Сложнее по сравнению с чем? В чем именно сложность?
        Многопоточность сложная не сама по себе, а когда нужно организовать синхронизацию состояния. Тогда начинаются всякие мьютексы, семафоры и т.п.
        Судя по вашей статье, вы синхронизацию организовываете до объяснения условий и переменных. В скретче какие то особые механизмы предусмотрены?


        Условием могут выступать те или иные события.

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

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


          App Inventor ( ru.wikipedia.org/wiki/App_Inventor ) хотя тоже позиционируется как продукт для подростков, но насколько знаю там некоторые взрослые реальные приложения под андроид запиливают.

          Многопоточность сложная не сама по себе, а когда нужно организовать синхронизацию состояния. Тогда начинаются всякие мьютексы, семафоры и т.п.
          Судя по вашей статье, вы синхронизацию организовываете до объяснения условий и переменных. В скретче какие то особые механизмы предусмотрены?


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

          В вашем примере в условии было «мышь нажата». Это не столько событие, сколько состояние внешнего мира.

          Формально «мышь нажата» — логическое выражение. Либо правда, либо ложь. Неформально — вопрос: «Мышь нажата?».
            0
            Для взрослых пытались делать Visual Age for Java
            Заголовок спойлера
            image

            Не взлетело.
              0
              LabView используется в промышленности, не говоря о графических языках для ПЛК.

              Из развиваемых сообществами HiAsm и FlProg но это не совсем классическое понимание программирования.
              Для контроллеров AVR кто то ещё использует Algorithm Builder Здесь форумная тема его применения — это уже улучшенный вариант ассемблера в блок-схемном исполнении.

              P.S. В качестве блок-схемного отображения может быть использован «язык» Дракон :)
                0

                Так смысл не в том, чтобы блоки расставлять мышкой, а в API для формального исполнителя.
                Хочется с анимацией этого исполнителя и простым синтаксисом, но реальность иная. В ней студенты хотят промышленный язык и не готовы платить за курсы по "специальному" языку для изучения программирования.
                Есть ведь еще всякие игры в кодинг, но это опять же "не серьезно" и платным курсам методически не подходит.

                  0
                  С «Драконом» всё непросто. Он, с одной стороны, очень строгий и поэтому уменьшает шанс на ошибку в алгоритме; а с другой стороны — он, как мне показалось, заточен под написание простых программ. Мне совершенно не понятно, как на нём сделать что-то реально сложное; как там работать со структурами и объектами; видимо, в этом направлении Дракон требует доработки. Я уж не говорю о попытке автоматического превращения схем Дракона в код…

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое