home Преподавание Информационных Технологий в России
Открытая всероссийская конференция

АПКИТ

Конференция
Информационное сообщение

Место проведения

Программа конференции

Регистрация

Участники

Фоторепортаж

Программный комитет

Программный комитет

Спонсоры
Информ. спонсоры
 
Орг. поддержка

AT-SOFTWARE

О КЛАССИФИКАЦИИ КОМПЬЮТЕРНЫХ ЯЗЫКОВ

Т.А.Андреева (ata@iis.nsk.su)
И.С. Ануреев (anureev@iis.nsk.su)
Е.В. Бодин (bodin@iis.nsk.su)
Л.В. Городняя (gorod@iis.nsk.su)
А.Г. Марчук (mag@iis.nsk.su)
Ф.А. Мурзин (murzin@iis.nsk.su)
Н.В. Шилов (shilov@iis.nsk.su)
Институт систем информатики СО РАН им. А.П. Ершова

Аннотация
Вопросы классификации компьютерных языков весьма важны для решения проблем ИТ-образования. Описан опыт классификации компьютерных языков, парадигм программирования и учебных задач по программированию. Проанализированы перспективы онтологического и операционного подходов к описанию парадигм компьютерных языков. Дан краткий обзор образовательных аспектов параллельного программирования и разработки распределенных информационных систем. Работа поддержана грантом РФФИ 08-01-00899-а.

Введение

Не удивительно, что многолетние труды по упорядочению учебных программ по информатике, программированию и информационным технологиям (Computer Sciences and Software Engineering), предпринятые авторитетными международными организациями (ACM, IEEE), дали лишь общие рекомендации по содержанию обучения специалистов в этой области. По существу эти, весьма обширные, рекомендации представляют собой инвентаризацию опыта ряда ведущих университетов, обладающих значительным научным и производственным потенциалом. [13]. Следование таким рекомендациям чревато значительным объемом времени обучения и сопряжено с разработкой обширного свода новых учебно-методических пособий, что потребует заметных трудозатрат. [7]

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

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

Общее представление

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

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

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

Унифицированные иерархии

Сгладить противоречие между существующим многообразием КЯ и необходимостью их сравнивать при классификации мы предлагаем посредством введения двух унифицированных семантических иерархий для наиболее типических языков: дву-трёх уровневой «дружественной» иерархии и одно-трёх слойной «формализованной» иерархии.

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

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

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

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

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

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

Парадигматическая характеристика языков программирования

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

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

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

  • низкоуровневое кодирование
  • программирование на языках высокого уровня
  • подготовка программ на базе языков сверх высокого уровня

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

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

Схема языкового покрытия фаз ЖЦП для задач разного уровня изученности
Изученность и сложность задач Фаза ЖЦП Поддержка ЖЦП языками программирования Дополнение поддержки ЖЦП другими компьютерными языками
  Парадигмы языков высокого уровня  
Многоуровневое абстрагирование для особо важных и сложных задач со специальными методами решения Обоснование целесообразности             Языки подготовки презентаций
Языки дистанционного общения
Постановка задачи           ЯСВУ  
Спецификация требований             Алгебраические языки спецификаций систем реального времени
Проектирование     ФП     ЯСВУ  
Реализация ЯНУ   ФП        
Тестирование ЯНУ   ФП        
Сопровождение             Языки онтологических систем
Бизнес-приложения, зависящие от динамики производственной деятельности человека Обоснование затрат             Графические языки моделирования бизнес процессов, Языки управления проектами
Постановка задачи         ООП    
Спецификация требований     ФП        
Проектирование процессов   СП ФП   ООП   Языки управления проектами
Программирование и отладка   СП ФП   ООП    
Тестирование и отладка   СП     ООП   Языки тестирования и отладки
Сопровождение             Языки онтологических систем, языки для распределенных информационных систем
Развитие         ООП    
Сбор фактов и накопление знаний для не вполне определенных задач Постановка задачи             Языки подготовки презентаций, языки запросов к базам данных
Представление СД     ФП ЛП      
Тестирование и отладка       ЛП      
Сопровождение       ЛП ООП   Языки онтологических систем
Исследование и разработка новых алгоритмов и структур данных, включая создание новых КЯ Постановка исследования           ЯСВУ  
Спецификация критериев           ЯСВУ  
Проектирование алгоритмов     ФП        
Программирование   СП ФП        
Тестирование и отладка     ФП        
Сопровождение             Языки подготовки публикаций
Развитие     ФП   ООП    
Реализация хорошо изученных алгоритмов для корректных задач Постановка задачи           ЯСВУ  
Проектирование СД   СП ФП       Языки проектирования
Кодирование ЯНУ СП          
Отладка     ФП       Языки тестирования и отладки
Сопровождение             Языки подготовки публикаций

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

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

