До сих пор в блоге "В мире ИТ" не было публикаций, посвященных языкам, предназначенным для обучения программированию. Этой публикацией о среде Small Basic, название которой относит читателя к классическому BASIC, но представляющей собой несколько другой диалект, досадный пробел будет устранен. В заметке читатель найдет анализ основных сред для изучения программирования. Узнает о преимуществах и недостатках Small Basic, бесплатной, комфортной для новичков среде программирования, созданной профессионалами из Microsoft на основе всем известного Basic.
Языки обучения программированию
В настоящее время известны и активно эксплуатируются десятки языков программирования. Однако большинство из них, за редким исключением, только с большой натяжкой можно считать подходящими для знакомства с алгоритмами и создания простых приложений. Такое положение дел способствует тому, что процесс создания проектов, цель которых - знакомить детей, начиная с дошкольного или младшего школьного возраста с основами алгоритмов и созданием компьютерной графики, нарастает. Разработчики широко применяют для этого графику и анимацию, которые настолько привлекательны, что часто выступают ведущим средством обучения. В качестве примера можно привести известные и не настолько популярные Logo, Scratch, BYOB, Snap!, Alice, Android App Inventor, Starlogo, Etoys, DesignBlocks, Pocket Code, Hopscotch, Blockly, Greenfoot, Processing, GameMaker или Microsoft Small Basic, о котором мы и поговорим сегодня.
Современные интегрированные среды разработки очень полезны для программистов-любителей и профессиональных программистов, но их большая вариативность в обучении может быть в некоторых отношениях контрпродуктивной.
Некоторые языки программирования, используемые на практике (например, Python или Lua ), пригодны и для обучения программированию. Но они не подходят для обучения детей дошкольного и младшего школьного возраста по нескольким причинам. Одна из них - необходимость писать алгоритмы с использованием структурированного текста, синтаксис которого отслеживается либо интерпретатором, либо компилятором. Это один из самых старых методов программирования, истоки его можно проследить в глубинах компьютерного прошлого.
Первый компилятор машинного текста был создан в период между 1951 и 1952 годами Грейс Хоппер в рамках проекта A-0 (арифметический язык версии 0.). Следом был разработан FORTRAN Джоном В. Бэкусом и его командой. За истекшие шестьдесят лет были предприняты разной степени успешности попытки визуального проектирования алгоритмов. Программы в этом случае создавались не путем написания структурированного исходного текста, а с использованием алгоритмов и диаграмм, созданных с помощью мыши, жестов или даже света.
Известны попытки «перевести» классические блок-схемы в копенограммы и подобные элементы. Ряд разработчиков используют визуальный или графический язык UML как один из инструментов разработки. Применяют также BPM - средство проектирования бизнес-процессов. При адекватно подобранных блоках он представляет собой полноценный язык программирования.
В области программного обеспечения, предназначенного для обучения программированию, используется тот же принцип, что и с блок-схемами - возможность конструировать (или представлять) алгоритмы с использованием блоков. Последние представляют собой отдельные команды или вызываемые функции, дополняемые базовыми структурированными командами, разработанными для создания условий принятия решения и программных циклов.
Проект Scratch основан на этом принципе. Разработчики использовали оптимизированные, визуально привлекательные блок-схемы, своеобразные базовые строительные блоки, с помощью которых можно составить программу. Пользователь использует эти блоки в своих программах.
Метод соединения блоков друг с другом (подобно паззлам) гарантирует, что программа всегда будет синтаксически правильной. Утомительное исправление опечаток, поиск пропущенных точек с запятой, контроль парности круглых скобок и другие кропотливые действий делают очень тяжелым процесс работы с использованием популярных языков программирования. Поэтому для пользователя семантика приложения очень важна.
Если визуального программирования недостаточно
Ранее BASIC был на каждом компьютере, с которым мог взаимодействовать ребенок, но сегодня нет простого способа увлечь детей программированием.
Scratch и подобные ему проекты - весьма популярный инструмент обучения разработке, но с увеличением длины программы его использование становится неэффективным, как и при редактировании программ (особенно для обозначения выражений).
Поэтому после достижения определенного уровня в визуальном языке целесообразно перейти к стандартному программированию, основанному на написании кода проверенным способом и с такими вспомогательными инструментами как справка, контекстное меню и т. д. Именно этим направлением и является Small Basic - проект, основанный на идеях популярной статьи «Почему Джонни не умеет писать код». Small Basic существует и как обычное приложение Windows, и как «интегрированная веб-среда разработки», доступная здесь.
Оптимально эта веб-среда работает в Firefox, запущенном из под операционной системы Linux.
Small Basic достаточно минималистичен: он распознает только четырнадцать ключевых слов и два оператора, написанных словами; остальная функциональность «спрятана» в следующих модулях:
Small Basic поддерживает только глобальные переменные (что существенно ограничивает его использование в более крупных проектах). Он позволяет писать подпрограммы, но не предоставляет возможность передавать параметры в качестве аргументов. Дополнительные функции и ограничения упомянуты ниже.
Примечание. Термин «Small» относится к количеству ключевых слов в языке и, отчасти, к его выразительности. Однако саму реализацию среды «Small» Basic нельзя назвать «маленькой», особенно в сравнении с классическим языком BASIC, который был реализован всего на восьми килобайтах памяти, и лишь некоторые версии использовали больше в шестнадцать килобайт. Есть даже версии BASIC, работающие на 2 и 4 КБ памяти.
Знакомство со Small Basic
Microsoft Small Basic - это язык программирования , интерпретатор и связанная с ним IDE (интегрированная среда разработки). Среда IDE предоставляет собой упрощенную среду программирования, оснащенную такими функциями, как подсветка синтаксиса, интеллектуальное завершение кода и доступ к документации в редакторе. В языке всего 14 ключевых слов (Else, ElseIf, EndFor, EndIf, EndSub, EndWhile, For, Goto,If, Step, Sub, Then, To, While).
19 февраля 2019 года Microsoft выпустила Small Basic Online (SBO). Это программное обеспечение с открытым исходным кодом, выпущенное под лицензией MIT на GitHub . Small Basic может работать непосредственно из веб-браузера. Интегрированная веб-среда разработки доступна по адресу smallbasic-publicwebsite.azurewebsites.net. Графический интерфейс пользователя минималистичен, но в его распоряжение предоставлен простой отладчик, а также (что важно для новичков) контекстное завершение функций и методов, которые разделены на несколько модулей:
После вписывание в строку хотя бы одного символа из имени функции / метода / атрибута меню уменьшается:
Что достаточно удобно и напоминает привычный порядок работы с другими программными оболочками.
При написании отдельных строк в случае совершения или возможности совершения ошибки немедленно появляется уведомление:
Введем стандартную программу типа «Hello, world!» в Small Basic. В классическом BASIC эта программа выглядела бы так:
Однако команды PRINT нет в Small Basic . Вместо этого можно воспользоваться методом WriteLine для объекта TextWindow (и хотя нет необходимости объяснять термины «объект» и «метод» даже новичкам, стоит отметить, что они нигде не упоминаются в справочной документации):
После запуска программы с помощью кнопки RUN, расположенной на ленте меню справа, откроется текстовая консоль (в том же окне браузера), в которой отобразится записанное сообщение, а также информация о том, что программа успешно завершена:
Работа с переменными, основными типами данных
Переменные создаются автоматически при первом применении в программе. Обычно это присвоенные переменной значения. Предусмотрено использование числовых значений и работа со строками без явного указания типа переменной (тип присваивается значению):
Примечание: в отличие от классической BASIC, в браузерной версии можно обойтись без команды DIM, а суффиксы $ не используются для обозначения переменных.
Поддерживается работа с переменными, содержащими числовые значения. Используются пять стандартных арифметических оператора:
Для Small Basic типично, что числовые значения можно комбинировать со строками. Но это может стать и источником проблем:
Уже упоминались заранее подготовленные объекты, их методы и атрибуты. Таким образом, например, решаются строковые операции. К примеру, в исходном языке BASIC от Microsoft встроенные функции с именами LEFT $ , RIGHT $ и MID $ могли использоваться для получения следующей подстроки:
В Small Basic вместо этого нужно применить функции (или методы класса) объекта Text. GetSubText используется для получения подстроки:
Примечание: в Small Basic нужно применять длинные комбинации имен объектов и методов, но «точечная нотация» решает две проблемы: через контекстную справку, а также через логическое разделение функций в соответствии с их значением. Оператор также может назвать несколько функций одним и тем же именем, но с разными значениями - если они были определены как методы в рамках другого объекта, служащего пространством имен. Примером является функция / метод под названием Show, который применяют несколько раз, но каждый раз в другом контексте и, следовательно, с другим поведением.
Интерактивный ввод данных
В классической версии BASIC команда INPUT используется для ввода числовых данных или текста (строк) вручную. Но в Small Basic ее нет. Вместо нее разработчики предлагают функцию из раздела TextWindow. Функция ReadNumber используется для ввода числовых данных вручную , не позволяя записывать нечисловые символы. Воспользоваться этой важной функцией (которой нет во многих других языках в такой простой форме) крайне просто:
Практическое использование функции:
После ввода числового значения:
Условия. Структурированный оператор if-then-else
Практически любой полноценный язык программирования в модели Тьюринга включает некую форму построения решений или специальные формы с тем же значением. Small Basic не является исключением. Включение структурированного оператора if-then-else, расширяемого другими конкатенированными условиями, имеет аналогичное значение. Базовая форма этой команды не содержит ветки else :
Примечание: все команды, составляющие блоки, заканчиваются ключевым словом, начинающимся с end , в данном случае - словом endif.
Полное разветвление на две независимые ветви выполняется следующим образом:
Часто требуется создать несколько веток программы, каждая из которых выполняется после появления определенного условия. Такое объединение условий обеспечивается конструкциями, содержащими ключевое слово elseif (в слитном написании):
Обратите внимание, что в ветке elseif может быть любое число.
Вложенные конструкции «if-then»
В Small Basic - в отличие от многих старых диалектов языка программирования BASIC - можно вложить практически любое количество конструкций принятия решения «if-then» («если-то»). Рассмотрим эту возможность на немного измененном уже приведенном выше примере. Здесь во «внешнем» условии необходимо проверить, является ли введенное значение отрицательным, и если нет (когда оно положительно или равно нулю), выполняется другое ветвление. Благодаря тому, что новый программный блок автоматически создается после ключевого слова then, ошибки goto fail не возникают здесь так легко, как в тех языках программирования, где блок является необязательным:
Вычисляемый программный цикл типа FOR-NEXT
GW-BASIC, последний представитель классического BASIC, поддерживает два формата структурированных программных циклов.
Первый тип цикла - это цикл FOR-NEXT, который используется практически во всех BASIC, но его поведение не везде одинаково.
Второй тип петли - WHILE-WEND. Впоследствии в QBasic (наследник GW-BASIC) был добавлен универсальный цикл DO-LOOP, в котором можно выбрать тест в начале и / или в конце.
Small Basic наследует особенности GW-BASIC, поддерживая только два типа программных циклов.
Первый из них - вычисляемый тип программного цикла FOR-NEXT.
Примечание: написание FOR-NEXT здесь используется как отсылка на классический BASIC. На самом деле в Small Basic вместо NEXT используется ключевое слово endfor.
Базовый тип этого цикла постепенно вычисляет значения от 1 до 10 включительно. Также можно использовать числа с десятичной точкой:
Следующий цикл будет выполнен ровно один раз (в некоторых диалектах BASIC он не будет исполнен ни разу):
И наоборот, следующий цикл не будет выполняться ни разу. В отличие от диалекта Atari BASIC, который неправильно вызывает работу цикла со значением, равным единице:
Также можно выбрать отрицательный шаг:
Small Basic не ограничен целочисленными значениями, в отличие, например, от Паскаля,:
Можно постоянно изменять предел цикла, новый предел будет учтен. Тогда как многие классические диалекты BASIC сосчитают выражение с ограничениями только один раз в начале:
Еще один пример возможной смены шага:
В этом примере расчет двух квадратов реализован несколько необычным способом:
Примечание: цикл FOR-NEXT достаточно гибкий (но не во всех реализациях BASIC) вследствие того, что пределы и шаг подсчитываются вновь с каждой итерацией.
Программный цикл WHILE
Второй и в то же время последний тип программного цикла - это цикл типа WHILE , который многократно выполняет тело функции только при соблюдении записанного условия. Этот цикл написан на Small Basic с парой ключевых слов while и end while, из которых удалено явно лишнее ключевое слово WEND. Типичный пример использования этого программного цикла для отображения степенного ряда по основанию 2:
Если условие не выполняется в начале, тело цикла не будет выполнено ни разу:
Однако довольно часто можно столкнуться с худшей ситуацией - бесконечным циклом, который плохо обрабатывается в веб-версии Small Basic, потому что его нелегко завершить:
Вычисление наибольшего общего делителя. Реализация в GW-BASIC и Small Basic
Рассмотрим программу, написанную на раннем GW-BASIC, поддерживающем классический BASIC, и на Small Basic. Сравнивая стиль оформления двух вариантов программы, можно выяснить, куда (если было ли вообще) сдвинулось развитие BASIC за последние 38 лет.
Начнем с варианта алгоритма, предназначенного для вычисления наибольшего общего делителя двух натуральных чисел. Его реализация на основе программного цикла WHILE в GW-BASIC может выглядеть так:
Введение этой программы на Small Basic практически дословно показывает лишь минимальные отличия - особенно в «блочной» записи команд, которые должны выполняться при выполнении данного условия:
Подпрограммы
Small Basic поддерживает создание подпрограмм, как практически все ранние реализации BASIC. В классических неструктурированных диалектах BASIC начало подпрограммы никак не отмечалось - это была просто строка программы, на которую был выполнен переход с помощью команды GOSUB (подпрограмма даже не была названа). Возврат из подпрограммы осуществлялся командой RETURN. В Small Basic выбран другой подход, сходный с Q-Basic. Подпрограмма определяется оператором Sub, за которым следует тело подпрограммы в следующих строках. Вся подпрограмма завершается командой endub. Для вызова подпрограммы вместо оператора GOSUB в Small Basic используется непосредственно имя подпрограммы, за которым следуют пустые круглые скобки:
Примечание: пустые скобки не указывают на то, что некоторые параметры могут быть переданы в подпрограмму. Все переменные (и параметры можно рассматривать как форму переменных) в Small Basic являются глобальными. Скобки используются только для того, чтобы четко указать, что это вызов подпрограммы. Невозможность использования классических аргументов и параметров ограничивает управляемый размер программ, написанных на Small Basic.
Преобразование программы, построенной на подпрограммах, с GW-BASIC на Small Basic
В этом алгоритме вызов подпрограммы осуществляется внутри программного цикла. Расчеты, реализованный в GW-BASIC, выглядит так:
Преобразование в Small Basic относительно несложно, и результат выглядит следующим образом:
Примечание: можно было бы переписать первый цикл программы через конструкцию for-next
Команда GOTO
В Small Basic есть неструктурированный оператор GOTO, который используется для перехода в другое место в данном программном блоке и даже в программный цикл (чего обычно нет в других диалектах BASIC). Пункт назначения перехода помечается меткой - идентификатором, зафиксированной двоеточием (Small Basic терпит в этом случае поражение в своей попытке избавиться от всех специальных символов). Давайте теперь посмотрим на основной способ использования этого выражения (справедливо осужденного многими теоретиками), используемого для реализации программного цикла, в котором условие проверяется в конце цикла:
Примечание. Оператор GOTO также может использоваться для реализации конструкций, использующих ключевые слова break и continue на других языках. Это также позволяет переходить из вложенных циклов и т. п.
Прыжок по петле разрешен:
Можно выйти из цикла:
Но переход к подпрограмме больше не разрешен:
Примечание: реализация оператора GOTO не так проста, как в других диалектах. В более ранних BASIC при переходе из цикла (или даже подпрограммы) необходимо было удалить из стека автоматически создаваемые вспомогательные значения - ограничения цикла, номера строк для возврата из подпрограммы / возврата в начало цикла и т. д. с помощью команды pop. В Small Basic это не обязательно.
Преобразование программы, реализованной с помощью команды GOTO, с GW-BASIC в Small Basic
Рассмотрим преобразование алгоритма на основе оператора GOTO через алгоритм вычисления наибольшего общего делителя двух положительных целых чисел. При этом условие положительности не контролируется. При сравнении двух промежуточных значений, на котором он основан, он переходит к началу цикла программы:
Преобразование этого алгоритма в Small Basic несложно, и результат даже более читаем, если использовать метки вместо номеров строк:
Поля и карты
Массивы также входят в Small Basic. В ранних диалектах языка программирования BASIC требовалось выделить поле перед доступом к нему, обычно с помощью команды DIM. Кроме того, разные диалекты BASIC различались по тому, должен ли первый элемент массива иметь индекс, равный нулю или единице. Унификация привела к появлению новых диалектов BASIC, предлагающих возможность выбора значения индекса для первого элемента - например, с помощью команды OPTION BASE (в GW-BASIC или Q-Basic). В Small Basic все еще проще, особенно для начинающих, потому что массивы можно использовать без выделения, а индексы элементов могут быть произвольными. Кроме того, можно описать все поле целиком:
Точно такой же синтаксис используется при работе с картами. Фактически, общие поля - это просто частный случай карт или ассоциативных полей. Рассмотрим, как начать использовать карту без необходимости выделения или какого-либо определения:
Примечание: можно добавлять новые элементы в поле, изменять существующие элементы, узнавать значения элементов. Для других операций с массивами указаны функции, которые можно найти в пространстве имен Array.
Ловушки Small Basic
Дизайн Small Basic показывает, что его создатели постарались максимально упростить изучение языка для начинающих. Однако некоторые попытки упрощения могут привести к проблематичному и часто трудно объяснимому поведению. Например, в следующем примере сообщение напечатано правильно:
Приведем код этого примера и увидим в нем комбинацию числовых значений со строками:
Попробуем напечатать сообщение вида: «10 + 20 = 30». Получится следующая программа:
В итоге получится:
Интерпретатор Small Basic распознал типизированное выражение.
Примечание: есть и другие подводные камни, возникающие из-за слишком "умной" системы типизации Small Basic.
Рассмотрим некоторые из пространств имен (или модулей), которые используются при создании приложений на этом языке. Выбор модулей относительно велик, но есть и базовый набор. Сюда относятся функции ввода и вывода, работа с полями, математические функции, рисование в окне, графика, операции с графическими объектами, создание форм с базовыми функциями, элементы управления, операции с файлами, работа со звуком, сетевые операции и т. д. Модули расширения обеспечивают связь с Arduino, microbit или Raspberry Pi (но не все перечисленные модули можно использовать в веб-версии Small Basic).
В разделе "Документация" можно получить подробное разъяснение по каждому элементу языка и оболочки, которые вызвали вопросы.
Также можно получить учебный курс по Small Basic.
Пособие Learn to Program with Small Basic познакомит с миром программирования, расширяющего возможности каждого. С его помощью просто освоить основы с помощью простых действий, таких как отображение сообщений и рисование красочных картинок, а затем перейти к программированию игр. Изучение пособия позволит:
- Узнать, как запрограммировать свой компьютер, чтобы он называл вас по имени
- Создать игру камень-ножницы-бумага, используя выражения If / Else
- Создать интерактивную карту сокровищ с помощью массивов
- Нарисовать замысловатые геометрические узоры с помощью нескольких строк кода
- Упростить сложные программы, разбив их на небольшие подпрограммы
- Научиться приказывать черепахе рисовать фигуры, создавать волшебный движущийся текст, быстро решать математические задачи, помогать рыцарю убить дракона.
Каждая глава пособия заканчивается творческими задачами по программированию.
В настоящее время русский язык отсутствует среди встроенных в онлайновую оболочку языков. Что касается оффлайновой программы, то 26 июня 2009 года вышла версия 0.5.1, в которой весь API был переведен на русский язык.
Беглый анализ среды Small Basic показывает, что этот язык предназначен для новичков, которые хотят изучать программирование. Разработчики придали среде IDE Small Basic сходство с любимым всеми учителями информатики MS Paint. Small Basic по мысли создателей должен стать настолько же комфортным проводником для любого новичка в мир программирования.
Разработчики среды программирования считают, что Small Basic - лучший старт, нежели с C, C# или VB.NET, C ++. Многим трудно даются именно основы языка, а без их понимания сложно написать хорошую программу. Доступный для всех Small Basic без труда решает эту проблему.
С его помощью легко понять, что такое IDE или Editor, процесс запуска программы, логика программы буквально за пару дней. Позже на этой основе можно легко учить любой другой язык.
Образовательные приложения собирают и используют персональные данные детей в рекламных целях