Образовательное значение классификации компьютерных языков

№ 6(24) 2009

Т. А. Андреева, И. С. Ануреев, Е. В. Бодин, Л. В. Городняя, А. Г. Марчук, Ф. А. Мурзин, Н. В. Шилов

Образовательное значение классификации компьютерных языков1

Вопросы классификации компьютерных языков рассмотрены как ключевые для решения образовательных проблем профессионального корпуса информатиков. Описан опыт классификации компьютерных языков, парадигм программирования и олимпи-адных задач по программированию. Проанализированы перспективы онтологического и семантического подходов к описанию парадигм компьютерных языков.

Образовательные проблемы информатики, как новой, стремительно развивающейся дисциплины, — дело естественное. Не удивительно, что в результате многолетних трудов по упорядочению учебных программ по информатике, программированию и информационным технологиям (Computer Science and Software Engineering), проводимых авторитетными международными организациями (ACM, IEEE), получены лишь общие рекомендации, весьма обширные, по существу представляющие собой инвентаризацию опыта ряда ведущих университетов, обладающих значительным научным и производственным потенциалом [14].

Следование таким рекомендациям чревато значительным увеличением времени обучения и сопряжено с разработкой обширного свода новых учебно-методических пособий, что потребует заметных трудозатрат [6]. Альтернативой может быть систематическое выделение общих понятий, допускающих конкретизацию в большинстве основных направлений информатики, выбор которых может быть сделан на основе классификации компьютерных языков.

В то же время остается проблема унификации большого числа независимо сложившихся терминологических систем информатики. Связанная с ней задача оптимизации содержания обучения не может быть решена методом простого изложения истории предмета,

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

Решение данной задачи требует глубокого анализа исторически сложившихся систем понятий и, на базе его результатов, выбора оптимальных путей изучения концептуальных моделей и специфических особенностей информационных систем и процессов.

К настоящему времени многие области информатики и информационных технологий достигли определенного уровня зрелости, что отражается в форме компьютерных языков (КЯ). Это создает предпосылки для объективной унификации общих понятий и создания учебно-методической литературы нового поколения, обеспечивающей приемлемый темп учебного процесса и его результативность. Однако отсутствие конструктивного подхода к классификации КЯ в целом препятствует достижению этих целей.

Если провести аналогию с другими науками, то в конце 60-х — начале 70-х годов XX в. классификацию КЯ можно было пытаться проводить «по Линнею» — в виде дерева «класс — подкласс — отряд — и т.д.» (до вида) или «по Менделееву» — в виде «периодической таблицы»: строчки — классификация по назначению (языки последовательного программирования, языки параллельного программирова-

1 Работа поддержана грантом РФФИ 08-01-00 899-а. 18 ^

№ 6(24) 2009

ния, языки спецификаций, языки моделирования и т.д.), а столбцы — классификация по подходам (императивный, функциональный, продукционный и т.д.). Однако 1990-е годы и начало нового тысячелетия стали временем бурного роста уже существовавших и новых ветвей КЯ. Например, сформировались языки для представления и обработки знаний, спецификации распределенных и мультиагент-ных систем. Каждый из вновь появляющихся КЯ имеет в своей основе определенную (зачастую неформализованную) модель вычислений (семантику), свой (иногда очень специфический) синтаксис и свою прагматику (т. е. сферу применения и распространения). Предметная область стала в корне отличаться от имеющейся в естественных науках. В физике, химии, биологии ситуация достаточно статична (включая мир вирусов и микроорганизмов), а в информатике — высока динамика появления и умирания компьютерных языков. Уже поэтому естественнонаучные аналогии («по Линнею» или «по Менделееву») не подходят для их классификации.

Актуальность задачи

Под компьютерным языком мы понимаем любой искусственный язык, разработанный или используемый для машинного описания и представления, автоматической обработки и управления данными и процессами. За полувековую историю развития компьютерных наук, программирования и информационных технологий созданы тысячи таких языков: языки программирования (ЯП), языки спецификаций, языки моделирования, языки запросов к базам данных, языки представления знаний и т.д. Многообразие КЯ является распределенным хранилищем научного знания о парадигмах2, опыте и истории применения информационных технологий (ИТ). Широ-