Учебные задачи по программированию

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

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

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

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

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

Онтология как основа классификации

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

В настоящее время наиболее популярным математическим формализмом для представления таких онтологий являются логики описаний понятий (Description Logic, DL) и компьютерный язык Ontology Web Language (OWL). Оба эти формализма тесно связаны: логика описаний понятий позволяет определить математическую семантику для элементарного (OWL-Lite) и основного (OWL-DL) уровней языка: семантика OWL-Lite задается средствами DL-Lite, а семантика OWL-DL – средствами логики описаний понятий SHOIN. Такая тесная связь позволяет использовать алгоритмы верификации для DL при решении запросов (на совместность, противоречивость и так далее) при пополнении и модификации онтологий, специфицированных средствами OWL.

Заметим также, что плакат History of Programming Languages, подготовленный издательством O’REILLY, так же задает некоторую онтологию ЯП, в которой средства выделения классов и навигации – это явное перечисление языков, «линии влияния» и хронология. Так, например, можно говорить о классе всех языков программирования, на которые повлиял LISP, и которые возникли в период с 1970 по 1980 гг. К этому классу относятся, например, язык программирования Scheme. Отметим, однако, что при такой классификации полностью исчезает связь с парадигмами программирования. Отметим так же и то, что «знания» представленные на плакате от O’REILLY, статичны (хотя и содержат шкалу времени), а сам плакат не подлежит открытому редактированию.

Те же замечания относятся и к проекту HOPL (History of Programming Languages на http://hopl.murdoch.edu.au/), который фиксирует «знания» на момент 2006 г. о внушительном числе 8512 языков программирования. Несколько по другому обстоит дело со свободной энциклопедией ЯП Progopedia (на http://progopedia.ru). Он открыт для редактирования и автоматически отслеживает внесение изменений. Однако, оба проекта HOPL и Progopedia не поддерживают связь с парадигмами программирования, ограниченную навигацию по хронологии и взаимному влиянию языков. Проект HOPL поддерживает некоторую таксономию ЯП, а Progopedia — отслеживает только таксономию язык-диалект-реализация-версия. Кроме того, проект Progopedia, к сожалению, не столь широк по охвату как плакат от O’REILLY и проект HOPL: в настоящий момент в его поле зрения только 51 язык, 80 диалектов, 187 реализаций и 485 версий.

Заключение

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

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

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

Литература

  1. Андреева Т.А., Ануреев И.С., Бодин Е.В., Городняя Л.В., Марчук А.Г., Мурзин Ф.А., Шилов Н.В. Компьютерные языки как форма и средство представления, порождения и анализа научных и профессиональных знаний. //Труды XV Всероссийской научно-методической конференции "Телематика-2008", Санкт-Петербург. 2008, с. 77-78
  2. Ануреев И.С. Язык описания онтологических систем переходов OTSL как средство формальной спецификации программных систем // Вестник НГУ, серия «Информационные технологии», Т. 6, вып. 3. — С. 24-34. — 2008
  3. Ануреев И.С., Бодин Е.В., Городняя Л.В., Марчук А.Г., Мурзин Ф.А., Шилов Н.В. Проблема классификации компьютерных языков // Материалы 11 национальной конференции по искусственному интеллекту с международным участием (КИИ-08), Дубна, 2008. Том 3. С. 199-207
  4. Городняя Л.В. "Парадигмы параллельного программирования в университетских образовательных программах и специализации" //Всероссийская научная конференция "Научный сервис в сети Интернет: решение больших задач". Новороссийск-Москва. 2008, с. 180-184
  5. Городняя Л.В. Парадигмы программирования. М:Интернет-Университет Информационных технологий. http://www.intuit.ru, 2007
  6. Городняя Л.В. Парадигмы программирования в профессиональной подготовке информатиков. В сб. Проблемы специализированного образования. Новосибирск. 1998, с. 115-124
  7. Лавров С.С., Слисенко А.О., Цейтин Г.С. Проект плана-программы по специальности "Информатика и системное программирование".- Микро-процессорные средства и системы, N 4, 1985. - С. 20-28
  8. Марчук А.Г. Semantic Web - на пути к новому поколению информационных систем // Труды 7-ой Всероссийской научной конференции "Электронные библиотеки: перспективные методы и технологии, электронные коллекции", Ярославль, Россия, 4-6 октября 2005г. с. 122-125

В начало :: О конференции :: Программа :: Доклады :: Контакты

Техническая поддержка сайта:
Copyright © АП КИТ, 2005
hosted by AT-SOFTWARE
webmasters: perez&helga
webmasters: Arta