АрдуЛисп – это революционное решение для олимпиадной и соревновательной образовательной робототехники, основанное на использовании блочного языка программирования и скриптового языка программирования – ЛИСП.
Все известные решения в области образовательной робототехники в мировой практике имеют возрастной порог:
-
либо 7+ – для быстрого вхождения, в котором используется блочный визуальный язык программирования от компании Google – Blockly (Блокли). Так Blockly является основой оболочки Scratch (Скретч).
-
либо 14+ – использование скриптовых языков программирования: С++,Java, Python, Lua.
Однако, если ученик сначала осваивает блочный язык программирования, результатом которого является формирование алгоритмического стиля , то это может произойти достаточно быстро, например к возрасту 11-12 лет, то возрастной порог всё ещё не позволяет перейти к полноценному изучению скриптовых языков программирования с высоким порогом вхождения 14+.
Компания Лего, в своё время озадачилась этой проблемой. Так появились конструкторы Lego Spike, которые можно программировать как на Scratch так и на microPython. Однако microPython имеет также порог вхождения 14+. Об этом свидетельствуют производители отечественной IoT платы от компании PinLab на базе микроконтроллера ESP8266.
Всё же, наибольший интерес представляет образовательная робототехника на основе Ардуино, поскольку тут можно достичь знаний языка программирования С++ и возможности работать над проектами любой сложности. Но это базовое решение требует высокого порога вхождения, не менее 14+.
Для снижения порога вхождения в программирования платформы Ардуино на С++ существует отечественное решение - Ardublock, среда в которой можно составить программу в виде блоков и автоматически получить её аналог на языке С++. Это довольно хорошее решение, но оно обладает некоторыми недостатками, к сожалению, в большинстве случаев связанными непосредственно с политикой автора. Но здесь мы на этом останавливаться не будем...
Языки программирования Python, Java, Lua могут также использоваться в Ардуино-проектах, превращая плату в интерпретатор этих языков, что можно расценивать как модельное преимущество, в отличии от компилируемого С++. Недостатком использования этих языков программирования является то, что им требуется более мощный микроконтроллер, например, ESP или STM. Кроме того, эти решения требуют всё-равно возрастного порога 14+.
Язык программирования ЛИСП, «открытый» Джоном Маккарти в 50-х годах прошлого века, способен решить проблему 11+. Следует отметить, что Джоном Маккарти является автором понятия AI (Искусственный Интеллект). То есть его язык программирования изначально создавался для реализации AI подхода в ЛИСП-машинах. Сейчас это совсем не очевидно. Но с другой стороны можно точно сказать, что из любой Ардуино-совместимой платы, в современных условиях, можно сделать интерпретатор языка ЛИСП, т.е. ЛИСП-машину. Для этого нужно обратить своё внимание на проект - uLisp.
LISP, в отличие от других интерпретируемых языков - Python, Java, Lua, в версиях для микроконтроллеров, имеет свои преимущества.
Во-первых, как уже было отмечено, ЛИСП-машину можно собрать из любой платы Ардуино на базе микроконтроллеров AVR, даже на Arduino Nano! Конечно, здесь оптимальным решением будет использование Arduino Mega, но всё же!
Во-вторых, при использовании Arduino UNO, Nano или Mega, мы можем позволить себе задействовать симулятор электрических схем - SimulIDE в качестве среды для экспериментов. Для этого потребовалось добавить в SimulIDE плагин UDP-serial и коррекцию работы с UTF-8.
В-третьих, язык программирования uLisp достаточно простой в сравнении с microPython и другими интерпретаторами. Здесь нет пересечения множества парадигм, что оптимально для начинающих программистов. С другой стороны, изначально ЛИСП считается языком функционального программирования, однако при реализации uLisp на Blockly практически 100% всего императивного функционала в нём беспроблемно реализуется.
Перечислим преимущества оболочки АрдуЛисп в сравнении с Ardublock:
-
Не нужно компилировать программу. Программы uLisp запускаются в режиме интерпретатора.
-
Генерируемый язык программирования uLisp более простой, по сравнению с аналогами, что позволяет снизить потенциальный барьер при обучении программированию при переходе от блочного программирования к скриптовому.
-
Возможность использовать имена переменных и функций на кириллице.
-
Возможность выполнять программу непосредственно в симуляторе - SimulIDE через плагин UDP-serial.
-
Более продуманный функционал для обучения непосредственно программированию, в том числе и для решения олимпиадных задач. Например, грамотное наследования от класса библиотеки Adafruit GFX позволяет использовать единый минимальный набор визуальных блоков Blockly для работы с различными устройствами вывода графической информации.
-
Возможность создавать модули для более удобной работы над большими проектами.
-
Запуск оболочки из ОС Linux, кроме web-версии и версии Wndows. Для обмена данными с COM-портом в АрдуЛисп реализована оболочка на базе Qt (WebEngine) и как альтернатива – flask web-server на базе - Python.
-
Свободно распространяемый продукт с открытым исходным кодом (скачать с gitverse.ru)
Проект светильника, выполненный с учеником 4-го класса с использованием АрдуЛисп, Arduino Mega и WS2812
Из сравнительных недостатков, которые ограничивают использование оболочки АрдуЛисп прямо сейчас — это недостаток обучающих материалов, которыми изобилует Ardublock. Поэтому в настоящий момент идёт работа над насыщением электронного учебника АрдуЛисп с примерами проектов под платы IoT Pinlab и Arduino Mega в SimulIDE.
Постскриптум
Джон Маккарти создавал свой язык программирования – ЛИСП на заре информатизации для решения задачи Искусственного Интеллекта, автором понятия которого он и является. В современном мире эту функцию заменили другие инструменты, а сам язык остался не очень востребованным. Однако его простота функционала и способность, в версии для микроконтроллеров, из любой «железяки» получить ЛИСП-машину, позволяют решить проблему подготовки программистов, начиная с младшего возраста, при переходе от блочного программирования к скриптовому. Кто знает, как изменится Мир, если в недалёком будущем мы получим большое количество ЛИСП-программистов, с его, всё еще, недооценёнными возможностями?
Автор: osdlab