ко известен плакат History of Programming Languages, подготовленный издательством O'REILLY. Полная версия плаката имеет длину около 6 м и содержит сведения о хронологии и влиянии друг на друга 2500 языков программирования. Уменьшенная и свободно распространяемая версия отражает хронологию и взаимное влияние друг на друга наиболее значимых ЯП. Хронология на этом плакате представлена осью времени (в верхней части плаката), влияние языков друг на друга — цветными линиями (см. http:/www.oreilly.com/ news/graphics/prog_lang_poster.pdf).

Заметим, однако, что этот плакат можно принять за основу «путеводителя» в мире языков программирования, их систематики и классификации лишь на начальном этапе становления программирования и информационно-вычислительных технологий (первые 10-15 лет, начиная с 1950 г.).

В это время компьютерных языков было немного, и почти все они были языками императивного программирования фон-неймановских вычислительных устройств (за может быть единственным исключением — LISP [25]). Поэтому за основу классификации в этот период можно было принять хронологию появления и взаимного влияния языков, снабженную авторскими аннотациями3.

На наш взгляд, уже с конца 1960-х годов подход к систематизации и классификации КЯ в стиле плаката O'REILLY становится неприемлемым, так как в это время компьютерные языки стали включать, наряду с языками последовательного программирования, языки параллельного программирования, языки спецификаций и языки моделирования. В каждой из этих ветвей КЯ можно было выделить, наряду с императивным подходом, еще и декларативный (прежде всего продукционный, алгебраический и функциональный); в середине 1970-х — начале 1980-х годов родилось

л

S

т

£

I

о

S

о Ю

Б

%

2 Согласно Т. Куну [7], парадигма — это метод, подход к формулировке проблем и путей их решения. Само слово «парадигма» греческого происхождения и означает «пример», «образец», а в общефилософском смысле обозначает категорию, состоящую из сущностей с общими характеристиками.

3 То есть списком авторов, целей языка в понимании авторов, предыстории, описаниями обстоятельств, сопутствующих появлению языка, и т. д. в стиле «Истории» Геродота. В качестве примера такой авторской аннотации можно привести статью Д. Ричи, автора языка С [27].

19

№ 6(24) 2009

е.

is

о %

5V

s

a с

1

a a

sr

s

I

S

QJ

a

I

a а

несколько новых подходов (в том числе логический и объектно-ориентированный).

По-видимому, в этот второй период протяженностью 15-20 лет (начиная со второй половины 60-х годов XX в.) классификацию КЯ можно было пытаться проводить «по Линнею». Пример классификации КЯ (близкий к классификации животных) — это таксономия языков программирования, разработанная в проекте HOPL (History of Programming Languages). В этой таксономии (как и в линнеев-ской) существует семь уровней иерархии: царства (regnum), типы (phylum), классы (classes), отряды (orders), семейства (families), роды (genus) и виды (species). Эту таксономию можно найти по адресу http:/hopl.murdoch.edu.au/ taxandgenie.html. В целом проект HOPL содержит сведения примерно о 8500 языках программирования, но, к сожалению, выделение и названия многих таксонов и корректность классификации вызывает сомнение. Например, царство эндогенных (endogenous) языков — тип алгоритмических (algorithmic) языков — класс императивных (imperative) языков — отряд исторических алгоритмических систем (historic algorithmic systems) — семейство российских алгоритмических систем (Russian algorithmic systems) — род московских (Moscow) языков— вид языка: Moscow ML. В этом примере вызывает удивление, что Moscow ML попал в императивный класс, в «исторический» отряд, в «географические российско-московские» класс и род, в то время как он является сравнительно новой (2000 г.) российской реализацией американского диалекта Standard ML функционального языка программирования ML, разработанного в Эдинбурге.

Однако второй период истории КЯ завершился, по нашему мнению, в конце 1980-х годов. Последнее десятилетие XX в. и начало нового тысячелетия стали временем бурного роста уже сложившихся и новых ветвей компьютерных языков. Например, сформирова-

лись такие ветви, как языки для представления и обработки знаний, спецификации распределенных и мультиагентных систем и т.д. Усложнение предметной области, высокая динамика ее изменения привели к тому, что естественнонаучные аналогии («по Линнею» или «по Менделееву») стали несостоятельными.

Возникает вопрос: что можно принять за основу такой современной систематики и классификации КЯ, которая смогла бы сохранить актуальность и жизнеспособность хотя бы на период жизни одного человеческого поколения?

