Abstract and keywords
Abstract (English):
The problem of development of the training environment for initial training in programming is considered. The semantic editor distinctive feature of which is an opportunity to submit the same program in different programming languages is described. The editor operates with semantic model of the program in the form of a semantic tree. The offered approach allowed completely refuse a phase of parse of a code, and significantly reduced the lexical analysis. The system allows addition of new syntax and provides the creation of methodical materials directly in the editor.

Keywords:
training system, semantic editor, educational language, semantic model, syntax as interface, grammar of representation
Text
Введение Выбор первого языка программирования и соответствующей среды при начальном обучении программированию – важное решение, которое должен принять преподаватель. Как показал анализ, в России в настоящее время нет ни доминирующего языка, ни общепринятой среды программирования для начального обучения. Как правило, используется либо одна из разновидностей Basic [1], либо некоторый вариант Pascal (см., например, [2, 3]), либо некоторое подмножество стандартных С/С++ [4, 5]. Хотя С/С++ довольно популярен в университетской среде России, его использование для начального обучения вызывает большие сомнения [6]. В последнее время наметилась тенденция использовать для начального обучения программированию русскоязычный псевдокод. Этому способствует то, что в контрольно-измерительных материалах ЕГЭ по информатике в заданиях на программирование наряду с языками Паскаль, Си, Бейсик используется и псевдокод. Однако для продуктивного обучения псевдокод должен поддерживаться средой программирования. Одна из первых реализаций подобного подхода – среда КуМир [7, 8], в которой используется придуманный академиком А. П. Ершовым школьный алгоритмический язык – простой алголоподобный язык с русской лексикой и встроенными командами управления программными исполнителями (Робот, Чертёжник). Другой реализацией является школьная сборка, разработанная Ф. В. Ткачевым на основе среды BlackBox Component Builder [9]. В этой системе при написании кода программы в редакторе ключевые слова языка программирования Component Pascal разрешается вводить как в русской, так и в английской лексике. Практика использования этих систем показала, что при начальном обучении программированию русская лексика предпочтительнее английской. К. Поляков, обучавший школьников в среде КуМир, отмечает, что русские команды воспринимаются учениками намного легче английских [10]. Ф. В. Ткачев, обучавший школьников в среде BlackBox (школьная сборка), тоже говорит о том, что «для начинающих программистов все-таки важно видеть понятные слова на родном языке» [11]. Система BlackBox имеет, в отличие от среды КуМир, одно важное свойство – она позволяет переключить язык программированния в обе стороны: и в русскую лексику, и в английскую. Это, очевидно, облегчит обучаемому в дальнейшем переход к профессиональным средам с англоязычными языками программирования. Исследования мыслительной деятельности профессиональных программистов показали [12], что программист при решении программистских задач использует знания двух типов: - семантические знания, которые представляют собой обобщенные базовые понятия программирования и схемы алгоритмов и не связаны ни с конкретным языком программирования, ни с конкретным средством разработки; - синтаксические знания, которые представляют собой знания о конкретных языках программирования и средствах разработки. Семантические знания – это долговременные знания, которые приобретаются из опыта работы при решении множества практических задач, при написании программ на разных языках программирования с использованием разнообразных средств разработки. Синтаксические знания – более краткосрочные, они приобретаются в процессе изучения конкретного языка программирования и относительно легко забываются при смене средств программирования. Поэтому, как подчеркивает И. Р. Дединский [13], при начальном обучении важно учить именно программированию, а не языку – язык программирования является только инструментом реализации при решении задач. Таким образом, начинающему программисту было бы очень полезно один и тот же алгоритм реализовать на разных языках программирования – такой подход способствует усвоению базовых понятий, а не конкретного языка. Однако ни одна из сред, применяемых для обучения, не поддерживает несколько языков программирования. Даже среди профессиональных сред разработки таких найдутся единицы. Поэтому требуется создание обучающей интегрированной среды, позволяющей работать с несколькими языками программирования. Концепции разработки В [14] были сформулированы требования к учебному языку и обучающей системе по программированию. Разработанный в соответствии с требованиями учебный язык программирования Semantic Language и его интерпретатор описаны в [15]. Разработка программ на учебном языке должна осуществляться в интегрированной среде (Integrated Development Environment, IDE). Интегрированная среда объединяет в единую систему множество системных программ: редактор, компилятор (и (или) интерпретатор), компоновщик, отладчик, профайлер, мейкер и т. п. Очевидно, что учебная среда должна быть похожа на современную интегрированную среду для профессиональной разработки программ – это в перспективе облегчит обучаемому переход к профессиональной деятельности. Наиболее важной частью любой интегрированной среды является редактор кода, который и обеспечивает взаимодействие пользователя-программиста со средой. Современные промышленные среды [16, 17] обеспечивают некоторую поддержку языка разработки. Например, практически во всех современных средах осуществляется цветовая подсветка синтаксиса ключевых слов и объектов программы, предоставляется возможность сворачивать и разворачивать блоки кода: классы, модули, условные операторы и операторы цикла, определения подпрограмм, пространства имен и т. п. Во многих средах предоставляется набор так называемых сниппетов (snippets), обеспечивающих вставку конструкций языка по короткой комбинации клавиш или даже по одной горячей клавише. Часто обеспечивается интеллектуальная навигация по коду, например переход от вызова метода к его определению и обратно. Результаты этих операций отражаются в окне редактора. Подобные возможности позволяют значительно снизить количество ошибок при наборе кода и существенно повышают производительность программиста. Однако редактор кода представляет собой обычный текстовый редактор, в котором основные операции выполняются с символами, строками и блоками текста. Применение текстовых операций к коду программы приводит к регулярному нарушению синтаксиса языковых конструкций, что существенно повышает риск возникновения мелких синтаксических ошибок. Именно текстовое представление кода вынуждает включать в состав компилятора подсистему анализа, работа которой требует значительного времени – при обучении программированию эти затраты времени являются непроизводительными. Кроме того, сообщения о синтаксических ошибках часто бывают неинформативными и сбивают начинающего с толку, отвлекая от главной цели – решения задачи. Редактор интегрированной среды сохраняет код программы в текстовом виде. Текст программы можно открыть, просмотреть и изменить вне интегрированной среды. При профессиональной разработке это бывает полезно, но при обучении провоцирует обучаемых на нечестные способы выполнения заданий по программированию. Таким образом, желательно, чтобы в обучающей среде редактор кода не оперировал символами текста, а был ориентирован на язык программирования. В соответствии с этим подходом и с учетом свойств современных IDE нами был сформулирован ряд концепций реализации редактора кода обучающей среды: - редактор кода должен оперировать конструкциями языка программирования и объектами программы, а не символами текста; - изменение ключевых слов в коде должно быть невозможным; - ошибки должны определяться в момент набора программы; - редактор должен позволять набор кода программы как в русской, так и в английской лексике; - должна быть обеспечена возможность переключения лексики с русской в английскую и обратно, причем это переключение не должно приводить к повторному анализу кода программы; - редактор должен предоставлять возможность переключения синтаксиса языка программирования, причем это переключение не должно приводить к повторному анализу кода программы; - должен быть обеспечен механизм добавления нового синтаксиса; - редактор должен при необходимости обеспечивать традиционные операции редактирования текста; - должна поддерживаться работа и с одномодульными, и с многомодульными программами. В настоящее время все эти концепции реализованы в редакторе кода учебной интегрированной среды Semantic IDE [18]. Этот редактор мы называем семантическим. Семантическая модель программы Автор языка С++ Б. Страуструп отмечал [19], что главным препятствием на пути развития языка являются символьно-ориентированные инструменты (в частности, текстовый редактор кода). Более перспективный и интересный подход – отказаться от традиционного текстового представления и реализовать инструментарий на основе семантических понятий языка программирования. В этом случае синтаксис языка представляет собой интерфейс между исполнителем программ (интерпретатором, виртуальной машиной) и пользователем (программистом). И как всякий интерфейс, его можно заменять, не изменяя базовой семантики языка. Для реализации этой концепции была разработана семантическая модель программы на учебном языке. Семантическая модель программы состоит из семантических моделей операторов. Пусть m – семантическая модель оператора учебного языка, которая в общем виде представляет собой кортеж: m = <имя, параметры, правило>, где имя – это ключевое слово оператора. Состав параметров, которые и определяют семантику, зависит от конкретного оператора. Семантическое правило представляет собой логическое выражение, которое должно быть истинным (true). Например, для оператора присваивания требуется проверять совпадение типов левой и правой части. Для одного оператора может быть определено несколько семантических моделей, отличающихся параметрами. Учебный язык включает простые операторы и блочные операторы. В качестве примеров рассмотрим семантические модели некоторых простых операторов учебного языка. Для оператора объявления константы определена единственная модель: m_const = , name, , not (include(name, Names)) and equal(type(), type(name))> В этой модели определены следующие элементы: - constant – ключевое слово оператора; - type – тип константы; - – значение типа; семантическое понятие, определяющие простые типы учебного языка; - name – имя константы; - – инициализирующее выражение; - not (include(name, Names)) and equal(type(), type(name)) – семантическое правило. Это правило определяет: - not(include(name, Names)) – требование, чтобы имя не было определено ранее (не включено в множество Names определенных ранее имен; - equal(type(), type(name)) – необходимость проверки совпадения типов константы и инициализирующего выражения. Для оператора объявления переменной определены две модели: m_var = m_var = , name, , equal(type(), type(name))> Модель оператора ввода определена так: m_in = ) > В данной модели семантическое правило предписывает интерпретатору проверить, что тип переменной в операторе должен быть простым. Модель оператора вывода: m_out = , equal(kind(exp), left) > В данном случае семантическое правило говорит о том, что выражение в операторе вывода должно быть L-value (в смысле С++). Аналогичную проверку надо выполнять и для оператора присваивания: m_let = , , equal(kind(lexp), left) and equal(type(), type(rexp))> Семантическое правило говорит о том, что, кроме проверки L-value, необходимо проверять и совпадение типов левого и правого выражения оператора. Самым простым оператором является оператор импорта: m_imp = Семантическое правило определяет, что имя в операторе должно входить в множество имен модулей (стандартных и определенных программистом). Блочные отличаются тем, что включают тело – последовательность операторов учебного языка. Обозначим последовательность операторов учебного языка как P: P = m1 m2 …, mk, где k – произвольное целое положительное число. Последовательность операторов является обязательным параметром блочного оператора. Однако для разных блочных операторов на состав операторов в теле накладываются семантические ограничения. Например, оператор определения типа разрешается задавать только в теле модуля, как и операторы определения процедур и функций. В теле оператора определения типа разрешается задавать только операторы объявления полей и операторы определения методов. Поэтому в модели блочного оператора требуется для параметра P указывать ограничения. Определим множества S, элементами которых являются семантические модели операторов, которые разрешается задавать в теле того или иного блочного оператора. Sexe = { m_const, m_var, m_let, m_in, m_out, m_call } Sdcl = { m_const, m_var, m_type, m_proc, m_func } Simp = { m_imp } Множество Sexe включает операторы, которые могут задаваться в теле операторов определения процедур, функций, методов, в теле оператора цикла и условного оператора. С помощью множество Sdcl определяет состав операторов объявления, которые разрешается задавать в теле модуля. И множество Simp определяет возможности конструирования последовательности операторов импорта. Тогда модель оператора определения модуля определяется так: m_module = Эта модель определяет, что в теле оператора определения модуля должны задаваться три последовательности операторов: последовательность операторов импорта, последовательность операторов объявления и в секции инициализации – последовательность исполняемых операторов. Из моделей блочных операторов самой простой является модель оператора цикла: m_while = , P, equal(type(exp), boolean) and include(P, Sexe)> Похожую модель имеет условный оператор. Однако для условного оператора требуется определить еще модели вложенных ветвей else_if и else: m_elseif = , P, equal(type(exp), boolean) and include(P,Sexe)> m_else = Определим множество операторов, которые могут входить в тело условного: Sif = Sexe U { m_elseif, m_else } Тогда семантическая модель условного оператора определяется так: m_if = , P, equal(type(exp), boolean) and include(P,Sif) and last(P,m_else) > Семантическое правило, помимо всего прочего, устанавливает, что ветка else должна быть последней в теле. Таким образом, семантическая модель программы определяется семантической моделью оператора определения модуля, который включает последовательность операторов объявления и последовательность исполняемых операторов в секции инициализации. Тела блочных операторов, входящих в эти последовательности, содержат новые последовательности операторов. Редактор кода в соответствии с действиями программиста строит внутреннее представление семантической модели программы в виде дерева с узлами сложной структуры. Каждая вершина (узел) дерева представляет собой отдельный оператор программы, в котором сохраняется полная информация о семантике оператора (поэтому дерево называется семантическим). В каждом узле имеется ссылка на следующий узел-оператор. Таким образом, последовательность операторов программы представляет собой последовательный список узлов семантического дерева. В узлах, соответствующих блочным операторам учебного языка [15], имеется еще одна ссылка – на первый вложенный оператор тела. Блочными операторами являются операторы цикла, условные операторы, операторы определения подпрограмм, оператор определения модуля и оператор определения типа. Внутреннее представление программы в виде семантического дерева является входным для интерпретатора. Поскольку все ошибки выявляются при создании кода в редакторе, на вход интерпретатора поступает правильная программа. Интерпретатор не выполняет ни лексического, ни синтаксического анализа – это существенным образом упростило реализацию и повысило быстродействие. Единицей интерпретации является оператор – узел дерева. Схема работы интерпретатора представляет собой алгоритм обхода семантического дерева в глубину с запуском процедуры интерпретации для текущего узла (оператора). На языке Semantic Language с использованием условного оператора Дейкстры [20] схема представляет собой рекурсивный метод класса Интерпретатор: метод (Узел этот) Интерпретировать() если |этот.Дочерний # пусто(): вызвать этот.Дочерний.Интерпретировать(); |этот.Следующий # пусто(): вызвать этот.Следующий.Интерпретировать(); конец ветвления; вызвать память.СобратьМусор(); конец Интерпретировать; В реализации на языке C# применены паттерны Visitor и Observer [21]. Для каждого оператора реализована индивидуальная процедура интерпретации. Редактирование кода Семантический редактор оперирует не символами, а операторами учебного языка и объектами программы. Поэтому большинство элементов оператора сразу вставляются в код в правильном виде. Это гарантирует отсутствие ошибок набора ключевых слов. Редактор разрешает символьный ввод только в строго определенных позициях оператора. Например, в операторе объявления переменной разрешено вводить посимвольно только имя переменной. Аналогично в операторе импортирования модуля посимвольно вводится только имя модуля. Операторы учебного языка добавляются в код программы с помощью сниппетов и контекстного подсказчика. Каждый оператор учебного языка начинается ключевым словом, поэтому сниппет – это первые две-три буквы ключевого слова оператора. При наборе букв сниппета в кодовом окне редактора подсказчик выводит список операторов, и подсветка устанавливается на конкретном операторе. Контекстный подсказчик работает и при наборе составного имени при вводе селектора-точки. Если перед точкой было набрано имя модуля, то в списке выводится список всех открытых объектов этого модуля. Если перед точкой было набрано имя объекта определяемого типа, то подсказчик выводит имена всех открытых полей и методов, определенных в этом типе. Аналогично выполняется удаление – удаляется вся конструкция целиком. Если же оператор не удаляется, то разрешается замена элементов оператора. При замене тоже работает контекстный подсказчик. Например, в операторе объявления переменной можно заменить тип переменной, выбрав его из списка предложенных типов. Точно так же предлагается список видимых в данной точке имен, если программисту потребовалось заменить имя переменной. Редактор следит за действиями программиста и сообщает об ошибках в момент набора программы. Пока ввод оператора не завершен, в окне ошибок «вывешены» все сообщения об ошибках, которые возникают по мере ввода составных частей оператора. Например, при ошибке в написании имени переменной в операторе мгновенно появляется сообщение о том, что данная переменная не была определена. Отметим, что в кодовом окне редактора нумеруются операторы программы, а не строки текста. Заметим, что программа при вводе/удалении операторов всегда является синтаксически правильной – синтаксические ошибки отсутствуют. Даже при наборе арифметических или логических выражений всегда вставляется (и удаляется) синтаксически правильная часть выражения. Все возникающие ошибки являются исключительно лексическими (например, неверно набранная числовая константа) или семантическими (например, в операторе присваивания требуется недопустимое преобразование типа). Таким образом, при наборе кода существенно сокращается количество ошибок – это способствует концентрации внимания обучаемого на решаемой задаче, а не на синтаксисе языка программирования. Синтаксис языка программирования как интерфейс В интерфейсе среды Semantic IDE реализован переключатель лексики, с помощью которого устанавливается язык представления ключевых слов (русский или английский). На рис. 1 показано представление программы вычисления факториала на языке Semantic Language в английской и русской лексике. Ключевые слова выделены жирным шрифтом. module Факториал start variable integer i := 1; variable real current := 1; constant integer N = 15; while i < N do let current := current * i; let i := i + 1; output '\n'; output current; end of while; end Факториал. модуль Факториал начало переменная целое i := 1; переменная вещ current := 1; константа целое N = 15; пока i < N делать присвоить current := current * i; присвоить i := i + 1; вывести '\n'; вывести current; конец цикла; конец Факториал. Рис. 1. Представление программы на языке Semantic Language Основным языком лексем является русский. Для переключения на английский в системе реализованы словари, в которых каждой русской лексеме соответствует английский эквивалент. Отметим, что при переключении лексики отсутствуют непроизводительные затраты времени, поскольку не производится никакого анализа программы – просто меняется изображение ключевых слов на экране. Регулярная структура семантического дерева позволяет реализовать идею Б. Страуструпа о сменяемом синтаксисе языка программирования. Синтаксис каждого языка определяется в системе собственной грамматикой представления. В настоящий момент в среде Semantic IDE обеспечивается представление программы в 4 видах: на псевдокоде (учебный язык Semantic Language), С-подобный, Pascal-подобный и Basic-подобный. Эти четыре представления соответствуют языкам, используемым в тестах ЕГЭ по информатике. С-подобный синтаксис разработан на основе языка Java [22], а за образец Pascal-подобного принят синтаксис языка Component Pascal [3], реализованного в системе BlackBox Component Builder [9]. Basic-подобный синтаксис в основном соответствует синтаксису Microsoft Visual Basic [23]. Грамматика языка не используется для синтаксического анализа программы и нужна только для определения внешнего представления программы в окне редактора кода. Поэтому загрузка грамматики производится один раз во время запуска Semantic IDE. В грамматике каждой семантической единице языка соответствует правило представления, задаваемое в формате РБНФ. Например, оператор присваивания в грамматике представления Semantic Language задан таким правилом: := "присвоить" ":=" ";" Нетерминал в левой части правила – это семантическая единица языка (в данном случае – оператор), с которой осуществляются операции в редакторе, и результат этих операций отображается в кодовом окне. В правой части правила – синтаксис представления этого оператора в окне редактора. Последовательности символов, заключенные в кавычки, выводятся буквально в окно редактора – это ключевые слова языка, которые в коде подсвечиваются синим цветом. Нетерминалы, представленные в правой части правил, представляют собой параметры данной семантической единицы. В правилах для блочных операторов нетерминал говорит о следующим: данная семантическая единица имеет тело, что в узле дерева представляется ссылкой на дочерний узел. В данном случае узел имеет два параметра: слева параметр-выражение, представляющий объект, которому присваивается значение правого параметра-выражения. То же правило в грамматике Pascal-подобного представления выглядит так: := "%ПРИСВОИТЬ""% " ":=" ";" В грамматике Си-подобного представления это правило выглядит следующим образом: ::= "%присвоить""% " "=" ";" Знак процента «%» в начале слова означает, что это слово является исключением в данном синтаксисе. В данном случае это правило говорит о том, что в Си-подобных и Pascal-подобных языках в операторе присваивания отсутствует ключевое слово «присвоить» (английское слово «let»). В кодовом окне такие слова подсвечиваются зеленым цветом – чтобы обучаемый легко мог их отличить от ключевых слов и идентификаторов. Представление программы вычисления факториала в Pascal-подобном виде показано на рис. 2 (слова-исключения подчеркнуты). MODULE Факториал; BEGIN VAR i: INTEGER := 1; VAR current: REAL := 1; CONST N: INTEGER = 15; WHILE i < N DO LET current := current * i; LET i := i + 1; Log.Out('\n'); Log.Out(current); END END Факториал. Рис. 2. Представление программы на языке Semantic Language в Pascal-подобном виде Полная грамматика для Pascal-подобного представления в русской лексике выглядит так: ::= ::= "ПОКА" "ПОВТОРЯТЬ""КОНЕЦ" ::= "СДЕЛАТЬ" "РАЗ""КОНЕЦ"";" ::= "%МАССИВ" ":" "МАССИВ" "ТИПА" ";" ::= "%ПРИСВОИТЬ" ":=" ";" ::= "%ВЫЗВАТЬ" ";" ::= "КОНСТАНТА" ":" "=" ";" ::= "%ПОЛЕ" ": "";" ::= "Журнал.Ввести""("");" ::= ::= "Журнал.Вывести""("");" ::= "ВЕРНУТЬ" ";" ::= "ПЕРЕМЕННАЯ" ":" ";" ::= "ПЕРЕМЕННАЯ" ":" ":=" ";" ::= "НАЧАЛО" ::= "(*" "*)" ::= "ПОВТОРЯТЬ""ПОКА" ";" ::= "ИНАЧЕ" ::= "А ЕСЛИ" "ТОГДА" ::= "ЕСЛИ" "ТОГДА" "КОНЕЦ" ::= "МОДУЛЬ" ";""КОНЕЦ" ";" ::= "ЗАПИСЬ" "=" "ЗАПИСЬ""("")""КОНЕЦ" ";" ::= "ПРОЦЕДУРА" "(""):"";" "КОНЕЦ" ";" ::= "ПРОЦЕДУРА" "(" ");" "КОНЕЦ" ";" ::= "ПРОЦЕДУРА""("")""("")" ":" ";" "КОНЕЦ" ";" ::= "ПРОЦЕДУРА" "(" ")" "(" ");" "КОНЕЦ" ";" ::= ":" ::= ::= "МАССИВ" "ТИПА" ::= "ПРОЦЕДУРА" "("")" ::= "ПРОЦЕДУРА" "(" ") :" ::= "УКАЗАТЕЛЬ НА" ::= "ЦЕЛОЕ"|"ВЕЩЕСТВЕННОЕ"|"БУЛЕВСКОЕ"|"СИМВОЛ" ::= ":" ::= "ПОДКЛЮЧИТЬ" ";" Подчеркнем, что подобная грамматика используется редактором только для изображения программы на экране, а не для синтаксического анализа. В правой части некоторых правил встречаются нетерминалы, для которых правило в грамматике отсутствует. Например, для нетерминала может быть определено следующее правило: ::= | | | | | Однако в правой части этого правила нет ни одного изображаемого элемента. Подобные правила, в которых в правой части нет ни одного изображаемого элемента, бесполезны, поэтому эти правила из грамматики исключены. Таким образом, в среде Semantic IDE обучаемый имеет возможность создавать программы, используя русскоязычный псевдокод, а затем переключить лексику на английскую и синтаксис на один из доступных языков. Тем самым в процессе работы в среде обучаемый усваивает не конкретный язык программирования, а именно основные семантические понятия программирования. Оператор-комментарий Одним из операторов, размещаемых в коде, является оператор-комментарий, обозначаемый в окне редактора символом «решетка» (#). Оператор-комментарий может быть вставлен в код в любом месте, где допускается вставка оператора языка программирования, а также перед кодом и после него. Однако в семантическом редакторе оператор-комментарий трактуется более широко, чем обычные комментарии в программах: разрешается создавать произвольную последовательность операторов-комментариев вообще без программного кода. В пределах комментария разрешается посимвольный ввод любого текста и выполняются традиционные текстовые операции с символами и строками. Разрешены и обычные операции с буфером обмена – это позволяет вставлять фрагменты материалов из других программ (например, из MS Word). В операторе-комментарии можно создать таблицы, разрешается вставлять рисунки и видеоролики. Обеспечивается возможность связывания комментариев с помощью гиперссылок, в том числе и с другими файлами проекта. Таким образом, возможности представления информации практически не уступают возможностям подготовки документа в MS Word в rtf-формате. Все это позволяет преподавателю непосредственно в редакторе готовить обучающие материалы. Кроме того, теоретический материал можно проиллюстрировать кодом программы-примера, которую можно запустить на выполнение. Это позволяет демонстрировать образцы хорошего стиля программирования и способствует более быстрому и прочному усвоению изучаемой темы. Заключение Среда с описанным семантическим редактором апробировалась в учебном процессе первого семестра на кафедре «Автоматизированные системы обработки информации и управления» Астраханского государственного технического университета для выполнения лабораторных работ по дисциплине «Основы алгоритмизации». Среда использовалась и на факультативных занятиях по программированию в Астраханском колледже вычислительной техники. Небольшая пока статистика использования показывает существенное сокращение времени при создании кода программы и практически полное исчезновение ошибок набора. По отзывам преподавателей, представление программы в русской лексике облегчает усвоение базовых понятий студентам, не изучавшим основы программирования в школе, и способствует усвоению профессиональной терминологии. С другой стороны, возможность переключить программу в английскую лексику существенно облегчила студентам переход на профессиональные англоязычные языки программирования в следующем семестре. В настоящий момент развитие среды продолжается: разрабатывается семантическая модель объектно-ориентированной части учебного языка, реализуется механизм наследования языке Semantic Language, разрабатываются модули стандартной библиотеки, развивается система справочной информации. Архитектура системы спроектирована таким образом, что без особых проблем позволяет разработчику добавлять новый синтаксис языка программирования. Разработан и включен в среду сокращенный Python-подобный синтаксис представления программы. В дальнейшем, после проведения ряда экспериментов, будет определен фиксированный формат грамматики представления и реализована подсистема, которая позволит писать грамматику представления непосредственно в редакторе Semantic IDE. Это обеспечит преподавателю возможность добавлять в систему новые языки программирования, не прибегая к помощи разработчиков. Регулярная структура семантического дерева позволяет реализовать конвертеры в промышленные языки программирования: C#, Java, C++ – это откроет возможность профессионального программирования в рамках обучающей среды. Работа поддержана грантами «У.М.Н.И.К.» в 2011 и 2012 гг. и грантом «Старт» в 2013 г. Работающую версию среды можно загрузить с сайта sem_tech.net.
References

