Как c помощью SNILBot начать изучение программирования не имея опыта?

advertisement
Как c помощью SNILBot начать изучение программирования не имея
опыта?
Этот документ содержит обзор того, что такое SNILBot и как
его можно использовать для обучения основам программирования.
Что понимается под программированием? (В данном документе)
Программирование в данном документе понимается как способ
описания человеком задач, которые он хочет решить с помощью
компьютера. Т.к. компьютер не понимает разговорный язык (например
русский) программирование производится с помощью языка имеющего
сравнительно небольшой набор инструкций. Таким образом, под
программой понимается ряд инструкций сообщенных компьютеру. При
этом инструкции входят в набор допустимых инструкций и описывают
поставленную задачу.
В общем виде можно сказать, что глядя на работу современного
программиста
мы видим как задавая исходный код на языке
программирования он получает результат, например:
Исходный код
Int a=5;
Int b=a+5;
print(b);
Результат (вывод:)
10
Тем не менее, в основе программирования на самом деле лежит не
столько язык понятный компьютеру, или набор инструкций из этого
языка как показано выше. Скорее это процесс, с помощью которого мы
подходим к решению задачи и думаем алгоритмически о том, как
решить проблему.
Что такое SNILBot?
SNILBot является средой игрового программирования логических
головоломок. Это означает, что по своей сути, это игра-головоломка, но
его игровая механика фактически имеет прямое соответствие с
понятиями программирования (подробнее об этом позже).
Игровой целью SNILBot является выполнение простых действий
игровыми персонажами (роботами в космосе) для достижения простых
игровых задач (сбор ресурсов, управление космическими антеннами или
солнечными батареями) на каждом уровне игры. Чтобы сделать это, вы
должны
«запрограммировать»
робота,
используя
набор
инструкций. Например:
Значок стрелки, сообщает персонажу команду двигаться вперед на одну ячейку.
Значок лампочки сообщает персонажу, что необходимо активировать объект на
котором стоит персонаж
Соответствие SNILBot программированию
Как только вы поймете, что означает программирование в общем,
а это связано с использованием алгоритмического мышления, чтобы
разработать алгоритм решения, вы увидите, как SNILBot относится к
программированию.
Далее мы расскажем о различных концепциях программирования,
которые используются в игровой механике SNILBot. Эти понятия мы
разделим на две группы, вторая из которых имеет более
непосредственное отношение к реальному к программированию:
1) Практики программирования - порядок, действий, с помощью
которого программисты решают задачи.
2) Управление потоком выполнения программ - понятия, которые
касаются
последовательности
выполнения
инструкций
программы шаг за шагом.
Практики программирования
Планирование
В начале каждого уровня, игроки должны оценить уровень и
инструкции (команды), которые доступны для предоставленных
персонажей. Игроки должны представить каким образом они зададут
поведение игрового персонажа (робота), чтобы решить задачу
поставленную на уровне. Возможно, для этого придется поставить себя
«на место» робота чтобы понять как провести робота по карте и
выполнить задачи для прохождения уровня (например собрать все
ресурсы или включить какие-то антенны).
Точно также профессиональные программисты должны понимать
и «визуализировать» проблему или задачу, которую они пытаются
решить. После этого они точно так же оценивают инструкции (команды,
технологии) имеющиеся в их распоряжении в конкретном языке
программирования, после чего создают алгоритм (план действий).
Программирование
Игроки должны упорядочить инструкции (команды) в
соответствии с разработанным алгоритмом (планом действий) с
помощью значков команд или самих команд. Точно также
программисты должны написать свою программу (используя код).
Тестирование
Игроки запускают программу, которую они создали и тестируют
ее, чтобы увидеть, выполняется ли решение задачи. Точно также
программисты отлаживают части программного кода, запуская его на
выполнение и сравнивают получаемый и ожидаемый результат.
Отладка
Если уровень не решен правильно, игроки вынуждены искать, что
может быть причиной проблемы. Это может включать повторный
запуск SNILBot по командам, или сдвиг команд, или удаление команды,
чтобы понять, где возникла проблема.
То же самое, программисты должны делать, когда есть ошибка в
коде. Они должны, как правило повторно запускать на выполнение
программы, обращая особое внимание на то, что могло пойти не так, как
идет ход выполнения, и где может быть найдена ошибка.
Управления потоком выполнения
Поток управления касается того, как происходит выполнение
программы вплоть до пошагового выполнения. Есть четкий набор часто
используемых
конструкций,
используемых
во
всех
языках
программирования,
которые
являются
основными
типовыми
строительными блоками для создания программ, организации кода,
обеспечения его модульности и расширяемости. Это включает в себя
процедуры (подпрограммы) и циклы.
Последовательность команд (Инструкций)
Игроки должны размещать инструкции в порядке, который
гарантирует поэтапное чтение команд от начала до конца. Это очень
похоже на, тот факт, что код программы выполняется также построчно.
Т.е. по одной строке за раз.
Процедуры
Игроки в SNILBot должны использовать процедуры, если они не
имеют достаточно места в основном блоке памяти, чтобы решить
задачу. Процедуры полезны и для извлечения шаблонов и повторного
использования наборов команд несколько раз, но при этом описываются
они один раз. Процедуры выполняются ожидаемо и таким образом, что,
когда значок процедуры (например Р1) запускается, все команды в
вызываемой процедуре (PROC1) выполняются, и по окончанию PROC1,
выполнение возвращается к команде следующей за значком P1 (т.е. в
точку кода следующую за точкой вызова процедуры).
Это очень похоже на процедуры или функции в типизированных
языках программирования. Процедуры полезны для повторного
использования кода и обособления кода, который в противном случае
будет продублирован в программе, или, также их можно использовать
для разбиения сложных задач на более простые без обязательного
условия повторного использования.
Циклы
Игроки в SNILBot могут использовать циклы, для решения
некоторых уровней. Циклы полезны для повторяющихся задач, и
позволяют повторять некоторый шаблон кода снова и снова . В SNILBot,
используется рекурсивный тип цикла.
Принцип его работы похож на принцип рекурсивного типа в обычных
языках программирования высокого уровня. В языках с контролем
типов, рекурсии выполняются таким же образом, как и в SNILBot, путем
вызова процедуры внутри самой процедуры (т.е.. Положить P1 в
PROC1). Таким образом в конце цикла, выполнение программы
переходит к началу цикла, как это происходит в игре. При этом на самом
деле SNILBot, позволяет наглядно демонстрировать даже такие сложные
циклические конструкции, как взаимная или перекрестная рекурсия
(Mutual Recursion).
Если
бы
SNILBot
был
бы
типизированным
языком
программирования
По своей сути, SNILBot все таки очень простой язык программирования,
только без типизации и языка в явном виде (в виде инструкций
описанных словами). Попробуем представить SNILBot, в словесной
форме. Тогда мы получили бы примерно следующее соответствие или
словарь конструкций:
Пиктогр
амма
Инструкция
Языка
(English)
Инструкция
Языка
(Русский)
Пикт
огра
мма
Forward()
Вперед()
turnLeft()
ПоверниНалево()
turnRight()
ПоверниНаправо()
Jump()
Прыгни()
Activate()
Активируй()
Инструкц Инструкция
ия
Языка
Языка
(Русский)
(English)
Proc1()
Процедура1()
Proc2()
Процедура2()
Тогда можно было бы выразить программу на SNILBot вида
таким образом:
main:
turnLeft()
Jump()
Activate()
А программа с процедурами может выглядеть так:
main:
Forward()
Proc1()
Proc1()
Proc1:
Jump()
Jump()
Activate()
Таким образом можно описать любую программу на SNILBot
Глоссарий терминов
Глоссарий используемых терминов и определений, в том числе
технических терминов.
Вызов
Лучше всего суть демонстрируют примеры:
«Вызов инструкции вперед» - заставляет
персонаж выполнить перемещение.
«Вызов процедуры P1» - персонаж начинает
считывать инструкции из блока памяти
отведенного для процедуры 1.
Контроль потока
Определяет порядок, в котором программа
выполнения
выполняет
команды. Обычно
это
последовательное выполнение одной команды за
другой. Однако в случае вызова процедуры "поток
управления" передается в подпрограмму P1 и
дальше
выполняются
команды
из
этой
процедуры, пока выполнение этой процедуры не
закончится или не произойдет вызов другой
процедры. В конце выполнения процедуры,
программа передает управление обратно в точку
вызова и пытается выполнить инструкцию
стоящую за точкой вызова процедуры.
Выполнение
Характеризует состояние, в котором компьютер
находится в процессе выполнения команд
Цикл
Концепция управления потоком, в которой набор
инструкций выполняется повторно, снова и снова.
Взаимная рекурсия Особый тип рекурсии, в которой две или более
(Mutual Recursion) процедуры, вызывают друг друга, чтобы сделать
большой (по масштабу) цикл.
Например: В конце PROC1, вызывается Р2, а в
конце PROC2, вызывается Р1. Это позволяет
создать большой цикл, в котором PROC1
вызывает PROC2, который вызывает PROC1,
который вызывает PROC2 и так далее.
Процедура
Небольшая программа, которая используется для
выделения общего (повторяющегося) набора
инструкций,
или
типовых(шаблонных)
инструкций из основной программы. Выделенная
часть может быть вызвана в основной программе,
один или более раз или может быть вызвана из
другой процедуры.
Например:
1) Вызов P1 из главной программы для
выполнения инструкций, описанных в PROC1.
2) Если вызов P2 появится в PROC1, PROC2
вызовется из PROC1.
Программа
Набор
инструкций,
которые
написаны
программистом
Программирование Написание
инструкций,
которые
пишет
программист чтобы создать программу.
Рекурсия
Тип зацикливания при котором процедура
вызывается сама из себя.
Например: Ввод команды P1 внутри PROC1, чтобы
организовать цикл.
Запуск (прогонка) То же, что и выполнение.
Документ основан на документе Danny Yaroslavsky “Lightbot – How Does
Lightbot Teach Programming”.
Download