Заметим, что в момент своего создания КЯ отражает представление («знания») авторов о методах постановки и решения определенных задач ИТ и информационных систем (ИС). В дальнейшем практика применения КЯ конкретизирует такое знание, уточняет его в виде текстов КЯ, допускающих анализ по разным критериям, включая правильность, эффективность, надежность, удобство, производительность, стиль и т.д., что приводит к развитию парадигм КЯ. Освоение представленного в такой форме знания опирается на систему исторически сложившейся терминологии и требует классификационной поддержки и средств навигации в мире КЯ.

Необходимость классификации и средств навигации диктуется как соображениями истории науки, технологии и техники, так и более важными причинами. Это, прежде всего, содействие в выборе КЯ из существующих для новых проектов в области ИС и ИТ; разработка новых КЯ, отвечающих новым потребностям и парадигмам; и, наконец, образование специалистов в области ИС и ИТ.

Отметим, что, говоря про образование, мы имеем в виду не только приобретение навыков, знаний и квалификации, но и формирование4 ума, менталитета будущих специалистов в области ИС и ИТ. Образовательное значение классификации КЯ и связанных с ними

о а а 5

а

«о о

S3 о

4 Русское слово «образование» многозначно: это не только приобретение навыков, знаний и квалификации, но и «формирование». Такие же значения имеет немецкое слово bildung. Для иллюстрации здесь уместно привести русский перевод с немецкого известной фразы Карла Вейерштрасса: «Цель среднего образования — образование ума, а не приобретение точных знаний». А вот английское education и французское education имеют значение «образование» и «воспитание», т. е. передают другой оттенок.

20

№ 6(24) 2009

парадигм чрезвычайно велико, особенно для России, так как подавляющее большинство специалистов по программированию, ИТ и ИС обычно имеют представление только о нескольких императивных языках программирования, т. е. не более чем о 0,5 % языков, представленных на диаграмме O'REILLY. К сожалению, существующая система среднеспециально-го и высшего образования ориентирована на закрепление этой ситуации. Наличие доступной классификации КЯ с простыми средствами навигации могло бы преодолеть существующую однобокость хотя бы в рамках факультативного образования. Однако в настоящий момент не существует сколько-нибудь общепринятого конструктивного подхода классификации КЯ и соответствующих парадигм [5,9,12].

Семантические иерархии

Роль семантики для классификации и пара-дигмизации5 языков программирования хорошо известна. Не меньшую роль семантика играет для адекватной парадигмизации и классификации КЯ. Однако даже при первом взгляде на состояние дел с семантикой даже для языков программирования бросается в глаза разнообразие уровней формализации и разнообразие формализмов.

Например:

• в основание языка функционального программирования LISP было заложено Х-ис-числение, которое является основой его операционной и денотационной семантики [25];

• для представительного подмножества императивного языка программирования высокого уровня Pascal (без указателей и параметров-переменных) были построены семантики двух видов — операционная и аксиоматическая [24];

• формализация семантики для представительного подмножества императивного языка С остается открытой проблемой [23,26,10,11,21].

Это разнообразие делает сравнение се-мантик разных КЯ чрезвычайно сложным делом. Для начала мы предлагаем ввести две уни-

фицированные семантические иерархии для наиболее типичных языков: двух-трехуровне-вой «дружественной» иерархии и одно-трехслойной «формализованной» иерархии.

Дружественная семантическая иерархия отражает степень знания языка (владения языком).

Она включает следующие уровни: элементарный (elementary), основной (basic) и полный (full). Элементарный уровень является отправной точкой при формализации и экспериментальном исследовании парадигм КЯ. Выделение такого уровня обычно подчинено задаче грамотного определения концептуального минимума КЯ для оптимального маршрута обучения.

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

Формализованная семантическая иерархия может включать вплоть до трех слоев для основного и, возможно, для элементарного и/или полного уровня. Условно эти слои можно назвать: ядерный (kernel), промежуточный (intermediate) и верхний (complete). Нижний слой (или ядро языка) должен иметь формализованную операционную семантику типа виртуальной машины и обеспечивать инструменты для реализации средств промежуточного слоя, а промежуточный слой — инструменты для реализации средств верхнего слоя.