1. Vedyaeva E. S. Vozmozhnosti yazykov programmirovaniya Visual Basic pri obuchenii algoritmizacii i programmirovaniyu / E. S. Vedyaeva, S. Yu. Vedyaeva / Informacionnye tehnologii v obrazovanii. XVIII Mezhdunar. konf.-vystavka: sb. tr. konf. Ch. VI. – M.: MIFI, 2008. – S. 19–20.

2. Bel'chusov A. A. Povyshenie effektivnosti obucheniya programmirovaniyu v shkole i vuze / A. A. Bel'chusov, A. V. Stepanov // Materialy V Vseros. nauch.-prakt. konf. «Problemy informatizacii obrazovaniya: regional'nyy aspekt», Cheboksary, 25–27 aprelya 2007 g. – Cheboksary, 2007. – S. 27–33.

3. Potopahin V. V. Sovremennoe programmirovanie s nulya! / V. V. Potopahin. – M.: DMK Press, 2010. – 242 s.

4. Onischenko V. A. Problemy kontrolya znaniy v komp'yuternom uchebnike po yazykam programmirovaniya / V. A. Onischenko // Materialy V Vseros. nauch.-prakt. konf. «Problemy informatizacii obrazovaniya: regional'nyy aspekt», Cheboksary, 25–27 aprelya 2007 g. – Cheboksary, 2007. – S. 241–245.

