Я разработал русский язык программирования для детей
C Nobilis русскоязычный язык программирования для детей

ГЛАВА 1. Введение:
Современные языки программирования слишком сложные для детей, которые только начинают пробовать себя в начальной разработке. Многие начинают с визуального программирования, например Scratch, а после переходят на Python. Детям обязательно нужно знать английский язык, чтобы понимать его логику, и они обязаны соблюдать табуляцию, в противном случае Python выдаст ошибку, и это лишь меньшая часть проблем в изучении этого языка. Но мы можем взять в пример другой язык, допустим Кумир, его синтаксис на русском языке, но, к сожалению, понять его будет даже сложнее, чем Python, несмотря на то что он на русском языке. Я провел анализ и не нашел реально хороших альтернатив.
ГЛАВА 2. Концепция:
Мой проект — это язык программирования, в котором будет простой русский синтаксис, чтобы подрастающее поколение тратило свое время на логику, а не расшифровку сомнительного синтаксиса. Я назвал свой язык CN = C Nobilis. Что с латыни переводится как благородный C. (Данный язык программирования я сделал на базе C#).
Основная аудитория моего языка программирования это дети, новички, может быть взрослые не программисты. Основная философия моего языка программирования это минимум символов и максимум логики. В моем языке не нужно объявлять переменные, ты просто пишешь название = значение; основная идея создать максимально простое традиционное программирование.
ГЛАВА 3. Возможности:
В C Nobilis на данный момент работает ввод/вывод. Работает приоритет на * / %. В нем переменные без типов данных, пример: счётчик = 10; x = 5; Пример кода на C Nobilis с условиями:
// Пример программы на C Nobilis
ввод x;
если x > 10 {
вывод "x больше 10";
}
если x <= 10 {
вывод "x не больше 10";
}
Пример с циклом:
i = 1;
пока i < 6 {
вывод i;
i = i + 1;
}
пример кода с сравнением:
ввод x;
ввод y;
если x > y {
вывод "x больше y";
}
если x < y {
вывод "x меньше y";
}
если x == y {
вывод "x равно y";
}
Вложенные циклы:
i = 1;
пока i < 3 {
j = 1;
пока j < 3 {
вывод i * j;
j = j + 1;
}
i = i + 1;
}
Еще в C Nobilis можно менять порядок вычислений с помощью ( ), а для комментариев надо перед текстом написать // ваш текст.
Итоговый код со всеми возможностями данного языка программирования на этот момент:
// Русские имена переменных
счётчик = 1;
сумма = 0;
// Несколько команд в одной строке
i = 1; пока i < 3 { вывод i; i = i + 1; }
// Вывод строк
вывод "Привет, мир!";
// Приоритет операций
x = 2 + 3 * 4; // 14
// Скобки меняют порядок
x = (2 + 3) * 4; // 20
// Комментарии
// это комментарий
x = 5; // тоже комментарий
ГЛАВА 4. Архитектура:
Общая архитектура:
Программа читает файл с исходным кодом на русском языке (program.cn), построчно анализирует его и выполняет команды. Это пример создания доменно ориентированного языка (DSL) для обучения программированию.
Если пользователь введет букву вместо числа, переменной присвоится 0, а не вылетит исключение. Это сделано специально, чтобы программа не падала и ребенок мог видеть результат, даже если ошибся.
Подключение пространств имен и глобальные переменные:


Программа использует стандартные пространства имен .NET для работы с вводом выводом и коллекциями. Главное хранилище данных словарь vars, который хранит переменные и их числовые значения. Все переменные в этом языке могут содержать только целые числа.
Точка входа и основной цикл обработки:

Метод Main начинает с чтения всего файла "program.cn" в массив строк. Кодировка UTF-8 выбрана для поддержки кириллицы. Переменная i это указатель на текущую обрабатываемую строку.
Пропуск пустых строк и комментариев:

В начале цикла каждая строка очищается от пробелов. Если строка пустая или начинается с комментария //, она пропускается, и указатель переходит к следующей строке.
Обработка команд:
Команда вывода (вывод):

Команда вывод может работать с двумя типами аргументов:
Строковые литералы в кавычках (например, вывод "Привет";) выводятся как есть.
Выражения и переменные (например, вывод a + 5;) вычисляются через метод Calc.
Команда ввода (ввод):

Команда ввод считывает значение с клавиатуры и сохраняет его в переменную. Если введенное значение не является числом, переменной присваивается 0.
Обработка условных конструкций и циклов:
Поиск конца блока:

Этот метод находит конец блока кода, ограниченного фигурными скобками. Он учитывает вложенность блоков, подсчитывая глубину скобок.
Цикл пока:

Цикл пока (аналог while) сначала выделяет условие из строки, находит конец блока, затем многократно выполняет блок кода, пока условие истинно.
Условный оператор если:

Конструкция если (аналог if) проверяет условие и выполняет блок кода только один раз, если условие истинно.
Выполнение блоков кода:

Метод ExecuteBlock выполняет все команды внутри блока кода. Он поддерживает те же команды, что и основной цикл: вывод, ввод и присваивание.
Математические вычисления:

Метод Calc подготавливает выражение к вычислению, удаляя пробелы. Метод Eval реализует рекурсивный парсер выражений:
Если выражение имя переменной, возвращает её значение.
Если выражение число, возвращает число.
Рекурсивный разбор операций:

Парсер ищет операторы справа налево (начиная с последнего вхождения), что дает правильный порядок операций. Приоритет операций:
Сначала обрабатываются сложение и вычитание (они ищутся первыми).
Затем умножение и деление.
Проверка деления на ноль:

При делении выполняется проверка делителя на ноль в случае деления на ноль возвращается 0 вместо генерации исключения.
Вычисление условий:

Метод CalcCond вычисляет логические условия. Он поддерживает все основные операторы сравнения
ГЛАВА 5. Сравнение:
Я сравнил свой C Nobilis с другими языками программирования:
Python

Кумир

C Nobilis

В Кумире нужно писать нц пока i <= 5, а в C Nobilis пока i < 6 на 3 символа меньше и без лишних служебных слов, А в Scratch ребенку нужно таскать блоки мышкой, что медленно. В C Nobilis он просто печатает текст, как взрослый, но русскими словами.
ГЛАВА 6. Планы развития:
В моих планах добавить графику. Сделать веб версию, чтоб писать прямо в браузере. Добавить "иначе" к условиям. Сделать понятные ошибки, которые объясняют твою ошибку, пока что на данный момент при ошибке выводится 0. Еще в планах создать свое расширение на Visual Studio Code, через которое можно будет добавить мой язык программирования. А после полной технической доработки в моих планах будет продвигать свой язык программирования C Nobilis в соцсетях.
Но теория без практики мертва. Еще до публикации статьи я провел тестирование C Nobilis на своей целевой аудитории. Я дал попробовать язык младшему брату (11 лет) и двум друзьям, которые никогда не программировали. Результат превзошел ожидания: через 15 минут первый написал программу с циклом и условиями, а через час они уже делали вложенные циклы и считали таблицу умножения. Для сравнения: с Python на освоение ввода вывода и объяснение ошибок с отступами у них ушло бы минимум несколько дней. Это доказывает, что русский синтаксис и отсутствие типов данных реально снижают порог входа.
ГЛАВА 7. Заключение:
К сожалению, в наше время довольно мало реально простых языков программирования. Я считаю, что детям нужно упростить этот порог входа, не скатываясь в визуальное программирование. Мой язык программирования решает данную проблему, и я надеюсь, что мой язык поможет кому-то полюбить программирование и сделать первые шаги в IT. А значит, мой труд был не зря.
Ссылка на проект - https://github.com/aidamir-akhmedov/C-nobilis.git