Для спецификации виртуальных машин, задающих операционную семантику ядерных слоев и трансформационную семантику промежуточных и верхних слоев, предполагается использовать язык онтологических систем переходов Ontology Transition System Language (OTSL) [2]. Это императивный язык описания эволюционирующих (изменяющихся со временем) онтологий, типами данных которого являются элементы онтологии — понятия и отношения (последние определяются неявно как многоместные понятия). Использование этого языка позволит описывать семантику КЯ в единой концептуальной базе, обеспечивая понятийную классификацию КЯ в аспекте формальной семантики.

л

S

т

It

£

I

о

S

о Ю

Б

%

Под парадигмизацией мы понимаем процесс образования и выделения парадигм.

21

5

№ 6(24) 2009

«о §

в;

о %

&

5 а с

I

а а

гг

8

а

8 ш а

I

а а

о а а 5

а

«о о

3 о

Формализация реализационных механизмов позволяет пополнить систему изучаемых понятий, добиться ясности в описании особенностей функционирования ИС и дать руководство в выборе практичных решений по выбору и применению КЯ.

Работа по классификации КЯ сопряжена с рядом проблем рубрикации, связанных с нечеткостью фразеологии описаний языков, с общими проблемами создания онтологий и проверки достоверности собранных в них сведений, а также со спецификой организации учебной практики по применению ИС, совершенно необходимой для профилактики слишком узкого понимания изучаемых явлений и потенциала имеющихся средств.

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

Опыт классификации парадигм программирования

Первым, кто ввел в употребление понятие «парадигма» по отношению к КЯ, был Роберт Флойд на лекции в 1978 г. по случаю присуждения ему премии им. Тьюринга [16]. В цитируемой лекции это понятие используется только применительно к языкам программирования. По-видимому, ранее оно употреблялось в компьютерных науках лишь эпизодически. По крайней мере, в своей лекции сам Р. Флойд ссылается только на известную книгу Т. Куна [7] по философии науки вообще.

Парадигмы программирования различаются нишей в жизненном цикле программ (ЖЦП), приоритетами при оценке качества программ, выбором инструментов и методов обработки данных. Значимость используемых при этом критериев по существу зависит от условий применения программируемых решений. Упорядо-

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

Существуют проблемы информатики, решение которых требует более мощного абстрагирования, чем это принято при программировании на базе языков высокого уровня (ЯВУ). Разработка программ на базе языков сверхвысокого уровня (ЯСВУ) нацелена на длительный срок жизни запрограммированных решений особо важных и сложных задач [8, 4]. Удлинение жизненного цикла достигается представлением обобщенных решений с определенной степенью свободы по отношению к полным пространствам допустимых смежных компонент, реализованных ранее или планируемых на будущее. Практичность ЯСВУ связана с проблемами постановки сложных задач, требующих спецификаций или подчиненных требованиям надежности, безопасности, устойчивости, переносимости, масштабируемости и т. п.

Обычно выделяют три уровня парадигм, отражающие расширение языковой поддержки жизненного цикла программ и рост реализационной сложности определения языков программирования:

• кодирование на языках низкого уровня (ЯНУ);

• программирование на ЯВУ;

• разработка на базе языков ЯСВУ.

При всей ценности владения языками низкого уровня, их образовательное значение оценивалось методистами как непринципиальное, поддерживающее слишком узкую часть ЖЦП. Важнее было освоить базовые понятия на уровне схем и естественного языка документации, используемых при фиксации разрабатываемых решений. Тем не менее, исследование семантики ЯНУ полезно как основа анализа и систематизации реализационной семантики КЯ. Практичность ЯНУ связана с проблемами эффективного кодирования и реализации высокопроизводительных процессов.

Следует отметить, что жизнеспособность массовых методик зависит от понятности ис-

22

№ 6(24) 2009

пользуемых средств, что объясняет успех алгоритмического подхода к обучению программированию и разработку специальных учебных систем программирования, обладающих прозрачной реализацией. Алгоритмическая составляющая ЯВУ оказалась принципиально важной для постановки программистского образования. Накоплены и частично унаследованы представительные коллекции учебного материала — задачи от математики, классические методы их решения, учебники, методические пособия. Появляются учебные языки программирования, предназначенные для студенческой практики по программированию, рассматриваемой как упрощенный вариант производственного процесса. Разработаны методики обучения, формирующие умение программировать как проекцию алгоритмического мышления. Создана мировая система поощрительных мероприятий (олимпиады и конференции) для поиска и продвижения талантов в области программирования. Важным фактором успеха такой системы является автоматизация труда и дистанционного общения (оповещение, сетевые сервисы,тестирование программ и т.д.). Основные парадигмы ЯВУ, такие как стандартное (императивно-процедурное) (СП), функциональное (ФП), логическое (ЛП) и объектно-ориентированное (ООП), успешно поддерживают наиболее трудоемкие фазы программистских работ и рассматриваются как основные.