5. Hohlov D. G. Elektronnoe obuchenie osnovam programmirovaniya: problematika i podhody / D. G. Hohlov // Obrazovatel'nye tehnologii i obschestvo (Educational Technology & Society). – 2012. – T. 15, № 1. – S. 567–593.

6. Stolyarov A. V. Yazyk S i nachal'noe obuchenie programmirovaniyu / A. V. Stolyarov: http://www.stolyarov.info/pvt/anti_c.

7. Kushnirenko A. G. Programmirovanie dlya matematikov / A. G. Kushnirenko, G. V. Lebedev: ucheb. posobie dlya vuzov. – M.: Nauka, 1988. – 384 s.

8. Kushnirenko A. G., Lebedev V. G. 12 lekciy o tom, dlya chego nuzhen shkol'nyy kurs informatiki i kak ego prepodavat' / A. G. Kushnirenko, V. G. Lebedev: metod. posobie. – M.: Laboratoriya Bazovyh Znaniy, 2000. – 464 s.

9. Informatika-21. Programmnoe obespechenie: http://www.inr.ac.ru/~info21/software.htm.

10. Polyakov K. KuMir i shkol'naya informatika / K. Polyakov: http://kpolyakov.blogspot.ru/2011/04/blog-post_5678.html.

11. Kurkina L. G. Rusificirovannye mini-ispolniteli vo vvodnyh kursah programmirovaniya / L. G. Kurkina, F. V. Tkachev, I. A. Cvelaya: http://www.inr.ac.ru/~info21/texts/bytic-xx-2009.htm.

