Введение

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

Языки сборки

Первоначально машинный код был единственным способом программирования компьютеров. Язык ассемблера стал следующим используемым языком, что делает его одним из старейших семейств компьютерных языков, применяемых и сегодня. Существует множество диалектов и реализаций, как правило, по одному для каждой архитектуры компьютерного процессора. Это очень базовый язык программирования низкого уровня. Он является одним из наиболее сложных в работе, поскольку не имеет типизации и отличается жесткостью. Для обучения существует несколько упрощенных диалектов. Языки низкого уровня должны быть написаны для конкретной архитектуры процессора и не могут быть написаны или изучены изолированно, без ссылки на процессор, для которого они предназначены. В отличие от языков высокого уровня, использование учебного языка ассемблера требует представления процессора, будь то виртуальный или физический. Ассемблер используется для изучения фундаментальных принципов работы компьютерного процессора. Little Man Computer (LMC) – это учебная модель простого компьютера с архитектурой фон Неймана, обладающего всеми основными характеристиками современных компьютеров. Его можно программировать на машинном коде (обычно десятичном) или на языке ассемблера. Он основан на концепции маленького человека, запертого в небольшой комнате. На одном конце комнаты находятся 100 почтовых ящиков, служащих памятью; каждый из них может содержать трехзначную инструкцию или данные. На другом конце комнаты расположены два почтовых ящика с надписями «ВХОД» и «ВЫХОД», которые принимают и выдают данные. В середине комнаты находится рабочая зона с простым двухфункциональным (сложение и вычитание) калькулятором, называемым Аккумулятором, и сбрасываемым счетчиком, называемым Счетчик программ. Счетчик аналогичен тому, который использует швейцар, чтобы подсчитать количество людей, вошедших в помещение; он может увеличиваться на 1 или сбрасываться до 0. В соответствии с архитектурой фон Неймана, память хранит как инструкции, так и данные. Пользователь загружает данные в почтовые ящики, а затем подает сигнал маленькому человеку начать выполнение. Next Byte Codes (NBC) – это простой язык с синтаксисом языка ассемблера, используемый для программирования программируемых блоков Lego Mindstorms NXT. Компилятор командной строки генерирует машинный код, совместимый с NXT, и поддерживает Windows, Mac OS X и Linux. Little Computer 3 (LC 3) – это язык ассемблера с упрощенным набором инструкций, но его можно использовать для написания умеренно сложных ассемблерных программ, и он является теоретически подходящей целью для C-компиляторов. Он проще, чем ассемблер x86, но имеет много функций, аналогичных функциям в более сложных языках. Эти особенности делают его полезным для обучения основам программирования и компьютерной архитектуре студентов-первокурсников, изучающих компьютерные науки и инженерию, что является его наиболее распространенным применением. DLX – это архитектура процессора RISC (Reduced Instruction Set Computer), разработанная основными создателями MIPS и Berkeley RISC, двух эталонных примеров дизайна RISC. DLX по сути представляет собой очищенный и упрощенный MIPS с простой 32-битной архитектурой загрузки/хранения. Он широко используется в курсах компьютерной архитектуры на уровне колледжа. MIX и MMIX – это гипотетические компьютеры, используемые в монографии Дональда Кнута «Искусство программирования» (TAOCP). Компьютерные системы MIX предназначены для обучения людей тому, что происходит внутри компьютера, благодаря использованию базового и понятного машинного языка. Несмотря на свою простоту, система MIX справляется со сложными задачами, которые встречаются в типичных высокопроизводительных компьютерах общего назначения. MIX – это гибрид, программируемый как в двоичных, так и в десятичных числах; большинство программ, написанных для него, будут работать в любой форме. Программные реализации для MIX и MMIX были разработаны Кнутом и предоставлены в свободный доступ. Существует несколько версий обоих эмуляторов. MIX – это компьютер в стиле 1960-х годов. Он заменен MMIX, более новой современной компьютерной архитектурой, 64-битной архитектурой набора инструкций RISC (ISA). Для MMIX Кнут сотрудничал с архитекторами MIPS и Alpha ISA.

На основе C

Ch — это интерпретатор C/C++, разработанный, чтобы помочь студентам, не изучающим компьютерные науки, освоить математику, вычислительную технику и программирование на C и C++. Он расширяет возможности C функциями для численных расчетов, построения 2D/3D графиков и написания скриптов.

На основе Java

NetLogo, написанный на Java и Scala, — это среда разработки для создания и исследования научных моделей, в особенности моделей, основанных на агентах. Он широко используется как в научных исследованиях (в научных публикациях, использующих NetLogo), так и в образовательных целях, включая начальную и среднюю школу, университеты и музеи.

На основе Lisp