Далее языковое покрытие ЖЦП становится практически полным благодаря дополнению КЯ, возникающими в связи с информационными технологиями, телекоммуникациями, распределенными информационными системами, электронным общением, автоматизацией и самоорганизацией управления проектами, а также специализированными языками для решения конкретных классов задач. Новые возможности компьютерных сетей, суперкомпьютеров, общедоступных баз данных, массовое распространение мобильных устройств — все это меняет сферу применения информационных технологий и влечет кристаллизацию новых и более общих парадигм языков программирования.

Можно сделать вывод, что КЯ замыкают языковое покрытие полного жизненного цик-

ла информационных систем. Поддержанные в КЯ понятия отражают зрелость информационного пространства в соответствующих сферах деятельности, устоявшиеся и общепринятые механизмы конструирования информационных объектов и организации информационных процессов. Классификация КЯ таким образом проявляет понятийный базис, исходя из которого можно выстраивать оптимальные маршруты изучения информационно-компьютерного мира, одновременно с системой координат для его дальнейшего исследования. Именно это позволяет классификацию парадигм КЯ рассматривать как основу для выбора и определения основных понятий информатики.

Наметившийся в наши дни бум языкотворчества говорит о предстоящей потребности в автоматизации проверки анонсированных сведений о свойствах новых КЯ, аналогично проверке свойств программ или высказываний о программах.

К проблеме классификации языков и парадигм программирования примыкает проблема классификации и методической систематизации задач, для решения которых используются эти языки. Важность «правильной» постановки неоспорима и для учебных задач, сопровождающих изучение любого языка и стиля программирования (особенно при дистанционной форме обучения), и для олимпиад-ных задач, создаваемых для нужд различных соревновательно-поощрительных мероприятий, и тем более для производственных проблем, где малейшая неоднозначность может привести к потере времени и средств.

На примере олимпиадных задач, тексты которых в силу своей официальности и открытости являются наиболее полными и проработанными (хотя и не всегда свободными от недостатков), были изучены закономерности построения условий задач по программированию.

Задачи были систематизированы по нескольким направлениям:

• по теме предметной области: эквивалентные, неэквивалентные, серийные задачи;

• по полноте и совместности условия: корректное, противоречивое, неоднозначное, неопределенное условие;

л

г

I

о

I

о ю

Б

%

23

Образовательное значение классификации компьютерных языков

Таблица

Схема языкового покрытия фаз ЖЦП для задач разного уровня изученности

Изученность и сложность задач Фаза жизненного цикла* Поддержка жизненного цикла языками программирования Парадигмы языков высокого уровня Дополнение поддержки жизненного цикла другими компьютерными языками

Многоуровневое абстрагирование для особо важных и сложных задач со специальными методами решения Обоснование целесообразности Языки подготовки презентаций Языки дистанционного общения

Постановка задачи ЯСВУ

Спецификация требований Алгебраические языки спецификаций систем реального времени

Проектирование ФП ЯСВУ

Реализация ЯНУ ФП

Тестирование ЯНУ ФП

Сопровождение Языки онтологических систем

Бизнес-приложения, зависящие от динамики производственной деятельности человека Обоснование затрат Графические языки моделирования бизнес процессов, языки управления проектами

Постановка задачи ООП

Спецификация требований ФП

Проектирование процессов СП ФП ООП Языки управления проектами

Программирование и отладка СП ФП ООП

Тестирование и отладка СП ООП Языки тестирования и отладки

Сопровождение Языки онтологических систем, языки для распределенных информационных систем

Развитие ООП

Сбор фактов и накопление знаний для не вполне определенных задач Постановка задачи Языки подготовки презентаций, языки запросов к базам данных

Представление СД ФП ЛП

Тестирование и отладка ЛП

Сопровождение ЛП ООП Языки онтологических систем