12. Shneyderman B. Psihologiya programmirovaniya. Chelovecheskiy faktor v vychislitel'nyh i informacionnyh sistemah / B. Shneyderman. – M.: Radio i svyaz', 1984. – 304 s.

13. Dedinskiy I. R. Analiticheskiy podhod k dovuzovskomu prepodavaniyu programmirovaniya / I. R. Dedinskiy: http://storage.ded32.net.ru/Lib/Doc/AnalyticApproach2010.pdf.

14. Laptev V. V. Trebovaniya k sovremennoy obuchayuschey srede po programmirovaniyu / V. V. Laptev // Ob'ektnye sistemy-2010 (Zimnyaya sessiya): materialy II Mezhdunar. nauch.-prakt. konf., Rostov-na-Donu, 10–12 noyabrya 2010 g. – Rostov n/D, 2010. – C. 104–110.

15. Grachev A. D. Razrabotka uchebnogo yazyka programmirovaniya i interpretatora dlya obuchayuschey sredy / A. D. Grachev, V. V. Laptev // Ob'ektnye sistemy-2012: materialy VI Mezhdunar. nauch.-prakt. konf., Rostov-na-Donu, 10–12 maya 2012 g. – Rostov n/D: ShI YuRGTU (NPI), 2012. – C. 92–101.