Lisp — второе по старшинству семейство языков программирования, используемых сегодня, и, как следствие, имеет множество диалектов и реализаций различной сложности. Lisp изначально был создан как практическая математическая нотация для компьютерных программ, основанная на лямбда-исчислении, что делает его особенно подходящим для обучения теориям вычислений. Будучи одним из самых ранних языков, Lisp стал пионером многих идей в информатике, включая древовидные структуры данных, автоматическое управление памятью, динамическую типизацию, объектно-ориентированное программирование и самокомпилирующиеся компиляторы, все из которых полезны для изучения информатики. Название LISP происходит от "List Processing language" ("язык обработки списков"). Связанные списки являются одной из основных структур данных языка, а исходный код Lisp состоит из списков. Таким образом, программы на Lisp могут манипулировать исходным кодом как структурой данных, что приводит к созданию макросистем, позволяющих программистам создавать новый синтаксис или даже новые языки, специфичные для определенной области, встроенные в Lisp. Следовательно, Lisp полезен для изучения проектирования языков и создания пользовательских языков. Разумным путем обучения будет Logo, за которым последует любой образовательный вариант, такой как Scheme или newLISP, а затем профессиональный вариант, такой как Common Lisp. Logo — это язык, который был специально разработан для знакомства детей с программированием. Первая часть обучения Logo посвящена "черепашьей графике" (происходящей от роботов-черепах), которая использовалась еще в 1969 году с прото-Logo. В современных реализациях абстрактное графическое устройство, называемое черепахой, используется для того, чтобы сделать программирование для детей более привлекательным, сосредотачиваясь на создании черепашьей графики. Сеймур Паперт, один из создателей Logo, был выдающимся мыслителем в конструктивизме, разновидности конструктивистских теорий обучения. Паперт утверждал, что такие виды деятельности, как письмо, естественным образом будут осваиваться гораздо более юными детьми, если они примут компьютерную культуру. Таким образом, Logo был разработан не только для обучения программированию и вычислительным концепциям, но и для улучшения общего благополучия ребенка в культуре, все больше доминирующей технологиями: "важнее, чем раннее начало интеллектуального развития, — избежать длительного периода зависимости, в течение которого человек учится воспринимать обучение как нечто, что должно быть предоставлено более могущественным другим. Такие дети не будут определять себя или позволять обществу определять их как интеллектуально беспомощных".

На основе мелких разговоров