Исследование и разработка новых алгоритмов и структур данных, включая создание новых КЯ Постановка исследования ЯСВУ

Спецификация критериев ЯСВУ

Проектирование алгоритмов ФП

Программирование СП ФП

Тестирование и отладка ФП

Сопровождение Языки подготовки публикаций

Развитие ФП ООП

Реализация хорошо изученных алгоритмов для корректных задач Постановка задачи ЯСВУ

Проектирование СД СП ФП Языки проектирования

Кодирование ЯНУ СП

Отладка ФП Языки тестирования и отладки

Сопровождение Языки подготовки публикаций

* Структура ЖЦП (а также трудозатраты на отдельных фазах) зависит от уровня изученности решаемых задач. Курсивом выделены фазы, не имеющие удобной поддержки на уровне языка программирования

Г. А. Андреева, И. С. Ануреев, Е. В. Бодин,Л. В. Городняя,А. Г. Марчук, Ф. А. Мурзин, Н. В. Шилов

№ 6(24) 2009

is

о %

&

s

а с

1

а а

гг

1 I

s

а

I

а a

а

«о о

S3 о

• по степени формализованности условия: рассказ, объяснение, описание, формально-формульное задание;

• по количеству входных данных: заданное, переменное, неизвестное ограниченное, неизвестное неограниченное;

• по количеству возможных решений: от нуля до множеств счетной и континуальной мощности;

• по сложности предполагаемого алгоритма или алгоритмов решения;

• по способам организации автоматической проверки решений.

При составлении задач необходимо избегать недопустимых вариантов (противоречий, несовместности, недоучета количества верных решений, несоответствия предполагаемой сложности решения и выбранного способа тестирования и т. д.).

Онтология предметной области как основа классификации

В отличие от синтаксиса КЯ, который хорошо формализован, от семантики КЯ, которая все-таки поддается формализации, практика использования языков — это человеческий опыт, «экспертное знание» об истории, принципах разработки, существовавших реализациях, стилях использования и эволюции КЯ, т. е. то самое знание, которое наиболее важно для образования. Эти разнородные «знания» трудно уложить в прокрустово ложе единообразного математического формализма. И тем не менее, для того чтобы классификация КЯ была доступной для исследовательских, образовательных и производственных целей, необходим некоторый уровень формализации хотя бы хранения и доступа к таким «знани-

ям». Иными словами, если уж придется обойтись без единого формализма для представления очень разнородных высказываний экспертов о КЯ, то нельзя обойтись без формализма для организации хранения и доступа к разнородным высказываниям экспертов.

Такой формализм существует. Это формализм онтологий. Классическое значение термина «онтология» следующее.

Онтология6 — раздел философии, изучающий бытие, сближающийся с метафизикой. Некоторые философы, однако, разделяют онтологию и метафизику и трактуют онтологию как явную спецификацию концептуализации, где в качестве концептуализации выступает описание множества объектов и связей между ними. Именно в таком смысле говорят о «прикладной» онтологии, онтологии «предметной области» (т. е. отрасли знания или сферы деятельности): это раздел философии, изучающий понятия, объекты и связи между ними, которые используются для описания этой области7. Выделяют еще и так называемые формальные онтологии, представляющие объекты и часть связей между ними без концептуальной полноты и замкнутости.

Однако в конце последнего десятилетия XX в. термин «онтология» получил новое значение в контексте так называемой «семантической паутины» (Semantic Web) [Berners-Lee, Hendler, Lassila, 2001]. В этом контексте онтология — это форма представления «знаний» о той или иной предметной области.

Наиболее популярный (на данный момент) КЯ для представления онтологий в семантической паутине — Web Ontology Language OWL. Этот язык поддержан WWW-консорциумом8 в форме рекомендуемого стандарта [28]9.

6 Онтология — от др.-греч. «онтос» — сущее (то, что существует) и «логос» — учение, наука.

7 См., например, Corazzon R.. Ontology. A Resource Guide for Philosophers на http:Zwww.formalontology.it/: «Ontology is the theory of objects and their ties. Ontology provides criteria for distinguishing various types of objects... and their ties...».

8 См. официальный сайт на http:Zwww.w3.org/.