16. Davydov S. V. IntelliJ IDEA. Professional'noe programmirovanie na Java / S. V. Davydov, A. A. Efimov. – SPb.: BHV-Peterburg, 2005. – 800 s.

17. Pauers L. Microsoft Visual Studio 2008 / L. Pauers, M. Snell. – SPb.: BHV-Peterburg, 2009. – 1200 s.

18. Grachev D. A., Laptev V. V. Semanticheskiy redaktor avtomatizirovannoy obuchayuschey sistemy po programmirovaniyu // Svidetel'stvo ob ofic. registracii programm dlya EVM № 2011619172, Rossiya – zaregistrirovano 25.11.2011.

19. Straustrup B. Dizayn i evolyuciya S++ / B. Straustrup. – M.: DMK Press; SPb.: Piter, 2006. – 448 s.

20. Deykstra E. Disciplina programmirovaniya / E. Deykstra. – M.: Mir, 1978. – 275 s.

21. Gamma E. Priemy ob'ektno-orientirovannogo proektirovaniya. Patterny proektirovaniya / E. Gamma, R. Helm, R. Dzhonson, Dzh. Vlissides. – SPb.: Piter, 2001. – 368 s.

22. Horstman K. S. Java 2. Biblioteka professionala. T. 1. Osnovy / K. S. Horstman, G. Kornell. – M.: OOO «Izd. dom «Vil'yams», 2011. – 816 s.

23. Ol'sen E. Visual Basic.NET. Razrabotka klassov: Spravochnik / E. Ol'sen, D. Ellison, Dzh. Spir. – M.: SP EKOM, 2003. – 416 s.