В рамках проекта «Один ноутбук на ребенка» была разработана последовательность языков на основе Smalltalk, каждый из которых предназначен для подготовки к освоению следующего. Структура такова: Scratch – Etoys – Squeak – любой Smalltalk. Каждый из них предоставляет графическую среду, которую можно использовать для обучения детей не только основам программирования, но и моделированию физических и математических явлений, созданию историй и т. д. посредством конструктивистского обучения. Smalltalk и Squeak – это полнофункциональные языки разработки приложений, существующие и пользующиеся уважением на протяжении десятилетий; Scratch – это инструмент обучения детей. Scratch – это визуальный язык, основанный на Squeak и реализованный в нем. Его цель – научить детей программированию и дать им возможность создавать игры, видео и музыку. В Scratch все интерактивные объекты, графика и звуки можно легко импортировать в новую программу и комбинировать различными способами. Это позволяет начинающим быстро достигать результатов и сохранять мотивацию к дальнейшему обучению. Сообщество Scratch разработало и загрузило более 3 000 000 проектов. Разработчиком является группа Lifelong Kindergarten в Медиа-лаборатории MIT. Etoys основан на идее программируемых виртуальных объектов, взаимодействующих на экране компьютера. Etoys предоставляет среду разработки с богатыми мультимедийными возможностями и простой, но мощной объектной моделью, основанной на скриптах, для различных типов объектов, создаваемых пользователями. Он включает в себя 2D и 3D графику, изображения, текст, частицы, презентации, веб-страницы, видео, звук и MIDI, возможность обмена рабочими столами с другими пользователями Etoys в реальном времени, что открывает множество возможностей для интерактивного обучения и игр через Интернет. Etoys поддерживает несколько языков и успешно используется в Соединенных Штатах, Европе, Южной Америке, Японии, Корее, Индии, Непале и других странах. Программа предназначена для детей в возрасте от 9 до 12 лет. Squeak – это современная, открытая, полнофункциональная реализация языка и среды Smalltalk. Smalltalk – это объектно-ориентированный, динамически типизированный, рефлексивный язык программирования, созданный для поддержки «нового мира» вычислений, воплощенного в концепции «симбиоза человека и компьютера». Как и Lisp, он обладает сохранением состояния на основе образа, что позволяет изменять все изнутри языка (см. Smalltalk#Reflection). Он оказал значительное влияние на индустрию, представив многие концепции объектно-ориентированного программирования и JIT-компиляции. Squeak является платформой для широкого спектра проектов, включая мультимедийные приложения, образовательные платформы и разработку коммерческих веб-приложений. Squeak разработан с учетом высокой переносимости и простоты отладки, анализа и модификации, поскольку его виртуальная машина полностью написана на Smalltalk.

Паскаль

Паскаль – наиболее известный язык программирования, разработанный с целью обучения. С конца 1970-х по конец 1980-х годов он был основным выбором в вводных курсах компьютерных наук для обучения студентов программированию в США и Европе. С тех пор его применение в реальных задачах возросло, и рассматривать его исключительно как учебный язык стало предметом споров.

Другое

CircuitPython – версия Python, ориентированная на начинающих, для интерактивной электроники и образования. Rapira – процедурный язык программирования, похожий на ALGOL, с простой интерактивной средой разработки, созданный в Советском Союзе для обучения программированию в школах. Src:Card – тактильный офлайн-язык программирования, встроенный в образовательную карточную игру.

Дети

AgentSheets и AgentCubes – это два инструмента для развития вычислительного мышления, предназначенные для создания 2D/3D игр и симуляций. Разработка осуществляется через настольные или веб-приложения и позволяет создавать 2D/3D игры, воспроизводимые в браузерах, соответствующих стандарту HTML5, включая мобильные устройства. Alice – это бесплатное программное обеспечение, разработанное для обучения детей объектно-ориентированному программированию. Программисты создают интерактивные истории, используя современный интерфейс IDE со стилем программирования перетаскиванием. Целевая аудитория – студенты-первокурсники, хотя большинство детей, имеющих опыт работы с компьютером, найдут его увлекательным и познавательным. Storytelling Alice – это вариант Alice, предназначенный для детей младшего возраста, с еще большим акцентом на рассказывание историй. Blockly – это графический язык программирования с открытым исходным кодом, работающий в веб-браузере, где пользователи могут соединять блоки для создания приложений; ввод текста не требуется. Разработан компанией Google. Дополнительная информация доступна на главной странице проекта. CiMPLE – это визуальный язык программирования для роботизированных наборов для детей. Он построен на основе C как DSL (Domain Specific Language). Компания ThinkLabs, индийский стартап в области образования в робототехнике, разработала его для роботизированного набора iPitara. Язык имеет большое сходство с языком C. Около 5000 студентов в Индии приобрели набор iPitara и запрограммировали его с помощью CiMPLE. Дополнительная информация доступна в блоге разработчиков CiMPLE и на сайте ThinkLabs. Physical Etoys – это бесплатное расширение с открытым исходным кодом для Etoys. Его философия заключается в том, чтобы "помочь детям моделировать и программировать реальный мир, чтобы лучше его понять". Оно может работать в Windows, Linux и Sugar. Physical Etoys позволяет различным электронным устройствам, таким как Lego NXT, платы Arduino, Sphero, Kinect, джойстики Wiimote и другим, взаимодействовать друг с другом благодаря системе скриптов на основе блоков. Hackety Hack – это бесплатная среда на основе Ruby, предназначенная для облегчения обучения программированию для начинающих, особенно подростков. Karel, Karel++ и Karel J. Robot – это языки, предназначенные для начинающих, используемые для управления простым роботом в городе, состоящем из прямоугольной сетки улиц. Karel является самостоятельным языком, Karel++ – это версия Karel, реализованная на C++, а Karel J. Robot – версия Karel, реализованная на Java. Kodu – это простой язык, полностью основанный на иконках. Он был разработан в Microsoft Research в рамках проекта по привлечению детей, особенно девочек, к технологиям. Программы состоят из страниц, которые разделены на правила, которые, в свою очередь, разделены на условия и действия. Условия оцениваются одновременно. Язык Kodu разработан специально для разработки игр и предоставляет специализированные примитивы, полученные из игровых сценариев. Программы выражаются в физических терминах, используя такие понятия, как зрение, слух и время для управления поведением персонажа. Инструмент Kodu доступен в трех формах: для ПК в виде бесплатной загрузки в бета-версии и академических версиях, а также в виде недорогой загрузки для Xbox 360 Live. Logo – это образовательный язык для детей, разработанный в 1967 году Дэниелом Г. Боброу, Уолли Фёрзигом, Сеймуром Папертом и Синтией Соломон. Сегодня язык известен в основном благодаря использованию "черепашьей графики", в которой команды для движения и рисования создают линейную графику либо на экране, либо с помощью небольшого робота, называемого "черепахой". Язык был первоначально разработан для обучения концепциям программирования, связанным с Lisp, и позже – для того, чтобы позволить, по словам Паперта, "синтоническое рассуждение тела", когда студенты могли понимать (и предсказывать и рассуждать о) движении черепахи, представляя, что они бы сделали, если бы сами были черепахой. Lego Mindstorms – это линейка наборов Lego, объединяющих программируемые кирпичики с электродвигателями, датчиками, деталями Lego и Lego Technic (такими как шестерни, оси и балки). Mindstorms возник из программируемых сенсорных блоков, используемых в образовательных игрушках. Первая розничная версия Lego Mindstorms была выпущена в 1998 году и продавалась как Robotics Invention System (RIS). Текущая версия была выпущена в 2006 году как Lego Mindstorms NXT. Для Mindstorms используется широкий спектр языков программирования, от Logo до BASIC и производных Java, Smalltalk и C. Подход Mindstorm к программированию теперь имеет специализированные физические площадки под названием Computer Clubhouses. Mama – это образовательный объектно-ориентированный язык, разработанный для того, чтобы помочь молодым студентам начать программировать, предоставляя все языковые элементы на родном языке студента. Язык Mama доступен на нескольких языках с поддержкой направлений письма LTR и RTL. Новая версия Mama была создана на основе среды разработки Alice от Carnegie Mellon, поддерживающая скриптование объектов 3D-сцены. Эта новая версия Mama была разработана для того, чтобы помочь молодым студентам начать программировать, создавая 3D-анимации и игры. Документ о принципах образовательного программирования объясняет соображения, лежащие в основе дизайна Mama. RoboMind – это простая образовательная среда программирования, позволяющая начинающим программировать робота. Она знакомит с популярными методами программирования, а также с некоторыми аспектами робототехники и искусственного интеллекта. Роботом можно программировать на арабском, китайском, голландском, немецком, английском и шведском языках. Scratch – это графический язык программирования на основе блоков для создания анимированных историй и игр. Snap! – это бесплатный графический язык программирования с открытым исходным кодом, реализованный на JavaScript и первоначально разработанный на основе Scratch от MIT. Snap! добавляет возможность создавать новые блоки и имеет функции первого класса, что позволяет использовать анонимные функции. Он активно поддерживается UC Berkeley. Исходный код полностью размещен на GitHub. Stagecast Creator – это система визуального программирования, основанная на программировании путем демонстрации. Пользователи демонстрируют системе, что нужно сделать, перемещая значки на экране, и она генерирует правила для объектов (персонажей). Пользователи могут создавать двухмерные симуляции, моделирующие концепцию, многоуровневые игры, интерактивные истории и т.д. Stencyl – это IDE для визуального программирования и разработки игр, которое использовалось как в образовательных, так и в коммерческих целях. Концепция использования блоков кода основана на визуальном языке Scratch от MIT (упомянутом выше). Он также позволяет использовать обычный набираемый код (отдельно или вперемешку) через свой собственный API и язык Haxe. ToonTalk – это язык и среда, которые выглядят как видеоигра. Вычислительные абстракции отображаются на конкретные аналоги, такие как роботы, дома, грузовики, птицы, гнезда и коробки. Он поддерживает большие целые числа и точные рациональные числа. Он основан на конкурентном ограничительном программировании.

Университет

Curry – это учебный язык, разработанный для объединения наиболее важных парадигм декларативного программирования, а именно функционального программирования (вложенные выражения, функции высшего порядка, ленивые вычисления) и логического программирования (логические переменные, частичные структуры данных, встроенный поиск). Он также интегрирует два наиболее важных операционных принципа, разработанных в области интегрированных функционально-логических языков: "резидуацию" и "сужение". Flowgorithm – это графический инструмент для разработки и выполнения программ посредством блок-схем. Этот подход разработан для акцентирования внимания на алгоритме, а не на синтаксисе конкретного языка. Блок-схема может быть преобразована в несколько основных языков программирования, таких как C#, Java, Visual Basic .NET и Python. M2001 – это модульный математический язык для разработки и представления математических алгоритмов, охватывающих как современную дискретную, так и классическую непрерывную математику. Он основан на семантической структуре, базирующейся на теории категорий, с синтаксисом, схожим с Pascal или Modula 2. Он предназначен исключительно для образовательных целей, поэтому эффективность и простота реализации менее важны в его разработке, чем общность и широта применения. Он был создан для формирования прочного формального алгоритмического фундамента для студентов первого курса математических специальностей. Oz – это язык, предназначенный для обучения теории вычислительных систем. Он поддерживает большинство основных парадигм в рамках одного языка, чтобы студенты могли изучать парадигмы, не осваивая множество синтаксисов. Oz содержит в простой и четко структурированной форме большинство концепций основных парадигм программирования, включая логическое, функциональное (как ленивое, так и нетерпеливое), императивное, объектно-ориентированное, ограничений, распределенное и параллельное программирование. Для него существует канонический учебник "Концепции, техники и модели компьютерного программирования" и свободно доступная стандартная реализация – система программирования Mozart.