9 В апреле 2009 г. Рабочая Группа по языку OWL опубликовала рабочий проект (Working Draft) языка OWL 2, который (по заявлениям авторов) является совместимым расширением языка OWL в версии 2004 г. Проект состоит из 13 документов, подробную информацию о которых можно найти по адресу http:Zwww.w3.org/TR/2009/ WD-owl2-overview-20 090 421/Documentation_Roadmap.

26

№ 6(24) 2009

Важное преимущество OWL состоит в том, что его базовый уровень (OWL-Lite) и основной уровень (OWL-DL) «поддержаны» процедурами проверки совместности, разработанными в рамках исследований по математическому формализму для онтологий, который называется Description Logic [19]. Эта поддержка обусловлена тем, что язык OWL, имея свой синтаксис (унаследованный от XML), свою прагматику (представление онтологий), имеет семантику, описанную в терминах Description Logic для OWL-Lite и OWL-DL, и в терминах логики высших порядков для полного языка OWL-Full.

Однако несмотря на значение Description Logic для освоения и обоснования языка OWL, на русском языке (на момент подготовки этого обзора) нам не было известно ни одной оригинальной исследовательской работы по Description Logic, хотя русская калька «Дескриптивная логика» упоминалась в некоторых исследованиях, а монография [15] содержит корректное введение в этот формализм.

Заметим, что плакат History of Programming Languages, подготовленный издательством O'REILLY, также задает некоторую формальную онтологию ЯП, в которой средства выделения классов и навигации — это явное перечисление языков, «линии влияния» и хронология.

Те же замечания относятся и к проекту HOPL (History of Programming Languages), который фиксирует «знания» о внушительном числе (8512) языков программирования на момент 2006 г. Несколько по-другому обстоит дело со свободной энциклопедией ЯП Progo-pedia10. Она открыта для редактирования и автоматически отслеживает внесение изменений. Однако оба проекта (HOPL и Progopedia) не поддерживают связь с парадигмами программирования, имеют ограниченную навигацию (по хронологии и взаимному влиянию языков). Проект HOPL поддерживает некоторую таксономию ЯП, а Progopedia отслеживает только таксономию язык-диалект-реализация-версия. Кроме того, проект Progopedia, к сожалению, не столь широк по охвату, как

плакат от O'REILLY и проект HOPL: в настоящий момент в его поле зрения только 51 язык, 80диалектов, 187 реализаций и 485 версий.

Заключение

Вывод, который можно сделать из сказанного выше, следующий: если историческое и исследовательское значение проектов HOPL и Progopedia не вызывает сомнения, то их использование для образовательных (в учебном процессе) и прикладных целей (при формировании проектов) ограничено отсутствием связи с парадигмами, и/или статичностью информации и закрытостью для редактирования, и/или слабыми средствами навигации. Кроме того, все перечисленные онтологии (плакат от O'REILLY, HOPL и Progopedia) посвящены только языкам программирования, а не всему многообразию КЯ. Поэтому для использования в образовании и при формировании проектов нужна открытая (для свободного редактирования) эволюционирующая темпоральная (то есть отслеживающая редакции) он-лайн-онтология КЯ с развитыми средствами навигации и разнообразных поддержкой связей между языками и парадигмами.

Анализ концепций и классификация представительного свода КЯ в контексте профессиональной речевой практики в настоящее время стихийно разворачивается при формировании открытых онтологий и энциклопедий, что ставит на реальную почву решение проблемы глубинного анализа содержания обучения информатике и информационным технологиям.

СПИСОК ЛИТЕРАТУРЫ

1. Андреева Т. А., Ануреев И. С., Бодин Е. В., Город-няя Л. В., МарчукА. Г., Мурзин Ф. А., Шилов Н. В. Компьютерные языки как форма и средство представления, порождения и анализа научных и профессиональных знаний / Труды XV Всероссийской науч-

л

s

m

It

S

I

о

S

о «

S

%

10 См. официальный сайт http:Zprogopedia.ru.

27

№ 6(24) 2009

äs

о %

SV

s

а с

1

а а

гг

1 I

s

а

I

а a

а

«о о

S3 о

но-методической конференции «Телематика-2008». СПб, 2008.

2. Ануреев И.С. Язык описания онтологических систем переходов OTSL как средство формальной спецификации программных систем II Вестник НГУ. 2008. Т. 6. Вып. 3. (Информационные технологии).

3. Ануреев И. С., Бодин Е. В., Городняя Л. В., Мар-чукА. Г., Мурзин Ф. А., Шилов Н. В. Проблема классификации компьютерных языков II Материалы 11-й национальной конференции по искусственному интеллекту с международным участием (КИИ-08). Дубна, 2008.

4. Городняя Л. В. Парадигмы параллельного программирования в университетских образовательных программах и специализации II Всероссийская научная конференция «Научный сервис в сети Интернет: решение больших задач». Новороссийск; М., 2008.

5. Городняя Л. В. Парадигмы программирования. М.: Интернет-Университет Информационных технологий. URL: http:/www.¡ntu¡t.ruIdepartmentIseI paradigms.

6. Лавров С. С., Слисенко А. О., Цейтлин Г. С. Проект плана-программы по специальности «Информатика и системное программирование» II Микропроцессорные средства и системы. 1985. №4.

7. Кун Т. Структура научных революций. М.: АСТ, 2003.

8. МарчукА. Г. Semantic Web — на пути к новому поколению информационных систем II Труды 7-й Всероссийской научной конференции «Электронные библиотеки: перспективные методы и технологии, электронные коллекции». Ярославль, 2005.

9. Непейвода Н. Н. Стили и методы программирования. М.: Интернет-университет информационных технологий. URL: http:/www.¡ntu¡t.ruIdepartmentI seIprogstyles.

10. Непомнящий В. А., Ануреев И. С., Михайлов И. Н., Промский А. В. На пути к верификации C-программ: Язык C-L¡ght и его формальная семантика II Программирование. 2002. № 6.

11. Непомнящий В. А., Ануреев И. С., Михайлов И. Н., Промский А. В. На пути к верификации C-программ: аксиоматическая семантика языка C-kernel II Программирование. 2003. № 6.

12. Пратт Т., ЗелковицМ. Языки программирования: разработка и реализация. СПб.: Питер, 2002.

13. Прехельт Л. Эмпирическое сравнение семи языков программирования. Открытые системы. 2000. № 12.

14. Рекомендации по преподаванию программной инженерии и информатики в университетах / пер. с англ. М., 2007.

15. Тузовский А. Ф., Чириков С. В., Ямпольский В. 3. Системы управления знаниями (методы и технологии). Институт «Кибернетический центр» ТПУ. Отдел проблем информатизации ТНЦ СО РАН. Томск: Издательство научно-технической литературы. 2005.

16. ФлойдР.О парадигмах программирования / Лекции лауреатов премии Тьюринга. М.: Мир, 1993.

17. ХювененЭ., Сеппянен Й. Мир Лиспа. Т. 1, 2. М.: Наука, 1994.

18. Anureev I. S., Bodin E. V., Gorodnyaya L. V., MarchukA. G, Murzin F. A., ShilovN. V. On the Problem of Computer Language Classification Z Joint NCC&IIS Bulletin, Series Computer Science. 2008. V. 27.

19. Baader F., Calvanese D, Nardi D, McGuinness D, Patel-Schneider P. (editors) The Description Logic Handbook: Theory, Implementation and Applications. Cambridge University Press, 2003.

20. Berners-LeeT., HendlerJ., Lassila O. The Semantic Web // Scientific American. 2001. May 17.

21. BlazyS., LeroyX. Mechanized Semantics for the Clight Subset of the C Language Z Journal of Automated Reasoning. 2009. V. 43(4).

22. Corazzon R. Ontology. A Resource Guide for Philosophers. URL: http:/www.formalontology.it.

23. Gurevich Yu., Huggins J. K. The Semantics of the C Programming Language // Computer Science Logic. 1992. V. 702.

24. Hoare C. A. R., Wirth N. An Axiomatic Definition of the Programming Language PASCAL Z Acta Informatica. 1973. V. 2.

25. McCarthy J. Recursive Functions of Symbolic Expressions and Their Computation by Machine I/ Communications of ACM. 1960. V. 3 (4).

26. Norrish M. C formalised in HOL. PhD Thesis. University of Cambridge, Computer Laboratory. 1998. Technical Report 453.

27. Ritchie D. M. The development of the C language // ACMSIGPLANNotices. 1993. V. 28 (3).

28. Smith M. K., Welty C., McGuinness D. L. OWL Web Ontology Language Guide Z W3C Recommendation. 2004. February 10. URL: http:Zwww.w3.org/TR/ owl-guide.

28