автореферат диссертации по философии, специальность ВАК РФ 09.00.08
диссертация на тему: Методологические основания развития языков программирования
Полный текст автореферата диссертации по теме "Методологические основания развития языков программирования"
московский государственный университет
имени М. В ЛОМОНОСОВА Диссертационный совет по философским наукам Д 501 001 37
На правах рукописи
Казакова Анастасия Евгеньевна
МЕТОДОЛОГИЧЕСКИЕ ОСНОВАНИЯ РАЗВИТИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
Специальность 09 00 08 — философия науки и техники
АВТОРЕФЕРАТ
Диссертации на соискание ученой степени кандидата философских наук
OD3 167812
Москва — 2008
003167812
Диссертация выполнена на кафедре философии и методологии науки философского факультета МГУ им М В. Ломоносова
Научный руководитель доктор философских наук,
профессор Кузнецов В Г
Официальные оппоненты доктор философских наук
профессор Васюков В JI
кандидат философских наук Петруня О Э
Ведущая орг анизлцля Российский университет дружбы народов (РУДН) кафедса онтологии и теории познания факультета гуманитарных и социальных наук
Защита диссертации состоится « 16 » апреля 2008 года на заседании диссертационного совета Д 501 00! 37 то философским наукам при Московском госудлоетвенном университете имени M В Ломоносова по адресу 119991, Москва, Ломоносовский проспект, д 27, корпус 4, учебный корпус №1, философский факуныег, зал заседаний Ученого совета, ауд А
С диссертацией можно ознакомиться в читальном зале Научной библиотеки МГУ им М В Ломоносова
517-518
Автореферат разослан << Г* » 2008 года
Ученый секретарь диссертационного совета
Брызгалина Е В
I. ОБЩАЯ ХАРАКТЕРИСТИКА РАБОТЫ
Актуальность темы исследования.
В свете проблем, дискутирующихся в рамках современной аналитической философии, а также когнитивной психологии и области искусственного интеллекта о соотношении языка и мышления, актуальным представляется исследование логико-методологических оснований искусственных языков, созданных и успешно используемых для управления ходом вычислительных процедур, реализуемых вычислительными машинами
В рамках философских концепций XX века, в частности представленных аналитической и герменевтической традициями, центральное место занимали вопросы о выразительных и познавательных возможностях естественного языка Множество методологичеек-йх исследований было посвящено анализу языка той или иной науки Множество концепций языка представлено лингвистическими - и языковедческими исследованиями Это свидетельствует о многообразии подходов к пониманию сущности языка как такового В рамках философской традиции язык рассматривается как средство выражения человеческих мыслей, как инструмент фиксации знаний о действительном мире во времени, как способ структурирования, хранения и передачи знаний, как аналитический метод, и даже как модель, порождающая мир Каждая концепция языка раскрывала какую-то из его особенностей и предлагала собственную трактовку отношения языка к мышлению, с одной стороны, и к действительному миру, с другой
Для аналитической традиции характерно рассмотрение языка как метода Основную интуицию этой традиции ЕД Смирнова1 относит к Э В де Кондильяку « искусство рассуждать сводится к хорошо построенному языку Это соображение относительно абстрактных и общих
' Смирнова Е Д, Логика и философия М РОССПЭН, 1996 Стр 31
3
идей доказывает, что их ясность и точность зависят исключительно от порядка, в котором мы создали наименования классов, и что, следовательно, для определения этого вида идей есть только одно средство — хорошо построить язык2» Тот факт, что искусственные языки можно рассматривать как модели фрагментов естественного языка3, дополняется специфическими управленческими и информационными задачами, которые также стимулировали появление языков программирования Данное методологическое исследование может показать как осуществляется эта программа не столько по отношению к рассуждениям, потому что это было бы в компетенции логики, сколько по отношению к специальному языку вычислений, позволяющему решать задачи, которые в результате определенной интерпретации могут быть не только вычислительными
Программирование — деятельность по созданию программ для вычислительных устройств посредством специальных языков или систем программирования Теоретические основы этой деятельности в полной мере соответствуют характерным чертам технических дисциплин «Фундаментальные исследования в технических науках часто отождествляются с теоретическими исследованиями в технике, которые находятся между математическими, естественнонаучными теориями, с одной стороны, и инженерной практикой ■— с другой, и даже включают в себя элементы дедуктивно-аксиоматических теорий4» Появление неклассических научно-технических дисциплин отмечается как новая тенденция в развитии технических наук Такие дисциплины появляются «в результате широкого научного движения (в частности, системного), конкретизации и доработки общих методологических, например, системных понятий и представлений, а также обобщения практики
2 Об искусстве рассуждать // Кондильяк Э В де Сочинения в трех томах —М Мысль, 1983 ТЗ стр 224
3 Смирнова Е Д, Логика и философия М РОССУ1ЭН, 19% Стр 29
4 Философия техники и технических наук // Современные философские проблемы естественных, технических и гуманитарных наук учебник для аспирантов и соискателей ученой степени кандидата наук / под общ ред д-ра филос наук, проф В В Миронова — М Гардарики, 2006 Стр 407
решения определенного класса научно-технических задач5» Эти дисциплины Hg могут быть отнесены ни к естественным, ни к техническим, ни к общественным наукам, они носят комплексный, междисциплинарный характер Теоретические основания программирования вычислительных устройств можно причислить к такого рода дисциплинам
Данное исследование черпает материал из области, которая в современной научной литературе называется «Computer Science» (иногда «Computer Sciences») — «компьютерная наука» (науки) или «наука о компьютерах» В рамках компьютерных наук возникли новые прикладные направления научных исследований, такие как вычислительная математика, вычислительная физика, вычислительная химия Компьютерные науки явились результатом синтеза логических, математических, физических, лингвистических, психологических и других дисциплин Уточнение смысла некоторых из этих вопросов развивается в направлении проблем, которые мы назвали бы философскими Например, проблема соотношения материального и идеального в компьютерной науке принимает вид вопроса о физических границах реализации идеальных процессов с помощью материальных устройств В современном научном языке это направление называют проблемой создания искусственного интеллекта (Artificial Intelligence) Эта проблема тесно связана с проблемой соотношения языка и мышления Она выражается в вопросах о влиянии языка на сознательные структуры, о том, как возможно познание мышления с помощью языка, о границах формализации языков, о соотношении естественных и искусственных языков Ряд других проблем относятся к области философских оснований математики и логики, и связаны с вопросами о категоризации мыслительных абстракций путем упорядочивания, сравнения, вычисления и других операций над абстрактными объектами В компьютерной науке эти вопросы
5 Там же Стр 418
приобретают вид рассуждений о соотношении дискретности и непрерывности, парадоксах теории множеств, пределов вычислимости и алгоритмизации
Основные принципы программирования появились в результате специфицирования вычислений для достижения частных целей Частные задачи программирования показали, что создание сложных компьютерных систем требует значительных (инженерных по происхождению) изменений в логическом аппарате, который изначально представляется простым
По мнению Герберта Саймона, изучение систем в науке и технике определено потребностью в анализе сложности На наш взгляд некоторые особенности сложности таких организованных систем, как вычислительные машины, запечатлены в структуре языков программирования «Благодаря абстрактному характеру и общности языка вычислительных машин как устройств для манипуляции символами, цифровые вычислительные машины существенно расширили диапазон систем, поведение которых поддается имитации Такую имитацию мы теперь обычно называем «моделированием» и стараемся разобраться в имитируемой системе, изучая поведение модели в разнообразных модельных и имитационных средах6»
Языки программирования являются средством представления знания для компьютерных систем Они предлагают концептуальные средства представления и возможности моделирования, приспособленные к решению конкретных задач Многообразие конструкций этих языков, сложившееся за довольно короткий по историческим меркам период — около шестидесяти лет — является благотворной почвой для размышлений о вопросах логико-философского и методологического характера, связанных с формализованными языками Дело в том, что одна и та же задача может быть решена различными программными средствами Основанием этого различия может быть не только выбор алгоритма
6 Саймон Г, Науки об искусственном пер с англ Изд 2-е — М , Едиториал УРСС, 2004 Стр 23
6
решения конкретной задачи, или модели вычислительного устройства, на котором этот алгоритм будет выполнен, но также и языком, средствами которого этот алгоритм описан «Эффективность машинных алгоритмов во многом зависит от используемых языков и систем программирования7»
Сказанное выше позволяет говорить о значительной роли, которую теория языков программирования играет в методологии компьютерных наук, что актуализирует в рамках философии техники задачу специального исследования, посвященного анализу становления этой теории
Степень разработанности темы исследования.
Основная масса работ, связанных с развитием языков программирования, как правило, имеют сугубо прикладной характер, то есть описывают строение языков и конкретную сферу их применения Имеют место также исследования в области математики, больше связанные с проблемами вычислимости и алгоритмизации Это направление имеет точки пересечения с проблемой формальной записи в виде какого-то определенного языка и сводится к изучению формализованных языков как способа выражения и реализации вычислительных и алгоритмических процедур
Теоретические исследования в области языков программирования представляют собой работы по упорядочению и систематизации множества этих языков Примерами таких исследований могут служить работы профессора, академика РАН В Э Вольфенгагена8 (МИФИ, ЮрИнфо), профессора Н Н Непейводы9 (УдГУ, НГУ), С С Лаврова10 Эти ученые отмечают, что работу по типизации языков программирования приходится осуществлять чуть ли не каждому преподавателю
7 Теслер Г С Место и роль алгоритмического базиса в решении проблемы производительности // Математические машины и системы 1997 № 1 стр 25-33
8 Вольфенгаген В Э, Конструкции языков программирования Приемы описания — М АО «Центр ЮрИнфоР», 2001
Вольфенгаген В Э, Методы и средства вычислений с объектами Аппликативные вычислительные системы — М АО "Центр ЮрИнфоР", 2004
9 Непейвода Н Н , Стили и методы программирования М «Интернет-Ун-т Инферм Технологий», 2005 '"Лавров С С, Основные понятия и конструкции языков программирования — М Финансы и
статистика, 1982
подготавливающему вводную лекцию к курсу программирования Это позволяет говорить о программировании как становящейся, развивающейся области науки и техники Подобные исследования ведутся во многих университетах и научно-исследовательских организациях мира, так или иначе связанных с областью компьютерных наук
Фундаментальными работами в области языков программирования принято считать «Искусство программирования» Д Кнута", «Дисциплина программирования» Э Дейкстры12, «Алгоритмы + структуры данных = программы» Н Вирта'3 Эти ученые являются лауреатами премии Тьюринга14 и разработчиками наиболее широко известных языков программирования Эти работы послужили основными источниками для данного исследования
Основные работы, посвященные анализу эволюции языков программирования — это работы М Бен-Ари15, Т Пратта16 и Р У Себесты17 К этому же типу относятся «Методы программирования» Б Мейера и К Бодуэна18, «Эволюция языков программирования» Г Грогоно19 Они также послужили материалом для данной работы20
" Русский перевод КнутД Искусство программирования М 2000 (Англ Donald Е Knuth, The Art of Computer Programming, Volumes 1-4, Addison-Wesley Professional 1997 (1-st ed - 1968))
12 Русский перевод Дейкстра Э Дисциплина программирования 1-е изд — М Мир, 1978 — с 275 (Англ A Discipline of Programming, Prentice-Hall Series in Automatic Computation, 1976)
11 Русский перевод H Вирт Алгоритмы + структуры данных = программы М , "Мир", 1985 (Англ Algorithms + Data Structures = Programs Prentice-Hall, Inc , Englewood Cliffs (Nov 1975))
14 Самая престижная премия в области информатики, ежегодно вручаемая Ассоциацией вычислительной техники за выдающийся научно-технический вклад в этой области
15 Бен-Ари М Языки программирования Практический сравнительный анализ — М Мир, 2000 (оригинал - Principles of Concurrent Programming Prentice-Hall, Englewood Cliffs, NJ 1982)
16 Пратт T, Языки программирования разработка и реализация — Пер с англ Под ред
ЮМ Баяковского М Мир 1989 (оригинал — Prentice-Hall Inc, Englewood Cliffs New Jersey, USA 1975)
" "Concepts of Programming Languages" by Robert W Sebesta, The Benjamin/Cummmgs Publishing Company, Inc, 1993 (Русский перевод Себеста P У, «Основные концепции языков программирования» М,Спб,Киев «Вильяме» 2001)
18 Мейер Б, Бодуэн К, Методы программирования в 2-х томах T 1 , пер с франц Ю А Первина М Мир 1982 (оригинал Direction des Etudes et Recherches d'Electncite de France 1978)
19 Grogono G, The Evolution of Programming Languages Department of Computer Science Concordia University Montreal, Quebec 1999
20 Материалом послужили также работы Ellis Horowitz, Fundamentals of Programming Languages (Rockville, Maryland Computer Science Press, 1983) и Bruce MacLennan, Principles of Programming Languages Design, Evaluation, and Implementation (London Oxford University Press, 1987)
Другие работы представляют собой практические пособия по использованию какого-либо из языков программирования, точнее одной из его версий, и, по сути, являются учебными руководствами
Все эти исследования имеют точки пересечения, поскольку преследуют цель — систематизировать множество знаний о языках программирования, что определяет становление теории программирования как научной дисциплины
Объектом данного исследования являются концепции языков, предназначенных для программирования вычислительных устройств
Предмет исследования — развитие языков программирования как средств выражения и реализации вычислительных и алгоритмических процедур, осуществляемых посредством вычислительной машины
Цель данного исследования — выявить методологические основания развития языков программирования и определить этапы становления теории языков программирования как технической теории
Для достижения этой цели требуется решить следующие задачи:
1 Выделить концептуальные представления о языках программирования, послужившие основанием для формирования методологической базы теории языков программирования, а также очертить значимые этапы их эволюции
2 Определить задачи, стимулирующие развитие языков программирования, и выделить тенденции развития методологических средств, обеспечивающих решение этих задач
3 Определить направление развития теоретических исследований в области языков программирования и выявить специфические характеристики становления теории языков программирования как научно-технической теории
В качестве общетеоретических методов исследования использован системный подход, а также методы структурного и функционального анализа, определенные спецификой искусственных языков Методологической основой исследования является концепция развития технической теории, разработанная А Г Гороховым и представленная в работе «Философия науки и техники21»
Положения, выносимые на защиту:
1 Концепции языков программирования высокого уровня складываются и развиваются в результате стремления разработчиков снизить «семантический разрыв», лежащий между языком описания работы вычислительного устройства в его конкретной (физической) реализации и языком, на котором осуществляется постановка задачи, зачастую представляющем смесь естественного языка и языка математики
2 Специфика языков программирования как формализованных языков, служащих для выражения и реализации вычислительных и алгоритмических процедур, заключается в возможности выделения различных уровней организации данных и обусловлена особенностью значения выражений языка, представляющих собой все предыдущие алгоритмы вычислений, существующие по отношению к конкретной среде реализации
3 В качестве основной тенденции развития языков программирования можно выделить поиск таких методологий программирования, которые позволили бы наиболее точно отразить логику человеческих действий, ориентированных на решение задач, относящихся к различным предметным областям
4 Языки программирования выполняют, с одной стороны, роль искусственных языков, в которых запечатлены чисто математические методы, с другой стороны, сами представляют собой аналитический
21 Степин В С , Горохов В Г, Розов М А , Философия науки и техники М Гардарики, 1999
10
метод по отношению к языку заданной предметной области, задачи которой предполагается решить посредством вычислительной машины 5 Развитие теоретических исследований в области языков программирования определено стремлением повысить выразительные возможности языковых конструкций посредством реализации средств создания предельно абстрактных математических объектов
Новизна предложенного исследования может быть суммирована в следующих положениях
1 Теория языков программирования развивается согласно особенностям, определенным концепцией развития технических теорий В Г Горохова, выбранной в качестве методологии для данного исследования
2 Специфика теории языков программирования как технической теории заключается в том, что в процессе аппроксимации результатов, полученных в области исследования формальных языков, в частности, языка математики, определяются новые задачи, решение которые требует новых исследований в области гуманитарных наук, направленных на изучение естественных языков, с целью определения связи познавательных и мыслительных процедур, значимых для управленческих и информационных процессов
3 Междисциплинарный характер исследований, который определяется в ходе становления теории языков программирования, можно объяснить поиском решений, обеспечивающих возможность моделирования «поведения» любых искусственных и даже некоторых естественных систем.
Теоретическое и практическое значение диссертации
Данное исследование предлагает анализ развития языков, созданных для управления вычислительной машиной, что имеет большое значение для понимания методологических основ вычислительной техники, поскольку теория языков программирования находится на стадии становления В диссертации изложены основные проблемы становления теории языков программирования как технической теории, связанные с процедурой формализации, представляющей собой особый вид мыслительной и познавательной деятельности Таким образом, материал диссертации может служить основой для дальнейших исследований в области философии техники и методологии науки
Апробация диссертации происходила в рамках курса «Телекоммуникации и компьютерные технологии», читаемого автором начиная с 2005 г на философском факультете МГУ им М В Ломоносова, а также при разработке мультимедийного методического пособия для обязательной общеобразовательной дисциплины «Математика и информатика» (2006 г) Кроме этого, в 2007 г автором была разработана программа и учебно-методический комплекс для курса «Информатика», входящего в федеральный компонент программ инновационного типа по философии Основные результаты исследования были изложены на научных конференциях «Философия искусственного интеллекта» (МИЭМ, 2005 г), «Ломоносов-2005» (МГУ), на IV Российском философском конгрессе «Философия и будущее цивилизации» (МГУ, 2005 г), «Философия математики» (МГУ, 2007)
Структура диссертации.
Диссертация состоит из введения, трех глав, каждая из которых включает 2 параграфа, заключения и библиографии Логика построения работы соответствует логике решаемых в ней задач
П. ОСНОВНОЕ СОДЕРЖАНИЕ ДИССЕРТАЦИИ.
Введение.
Во введении обосновывается актуальность выбранной темы, осуществляется обзор подходов к исследованию языков программирования, отмечаются проблемы классификации существующих языков программирования и выделении оснований их развития, чем обосновывается необходимость методологического анализа в этой области На основании этого формулируются объект, предмет, цель и задачи работы, а также определяется применяемая методологическая база Приводятся положения, выносимые на защиту, указывается авторское видение новизны, теоретической и практической значимости диссертации
Глава 1.
РАЗВИТИЕ КОНЦЕПЦИЙ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ.
В этой главе предлагается решение первой задачи данного исследования Она посвящена историческому обзору концептуальных идей языков программирования, имеющих принципиальное значение для теории программирования как инженерной деятельности Развитие представлений о языках программирования определялось развитием вычислительной техники с одной стороны (относится к эмпирическому уровню становления технической теории) и изменением в представлениях о способах управления этими устройствами (относится к теоретическому уровню) Анализ развития двух этих определяющих уровней представлен в двух параграфах данной главы
В параграфе 11 — «Определение понятия «язык программирования» — показано, как изменялось понятие «язык программирования» в теоретических работах, написанных преимущественно разработчиками этих языков, выделено четыре подхода к определению понятия «язык программирования»
1 Язык программирования как средство трансляции математических формул в последовательность машинных команд22 Такой подход определяет деятельность программиста как написание математических формул
2 Язык программирования как средство обработки информации23 Этот подход определяет деятельность программиста как построение рассуждений, работу с символьными, а не числовыми конструкциями,
является основным для логических языков, появившихся впоследствии
) ,,
3 Язык программирования как средство описания алгоритма Такой подход отражает основную идею программирования как деятельности по разработке алгоритмов
4 Язык программирования как средство моделирования программ25 Этот подход дает основание считать деятельность программиста конструированием программ
Отмечается, что четвертый подход имеет принципиальное отличие от первых трех, появившихся примерно в одно время Это отличие выражается как переход от понимания языка программирования в качестве «набора правил для написания программ, которые являются всего лишь последовательностями символов26» к пониманию языка программирования как «механизма абстрагирования27» Эти подходы определили направление дальнейших работ по созданию языков программирования
В параграфе 12 — «Практические основания развития языков программирования» — осуществлено описание этапов развития языков программирования
22 Впервые реализован в языке «FORTRAN» (FORmula TRANslatmg System — 1954 г )
23 Первая публикация описания этой концепции принадлежит Джону МакКарти MacCarthy, J "Recursive Function of Symbolic Expressions and Their Computation by Machine, Part I " Commun ACM, Vol 3, № 4, pp 184-195
4 Впервые реализован в языке ALGOL 58 (ALGOnthmic Language — 1958 г )
25 Идея впервые была представлена в языке SIMULA I — Дал У -И , Мюрхауг Б, Нюгорд К, СИМУЛА 67 Универсальный язык программирования —M Мир, 1969 Стр 9 (англ Версия — Norwegian Computing Center, Oslo, 1968)
26 Бен-Ари M Языки программирования Практический сравнительный анализ — M Мир, 2000 (оригинал — Principles of Concurrent Programming Prentice-Hall, Englewood Cliffs, NJ 1982), стр 43
27 Там же, стр 9
Первый этап — появление языков «высокого уровня» «Высота уровня» определяется как снижение степени зависимости конструкций языка описания программы от аппаратной реализации конкретного вычислителя
Следующий этап — появление так называемых «предметно-ориентированных» языков программирования, то есть языков, созданных ради решения задач, принадлежащих определенной предметной области
Третий этап (продолжается по настоящий момент) — создание «универсальных» языков, причем «универсальность» в этом контексте понимается и как обеспечение средств решения задач, принадлежащие различным предметным областям, и как независимость от архитектуры вычислительной машины28 Глава 2.
ПРАКТИЧЕСКИЕ РЕАЛИЗАЦИИ ЯЗЫКОВ
ПРОГРАММИРОВАНИЯ.
Во второй главе осуществляется анализ задач, стимулирующих развитие языков программирования, а также тенденции развития методологических средств, обеспечивающих решение этих задач Теоретические знания в технических науках имеют значение в первую очередь для инженерной практики Поэтому предметом данной главы становится описание существующих практических решений, связанных с реализацией языков программирования, выявляются проблемы этих решений, обусловившие необходимость теоретических разработок, направленных на совершенствование методов решения этих задач
В параграфе 2 1 — «Методы реализации языков программирования» — дается описание основных практических решений, реализующих языки программирования В технических науках задача реализации выражается как проблема интерпретации и эмпирического обоснования правил перехода от одних модельных уровней в составе
28 В литературе по программированию иногда называется «интерплатформенностью»
15
теории к другим Реализовать язык программирования — значит не только обеспечить всю совокупность технических средств для написания программы, но и гарантировать корректность ее выполнения. Реализация осуществляется за счет создания так называемых системных программ, основным назначением которых является трансляция текста, составленного на языке программирования «высокого уровня», в последовательность машинных команд — компилятора и интерпретатора Процедура перевода осуществляется следующим образом Текст программы подвергается лексическому, синтаксическому и, в наиболее современных языках, семантическому разбору. В основу лексического и синтаксического разбора должны быть положены правила определения «правильных» последовательностей и комбинаций лексем, а, следовательно, способ определения принадлежности этих лексем конкретному языку Исходная программа, как правило, имеет не линейную структуру, а состоит из нескольких связанных между собой модулей (речь идет, конечно, о серьезных, сложных программах) Это обусловлено наличием нескольких уровней представления данных, что в процессе конструирования программы обеспечивает построение абстракций высокого уровня Для определения правильности интерпретации типов данных и производимых над ними операций необходим семантический анализ Семантический анализ предполагает наличие формализованного способа определения правил формирования и различения абстракций, содержащихся в конкретном языке программирования Именно это вызывает наибольшие трудности при реализации языков программирования и определяет основную проблемную область для теоретических исследований
В данном параграфе проблемы формулируются в виде требований, предъявляемых к языкам программирования Наиболее существенные из них с точки зрения развития теории языков программирования — ортогональность (определяет способ представления абстракций
процессов и данных в языках программирования) и надежность (определяет необходимость доказательства выполнимости программы, написанной на языке) Многообразие языков программирования объясняется многообразием решений, позволяющих реализовать эти требования
В параграфе 2 2 — «Исследования в области языков программирования, направленные на преодоление проблем реализации» — представлены основные теоретические концепции, определившие дальнейший ход исследований в области разработки языков программирования Поиск оптимальной реализации языка программирования провоцирует поиск теорий в сфере фундаментальных исследований языков Научно-исследовательские работы, направленные на анализ и формализацию процесса конструирования реализаций языков, заключаются в аппроксимации результатов теории автоматов, а также теории построения формальных языков В этом параграфе дается описание двух наиболее значительных для развития языков программирования теорий — А Тьюринга (абстрактная машина как способ задания пределов вычислимости) и Н Хомского (теория порождающей грамматики)
Эти концепции повлияли также и на определяющую для программирования деятельность, а именно на формализацию поставленной задачи, поскольку описание функционирования какой-либо системы, относящейся к определенной предметной области, в первоначальном виде представляет собой текст на естественном языке Глава 3.
МЕТОДОЛОГИЧЕСКИЕ ОСНОВАНИЯ ДЛЯ ВЫДЕЛЕНИЯ ПАРАДИГМ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ.
Третья глава посвящена анализу современных теоретических исследований в области языков программирования и определению специфических черт теории языков программирования по отношению к научным теориям
В параграфе 31 — «Исследования синтаксиса и семантики языков программирования» — представлен обзор основных концепций анализа синтаксиса и семантики языков программирования, как поиска методов формального определения языков программирования На данный момент наиболее проработанным среди них является метод описания синтаксиса — «форма Бэкуса-Наура», который положен в основу создания атрибутивных грамматик Принято считать, что расширенная «форма Бэкуса-Наура» является основой атрибутивной грамматики, содержащей в себе так называемую статическую семантику Статическую семантику относят к классу операционных29, поскольку смысл конструкциям языка придается с точки зрения их влияния на функции переходов из состояния в состояние абстрактного вычислителя Более совершенными, но менее проработанными на данный момент являются аксиоматические и денотационные семантики Аксиоматические семантики сосредотачивают свое внимание на выборе и использовании аксиом и правил вывода, которые обеспечивают универсум рассуждения в процессе составления программы В денотационных семантиках операционное определение заменяется денотационным30, чем обеспечивается возможность еще более глубокого анализа выражений конкретного языка программирования К денотационным семантикам также относят алгебраические семантики, в первую очередь направленные на категоризацию алгебраических понятий и операций Подходы к построению семантик оказываются тесно связанными с подходами к определению понятия «язык программирования»
Исследование подходов к построению семантики позволяет сделать вывод о часто не учитываемой, но очень существенной особенности
29 Выделение семантических теорий приводится по Вольфенгаген В Э Конструкции языков программирования М АО «Центр ЮрИнфоР» 2001 стр 77-80
30 Денотат в данном случае понимается как идеализированный математический объект, посредством высокой степени абстракции представляющий (моделирующий) другие объекты
языков программирования, а именно о том, что семантика этих языков должна анализироваться как по отношению к вычислителю, так и по отношению к человеку, работающему над созданием программ Выражения, записанные с помощью какого-либо языка, должны быть осмыслены, прежде всего, человеком, их создающим Эта особенность стала ощутима в момент, когда человеку для того, чтобы управлять вычислительной машиной, перестало быть нужным подробное знание об организации аппаратной составляющей устройства, для которого предназначается программа Это было одной из первостепенных задач, для решения которых разрабатывались языки «высокого уровня» Поскольку формальное описание выражений языка программист получает, обратившись к спецификации, в которой все значения конструкций конкретного языка определяются нормативно, выполнимость написанной им программы может быть определена только в процессе ее тестирования и отладки, т е на уровне практической реализации
В параграфе 3 2 — «Парадигмы программирования» — выделяются подходы к определению парадигмальных оснований развития языков программирования Сделано предположение относительно того, что способы построения семантик языков программирования оказывают влияние на выделение парадигм «Парадигма», как она ».определяется ТС Куном31, представляет совокупность концептуальных, ценностных и практических ориентиров, определяющих деятельность научного (интеллектуального) сообщества Парадигмы языков программирования выделяются на основании методологий, определяющих «стиль мышления»32, в процессе создания программ В специальной литературе, посвященной этой теме, используются термины «стиль программирования», «концепции программирования», «методологии программирования» В некоторых современных англоязычных источниках
31 Кун Т С, Структура научных революций M ACT, 2001
32 Непейвода Н Н , Стили и методы программирования М «Интернет-Ун-т Информ Технологий», 2005
встречается термин «философия программирования33» Все эти термины, призваны подчеркнуть разницу в способах конструирования программ на основании различения применяемых методов Методологии, как только они определяются в рамках какого-то конкретного языка, в скором времени становятся основанием для расширения и усовершенствования ' других ранее созданных языков, что характерно для развития технических теорий
Тесная связь семантик, положенных в основу разработки языков программирования, с методологиями может быть объяснена тем, что разработчик программы в процессе формализации задачи полагает некоторый способ рассуждения Этот способ, в том числе, определяется конструкциями выбранного им языка Если рассматривать текст программы по аналогии с рассуждением, то можно говорить о следующих допущениях, реализованных в языках программирования Алгоритм, определяющий ход выполнения программы, можно описывать как совокупность действий (операций) Такой способ описания алгоритмов реализован в языках, называемых в специальной литературе декларативными Эта методология лежит в основе языков, которые ориентированы на описание последовательности состояний вычислителя (представленного абстрактно) и связанных с «действием» перехода из одного состояния в другое Текст программы такого рода представляет собой, прежде всего, описание действий, необходимых для реализации вычислений Предметную область, соответствующую конкретной задаче, можно описывать не только как совокупность последовательных действий, но и как совокупность отношений, заданных функционально Такой подход определяет основу для развития функционального программирования Широкое применение этого подхода определяется накопившимся со временем множеством уже описанных средствами
55 Grogono G , The Evolution of Programming Languages Department of Computer Science Concordia University Montreal, Quebec 1999
какого-то языка алгоритмов, вычисляющих ту или иную функцию Существенными для этой методологии оказываются, прежде всего, отношения, заданные между классами абстрактных объектов, использующихся при составлении алгоритма Конструирование таких абстрактных объектов, которым в качестве определения задаются свойства их функционирования, реализуется в объектно-ориентированной методологии Это обеспечивает возможность разрабатывать программу, выполнение которой не только не зависит от аппаратно-программной реализации конкретного вычислителя, но и позволяет формализовать задачи, относящиеся к различным предметным областям В основном именно эта методология развивается и совершенствуется в настоящий момент, и определяет направление специальных теоретических исследований
Таким образом, на основании анализа употребления понятия «парадигма программирования» в теории языков программирования, в соответствии со значением термина «парадигма», определенным в результате исследования научных теорий Т С Куном, выявляются специфические черты теории языков программирования как технической теории
В Заключении воспроизводится ход исследования, суммируются результаты, полученные в каждой из глав, подводятся основные итоги диссертации
Основное содержание и результаты диссертации отражены в следующих публикациях соискателя:
Гуманитарные и естественнонаучные предпосылки к созданию искусственного интеллекта // Философия искусственного интеллекта Материалы всероссийской международной конференции М ИФ РАН, 2005
Некоторые методологические аспекты программирования автоматических вычислений // Философия математики Материалы международной научной конференции 15-16 июня 2007 года - М, Изд Савин С А , 2007
Энциклопедические статьи «Кун Т С », «Малкей М », «Тулмин С Э », «Гонсет Ф », «Флек Л », «этос науки», «парадигма», «нормальная наука» // «Современная западная мысль» Изд «Академический проект» под ред В В Васильева и др (в печати)
Особенности семантики языков программирования // Вестник Московского университета Серия 7 Философия №6 М Изд-во МГУ, 2007
Отпечатано в учебной типографии философского факультета Москва. ГСП-1 Ленинские горы МГУ, 1-й корпус гуманитарных факультетов Тираж 100 экз Подписано в печать 14 03 2008
Оглавление научной работы автор диссертации — кандидата философских наук Казакова, Анастасия Евгеньевна
Введение.
Глава 1. Развитие концепций языков программирования.
1.1. Определение понятия «язык программирования».
1.1.1. ' Программирование первых вычислительных машин.
1.1.2. Программирование как рассуждение.
1.1.3. Программирование как создание алгоритма.
1.1.4. Программирование как моделирование программ.
1.2. Практические основания развития языков программирования.
1.2.1. Зависимость языков программирования от архитектурных особенностей конкретного вычислителя.
1.2.2. Создание «предметно-ориентированных» языков программирования.
1.2.3. Разработка «универсальных» языков.
Глава 2. Практические реализации языков программирования.
2.1. Методы реализации языков программирования.
2.1.1. Практические решения.
2.1.2. Проблемы реализации языков программирования.
2.2. Исследования в области языков программирования, направленные на преодоление проблем реализации.
2.2.1. Становление дисциплины программирования.
2.2.2. Теория абстрактной машины А. Тьюринга.
2.2.3. Теория порождающей грамматики Н. Хомского.
Глава 3. Методологические основания для выделения парадигм программирования.
3.1. Исследования синтаксиса и семантики языков программирования.
3.1.1. Метод описания синтаксиса языков программирования - «форма Бэкуса-Наура».
3.1.2. Основные подходы к описанию семантик языков программирования.
3.2. Парадигмы программирования.
3.2.1. Понятие «парадигма» Т.С. Куна и «парадигмы» программирования.
3.2.2. Теория языков программирования как становящаяся техническая теория.
Введение диссертации2008 год, автореферат по философии, Казакова, Анастасия Евгеньевна
Актуальность темы исследования.
В свете проблем, дискутирующихся в рамках современной аналитической философии, а также когнитивной психологии и области искусственного интеллекта о соотношении языка и мышления, актуальным представляется исследование логико-методологических оснований искусственных языков, созданных и успешно используемых для управления ходом вычислительных процедур, реализуемых вычислительными машинами.
В рамках философских концепций XX века, в частности представленных аналитической и герменевтической традициями, центральное место занимали вопросы о выразительных и познавательных возможностях естественного языка. Множество методологических исследований было посвящено анализу языка той или иной науки. Множество концепций языка представлено лингвистическими и языковедческими исследованиями. Это свидетельствует о многообразии подходов к пониманию сущности языка как такового. В рамках философской традиции язык рассматривается как средство выражения человеческих мыслей, как инструмент фиксации знаний о действительном мире во времени, как способ структурирования, хранения и передачи знаний, как аналитический метод, и даже как модель, порождающая мир. Каждая концепция языка раскрывала какую-то из его особенностей и предлагала собственную трактовку отношения языка к мышлению, с одной стороны, и к действительному миру, с другой.
Для аналитической традиции характерно рассмотрение языка как метода. Основную интуицию этой традиции Е.Д. Смирнова1 относит к
1 Смирнова Е.Д. Логика и философия. — М.: РОССПЭН, 1996. Стр. 29 4
Э.В. деКондильяку: «.искусство рассуждать сводится к хорошо построенному языку. Это соображение относительно абстрактных и общих идей доказывает, что их ясность и точность зависят исключительно от порядка, в котором мы создали наименования классов, и что, следовательно, для определения этого вида идей есть только одно средство— хорошо л построить язык ». Тот факт, что искусственные языки можно рассматривать как модели фрагментов естественного языка , дополняется специфическими управленческими и информационными задачами, которые также стимулировали появление языков программирования. Данное методологическое исследование может показать как осуществляется эта программа не столько по отношению к рассуждениям, потому что это было бы в компетенции логики, сколько по отношению к специальному языку вычислений, позволяющему решать задачи, которые в результате определенной интерпретации могут быть не только вычислительными.
Программирование — деятельность по созданию программ для вычислительных устройств посредством специальных языков или систем программирования. Теоретические основы этой деятельности в полной мере соответствуют характерным чертам технических дисциплин. «Фундаментальные исследования в технических науках часто отождествляются с теоретическими исследованиями в технике, которые находятся между математическими, естественнонаучными теориями, с одной стороны, и инженерной практикой — с другой, и даже включают в себя элементы дедуктивно-аксиоматических теорий4». Появление неклассических научно-технических дисциплин отмечается как новая тенденция в развитии технических наук. Такие дисциплины появляются «в результате широкого научного движения (в частности, системного), конкретизации и доработки
2 Кондильяк Э.В. де. Об искусстве рассуждать // Сочинения в трех томах. -— М.: Мысль, 1983. T.3, стр. 224
3 Смирнова Е.Д. Логика и философия. — М.: РОССПЭН, 1996. Стр. 31
4 Философия техники и технических наук. // Современные философские проблемы естественных, технических и гуманитарных наук: учебник для аспирантов и соискателей ученой степени кандидата наук / под общ. ред. д-ра филос. наук, проф. B.B. Миронова. — М.: Гардарики, 2006. Стр. 407 общих методологических, например, системных понятий и представлений, а также обобщения практики решения определенного класса научно-технических задач5». Эти дисциплины не могут быть отнесены ни к естественным, ни к техническим, ни к общественным наукам, они носят комплексный, междисциплинарный характер. Теоретические основания программирования вычислительных устройств можно причислить к такого рода дисциплинам.
Данное исследование черпает материал из области, которая в современной научной литературе называется «Computer Science» (иногда «Computer Sciences») — «компьютерная наука» (науки) или «наука о компьютерах». В рамках компьютерных наук возникли новые прикладные направления научных исследований, такие как вычислительная математика, вычислительная физика, вычислительная химия. Компьютерные науки явились результатом синтеза логических, математических, физических, лингвистических, психологических и других дисциплин. Уточнение смысла некоторых из этих вопросов развивается в направлении проблем, которые мы назвали бы философскими. Например, проблема соотношения материального и идеального в компьютерной науке принимает вид вопроса о физических границах реализации идеальных процессов с помощью материальных устройств. На современном научном языке это направление называют проблемой создания искусственного интеллекта (Artificial Intelligence). Эта проблема тесно связана с проблемой соотношения языка и мышления. Она выражается в вопросах о влиянии языка на сознательные структуры, о том, как возможно познание мышления с помощью языка, о границах формализации языков, о соотношении естественных и искусственных языков. Ряд других проблем относятся к области философских оснований математики и логики, и связаны с вопросами о категоризации мыслительных
5 Философия техники и технических наук. // Современные философские проблемы естественных, технических и гуманитарных наук: учебник для аспирантов и соискателей ученой степени кандидата наук / под общ. ред. д-ра филос. наук, проф. В.В. Миронова. — М.: Гардарики, 2006. Стр. 418 6 абстракций путем упорядочивания, сравнения, вычисления и других операций над абстрактными объектами. В компьютерной науке эти вопросы приобретают вид рассуждений о соотношении дискретности и непрерывности, парадоксах теории множеств, пределов вычислимости и алгоритмизации.
Основные принципы программирования появились в результате специфицирования вычислений для достижения частных целей. Частные задачи программирования показали, что создание сложных компьютерных систем требует значительных (инженерных по происхождению) изменений в логическом аппарате, который изначально представляется простым.
По мнению Герберта Саймона, изучение систем в науке и технике определено потребностью в анализе сложности. На наш взгляд некоторые особенности сложности таких организованных систем, как вычислительные машины, запечатлены в структуре языков программирования. «Благодаря абстрактному характеру и общности языка вычислительных машин как устройств для манипуляции символами, цифровые вычислительные машины существенно расширили диапазон систем, поведение которых поддается имитации. Такую имитацию мы теперь обычно называем «моделированием» и стараемся разобраться в имитируемой системе, изучая поведение модели в разнообразных модельных и имитационных средах6».
Языки программирования являются средством представления знания для компьютерных систем. Они предлагают концептуальные средства представления и возможности моделирования, приспособленные к решению конкретных задач. Многообразие конструкций этих языков, сложившееся за довольно короткий по историческим меркам период — около шестидесяти лет— является благотворной почвой для размышлений о вопросах логико-философского и методологического характера, связанных с формализованными языками. Дело в том, что одна и та же задача может быть f 6 Саймон Г. Науки об искусственном: пер. с англ. Изд. 2-е. — М., Едиториап УРСС, 2004. Стр. 23. 7 н решена различными программными средствами. Основанием этого различия служит не только модель вычислительного устройства, на котором будет выполнен алгоритм, но и язык, средствами которого этот алгоритм описан. «Эффективность машинных алгоритмов во многом зависит от используемых языков и систем программирования7».
Сказанное выше позволяет говорить о значительной роли, которую теория языков программирования играет в методологии компьютерных наук, что актуализирует в рамках философии техники задачу специального исследования, посвященного анализу становления этой теории.
Степень разработанности темы исследования.
Теоретические исследования в области языков программирования представляют собой работы по упорядочению и систематизации множества этих языков. Примерами таких исследований могут служить работы о профессора, академика РАН В.Э. Вольфенгагена (МИФИ, ЮрИнфо), профессора Н.Н. Непейводы9 (УдГУ, НГУ), С.С. Лаврова10. Эти ученые отмечают, что работу по типизации языков программирования приходится осуществлять чуть ли не каждому преподавателю, подготавливающему вводную лекцию к курсу программирования. Это позволяет говорить о программировании как становящейся, развивающейся области науки и техники. Подобные исследования ведутся во многих университетах и научно-исследовательских организациях мира, так или иначе связанных с областью компьютерных наук.
7 Теслер Г.С. Место и роль алгоритмического базиса в решении проблемы производительности // Математические машины и системы. 1997. № 1, стр. 25 - 33.
8 Вольфенгаген В.Э. Конструкции языков программирования. Приемы описания. — М.: АО «Центр ЮрИнфоР», 2001.
9 Непейвода Н.Н. Стили и методы программирования. — М.: «Интернет-университет информационных технологий», 2005
10 Лавров С.С. Основные понятия и конструкции языков программирования. — М.: Финансы и статистика, 1982.
Основная масса работ, связанных с развитием языков программирования, как правило, имеет прикладной характер, то есть описывает строение языков и конкретную сферу их применения. Исследования в области математики, больше связанны с проблемами вычислимости и алгоритмизации. Это направление имеет точки пересечения с проблемой формальной записи в виде какого-то определенного языка и сводится к изучению формализованных языков как способа выражения и реализации вычислительных и алгоритмических процедур.
Фундаментальными работами в области языков программирования принято считать «Искусство программирования» Д.Кнута11, «Дисциплина
1 ? программирования» Э. Дейкстры , «Алгоритмы + структуры данных = программы» Н. Вирта13. Эти ученые являются лауреатами премии Тьюринга14 и разработчиками^ наиболее широко известных языков программирования. Эти работы послужили основными источниками для данного исследования.
Основные работы, посвященные анализу эволюции языков программирования — это работы М. Бен-Ари15, Т. Пратта16 и Р.У. Себесты17. К этому же типу относятся «Методы программирования» Б. Мейера и
11 Donald Е. Knuth. The Art of Computer Programming, Volumes 1-4, Addison-Wesley Professional, 1997 (1-st ed. — 1968) //Русский перевод: Кнут Д. Искусство программирования. — М., Вильяме, 2007
12 Е. Dijkstra. A Discipline of Programming. Prentice-Hall Series in Automatic Computation, 1976 // Русский перевод: Дейкстра Э. Дисциплина программирования. 1-е изд. — М.: Мир, 1978. стр. 275
13 N. Wirth. Algorithms + Data Structures = Programs. Prentice-Hall, Inc., Englewood Cliffs, 1975 // Русский перевод: Вирт H. Алгоритмы + структуры данных = программы. — М., "Мир", 1985
Самая престижная премия в области информатики, ежегодно вручаемая Ассоциацией вычислительной техники за выдающийся научно-технический вклад в этой области.
15 М. Ben-Ari. Principles of Concurrent Programming. Prentice-Hall, Englewood Cliffs, NJ. 1982 // Русский перевод: Бен-Ари M. Языки программирования. Практический сравнительный анализ. — М.: Мир, 2000.
1бПратт Т. Языки программирования: разработка и реализация.— Пер. с англ. Под ред. Ю.М. Баяковского. — М.: Мир. 1989
17 Robert W. Sebesta. Concepts of Programming Languages, The Benjamin/Cummings Publishing Company, Inc, 1993 // Русский перевод: СебестаР.У. Основные концепции языков программирования. — М., Спб., Киев: Вильяме, 2001
К. Бодуэна18, «Эволюция языков программирования» Г. Грогоно19. Они также
20 послужили материалом для данной работы .
Другие работы представляют собой практические пособия по использованию какого-либо из языков программирования, точнее одной из его версий, и, по сути, являются учебными руководствами.
Все эти исследования имеют точки пересечения, поскольку преследуют цель — систематизировать множество знаний о языках программирования, что определяет становление теории программирования как научной дисциплины.
Объектом данного исследования являются концепции языков, предназначенных для программирования вычислительных устройств.
Предмет исследования — развитие языков программирования как средств выражения и реализации вычислительных и алгоритмических процедур, осуществляемых посредством вычислительной машины.
Цель данного исследования — выявить методологические основания развития языков программирования и определить этапы становления теории языков программирования как технической теории.
Для достижения этой цели требуется решить следующие задачи:
1. Выделить концептуальные представления о языках программирования, послужившие основанием для формирования методологической базы теории языков программирования, а также очертить значимые этапы их эволюции.
18 Мейер Б., Бодуэн К. Методы программирования: в 2-х томах. Т.1., пер. с франц. Ю.А. Первина. — М.:Мир. 1982
19 Grogono G. The Evolution of Programming Languages. Department of Computer Science, Concordia University, Montreal, Quebec. 1999.
20 Материалом послужили также работы Ellis Horowitz, Fundamentals of Programming Languages (Rockville, Maryland: Computer Science Press, 1983) и Bruce MacLennan, Principles of Programming Languages: Design, Evaluation, and Implementation (London: Oxford University Press, 1987).
2. Определить задачи, стимулирующие развитие языков программирования, и выделить тенденции развития методологических средств, обеспечивающих решение этих задач.
3. Определить направление развития теоретических исследований в области языков программирования и выявить специфические характеристики становления теории языков программирования как научно-технической теории.
В качестве общетеоретических методов исследования использован системный подход, а также методы структурного и функционального анализа, определенные спецификой искусственных языков. Методологической основой исследования является концепция развития технической теории, разработанная В.Г. Гороховым и представленная в работе «Философия науки и техники21».
Положения, выносимые на защиту.
1. Концепции языков программирования высокого уровня складываются и развиваются в результате стремления разработчиков снизить «семантический разрыв», лежащий между языком описания работы вычислительного устройства в его конкретной (физической) реализации и языком, на котором осуществляется постановка задачи, зачастую представляющем смесь естественного языка и языка математики.
2. Специфика языков программирования как формализованных языков, служащих для выражения и реализации вычислительных и алгоритмических процедур, заключается в возможности выделения различных уровней организации данных и обусловлена особенностью значения выражений языка,
21 Степин В. С., Горохов В. Г., Розов М. А. Философия науки и техники. — М.: Гардарики, 1999
11 представляющих собой все предыдущие алгоритмы вычислений, существующие по отношению к конкретной среде реализации.
3. В качестве основной тенденции развития языков программирования можно выделить поиск таких методологий программирования, которые позволили бы наиболее точно отразить логику человеческих действий, ориентированных на решение задач, относящихся к различным предметным областям.
4. Языки программирования выполняют, с одной стороны, роль искусственных языков, в которых запечатлены чисто математические методы, с другой стороны, сами представляют собой аналитический метод по отношению к языку заданной предметной области, задачи которой предполагается решить посредством вычислительной машины.
5. Развитие теоретических исследований в области языков программирования определено стремлением повысить выразительные возможности языковых конструкций посредством реализации средств создания предельно абстрактных математических объектов.
Новизна предложенного исследования может быть суммирована в следующих положениях:
1. Теория языков программирования развивается согласно особенностям, определенным концепцией развития технических теорий В.Г. Горохова, выбранной в качестве методологии для данного исследования.
2. Специфика теории языков программирования как технической теории заключается в том, что в процессе аппроксимации результатов, полученных в области исследования формальных языков, в частности, языка математики, определяются новые задачи, решение которые требует новых исследований в области гуманитарных наук, направленных на изучение естественных языков, с целью определения связи познавательных и мыслительных процедур, значимых для управленческих и информационных процессов.
3. Междисциплинарный характер исследований, который определяется в ходе становления теории языков программирования, можно объяснить поиском решений, обеспечивающих возможность моделирования «поведения» любых искусственных и даже некоторых естественных систем.
Теоретическое и практическое значение диссертации.
Данное исследование предлагает анализ развития языков, созданных для управления вычислительной машиной, что имеет большое значение для понимания методологических основ вычислительной техники, поскольку теория языков программирования находится на стадии становления. В диссертации изложены основные проблемы становления теории языков программирования как технической теории, связанные с процедурой формализации, представляющей собой особый вид мыслительной и познавательной деятельности. Таким образом, материал диссертации может служить основой для дальнейших исследований в области философии техники и методологии науки.
Апробация диссертации происходила в рамках курса «Телекоммуникации и компьютерные технологии», читаемого автором начиная с 2005 г. на философском факультете МГУ им. М.В. Ломоносова, а также при разработке мультимедийного методического пособия для обязательной общеобразовательной дисциплины «Математика и информатика» (2006 г). Кроме этого, в 2007 г. автором была разработана программа и учебно-методический комплекс для курса «Информатика»,
13 входящего в федеральный компонент программ инновационного типа по философии. Основные результаты исследования были изложены на научных конференциях «Философия искусственного интеллекта» (МИЭМ, 2005 г), «Ломоносов-2005» (МГУ), на IV Российском философском конгрессе «Философия и будущее цивилизации» (МГУ, 2005 г), «Философия математики» (МГУ, 2007).
Основное содержание и результаты диссертации отражены в следующих публикациях соискателя:
1. Гуманитарные и естественнонаучные предпосылки к созданию искусственного интеллекта. // Философия искусственного интеллекта. Материалы всероссийской международной конференции. — М.: ИФ РАН, 2005.
2. Некоторые методологические аспекты программирования автоматических вычислений // Философия математики. Материалы международной научной конференции 15-16 июня 2007 года. — М., Изд. Савин С.А., 2007.
3. Энциклопедические статьи «Кун Т.С.», «Малкей М.», «Тулмин С.Э.», «Гонсет Ф.», «Флек Л.», «этос науки», «парадигма», «нормальная наука» // «Современная западная мысль», Изд. «Академический проект» под ред. В.В. Васильева и др. (в печати).
4. Особенности семантики языков программирования. // Вестник Московского университета. Серия 7. Философия. №6. — М.: Изд-во МГУ, 2007.
Структура диссертации.
Диссертация состоит из введения, трех глав, каждая из которых включает 2 параграфа, заключения и библиографии. Текст каждой главы
Заключение научной работыдиссертация на тему "Методологические основания развития языков программирования"
Заключение
Герман Вейль описывает процесс абстрагирования следующим образом. Первый шаг, предшествующий математическому анализу, — «мыслить конкретно». Второй шаг — «шаг абстракции» — когда интуитивные представления заменяются чисто знаковой конструкцией. «Когда интуитивная картина уступает место знаковой конструкции, неспециалист перестает понимать математика. <. .> Математика интересует не применение схемы к тому или иному многообразию, а только схема сама по себе, лишенная каких бы то ни было неясностей229».
Программиста, в отличие от математика, в первую очередь интересует возможность применения языка программирования для решения конкретной, стоящей перед ним задачи, связанной с представлением и преобразованием данных, принадлежащих какой-либо предметной области. То есть принципиальным для него оказывается как раз выбор и применение содержащейся в языке «схемы к тому или иному многообразию».
Объектом данного исследования являлись искусственные языки, предназначенные для программирования вычислительных устройств. Предметом исследования служила история развития этих языков в качестве средств выражения и реализации вычислительных и алгоритмических процедур. Целью диссертации было выявление методологических оснований развития языков программирования и определение этапов становления теории языков программирования как технической теории.
Структура диссертации соответствует логике решаемых в ходе исследования задач.
В первой главе данной работы были выделены концептуальные представления о языках программирования. Эти концепции в дальнейшем
229 Вейль Г. Математическое мышление. Пер. с англ. и нем. Составитель Ю.А. Данилов. Под ред. Б.В. Бирюкова и А.Н. Паршина. — М., Наука ,1989. Стр. 9-11
127 послужили основанием для формирования методологической базы теории языков программирования.
В параграфе 1.1. —«Определение понятия «язык программирования» — показано, как изменялось понятие «язык программирования» в теоретических работах, написанных преимущественно разработчиками этих языков, выделено четыре подхода к определению понятия «язык программирования»:
1. Язык программирования как средство трансляции математических формул в последовательность машинных команд230. Такой подход определяет деятельность программиста как написание математических формул.
2. Язык программирования как средство обработки информации231. Этот подход определяет деятельность программиста как построение рассуждений, работу с символьными, а не числовыми конструкциями, является основным для логических языков, появившихся впоследствии.
3. Язык программирования как средство описания алгоритма . Такой подход отражает основную идею программирования как деятельности по разработке алгоритмов.
4. Язык программирования как средство моделирования программ233. Этот подход дает основание считать деятельность программиста конструированием программ.
Отмечается, что четвертый подход имеет принципиальное отличие от первых трех, появившихся примерно в одно время. Это отличие выражается
230 Впервые реализован в языке «FORTRAN» (FORmula TRANslating System — 1954 г.)
231 Первая публикация описания этой концепции принадлежит Джону МакКарти: MacCarthy, J. "Recursive Function of Symbolic Expressions and Their Computation by Machine, Part I." Commun. ACM, Vol. 3, №4, pp. 184-195.
232 Впервые реализован в языке ALGOL 58 (ALGOrithmic Language— 1958 г.)
233 Идея впервые была представлена в языке SIMULA I — Дал У.-И., Мгархауг Б., Нгогорд К., СИМУЛА 67: Универсальный язык программирования. — М.: Мир, 1969. Стр. 9. (англ. Версия — Norwegian Computing Center, Oslo, 1968) как переход от понимания языка программирования в качестве «набора правил для написания программ, которые являются всего лишь последовательностями символов234» к пониманию языка программирования как «механизма абстрагирования ». Эти подходы определили направление дальнейших работ по созданию языков программирования.
В параграфе 1.2. — «Практические основания развития языков программирования» — осуществлено описание этапов развития языков программирования.
Первый этап — появление языков «высокого уровня». «Высота уровня» определяется как снижение степени зависимости конструкций языка описания программы от аппаратной реализации конкретного вычислителя.
Следующий этап — появление так называемых «предметно-ориентированных» языков программирования, то есть языков, созданных ради решения задач, принадлежащих определенной предметной'области.
Третий этап (продолжается по настоящий момент) — создание «универсальных» языков, причем «универсальность» в этом контексте понимается, и как обеспечение средств решения задач, принадлежащие различным предметным областям, и как независимость от архитектуры вычислительной машины236.
Таким образом, концепции языков программирования высокого уровня складываются и развиваются в результате стремления разработчиков снизить «семантический разрыв», лежащий между языком описания работы вычислительного устройства в его конкретной (физической) реализации и языком, на котором осуществляется постановка задачи, зачастую представляющем смесь естественного языка и языка математики.
234 Бен-Ари М., Языки программирования. Практический сравнительный анализ. — М.: Мир, 2000.
Стр. 43.
235 Там же, стр. 9.
236 В литературе по программированию иногда называется «интерплатформенностью».
Итоги первого и второго параграфа главы позволяют сделать вывод о том, что развитие представлений о языках программирования на эмпирическом уровне определяется развитием вычислительной техники. На теоретическом уровне изменения в представлениях о языках программирования определяются выбором формы управления вычислительными устройствами.
Во второй главе диссертации были определены практические задачи, стимулирующие развитие теории языков программирования, и выделены тенденции развития методологических средств, обеспечивающих решение этих задач. Теоретические знания в технических науках имеют значение в первую очередь для инженерной практики. Поэтому предметом данной главы становится описание существующих практических решений, связанных с реализацией языков программирования. Во втором параграфе выявляются проблемы, обусловившие необходимость, теоретических разработок, направленных на совершенствование методов решения этих задач.
В параграфе 2.1,—«Методы реализации языков программирования» — дается описание основных- практических решений, реализующих языки программирования. В технических науках задача реализации выражается как проблема интерпретации и эмпирического обоснования правил перехода от одних модельных уровней в составе теории к другим. Реализовать язык программирования — значит не только обеспечить всю совокупность технических средств для написания» программы, но и гарантировать корректность ее выполнения. Реализация осуществляется за счет создания так называемых системных программ, основным назначением которых является трансляция (перевод) текста, составленного на языке программирования «высокого уровня», в последовательность машинных команд — компилятора и интерпретатора. Процедура перевода осуществляется следующим образом. Текст программы подвергается лексическому, синтаксическому и, в наиболее современных языках, семантическому разбору. В основу лексического и синтаксического разбора должны быть положены правила определения «правильных» последовательностей и комбинаций лексем, а, следовательно, способ определения принадлежности этих лексем конкретному языку. Исходная программа, как правило, имеет не линейную структуру, а состоит из нескольких связанных между собой модулей (речь идет, конечно, о серьезных, сложных программах). Это обусловлено наличием нескольких уровней представления данных, что в процессе конструирования программы обеспечивает построение абстракций высокого уровня. Для определения правильности интерпретации типов данных и производимых над ними операций необходим семантический анализ. Семантический анализ предполагает наличие формализованного способа определения правил формирования и различения абстракций, содержащихся в конкретном языке программирования. Именно это вызывает наибольшие трудности при реализации языков программирования и определяет основную проблемную область для теоретических исследований.
В1 данном параграфе проблемы формулируются в виде требований, предъявляемых к языкам программирования. Наиболее существенные из них с точки зрения развития теории языков программирования — ортогональность (определяет способ представления абстракций процессов и данных в языках программирования) и надежность (определяет необходимость доказательства выполнимости программы, написанной на языке). Многообразие языков программирования объясняется многообразием решений, позволяющих реализовать эти требования.
В параграфе 2.2. — «Исследования в области языков программирования, направленные на преодоление проблем реализации» — представлены основные теоретические концепции, определившие дальнейший ход исследований в области разработки языков программирования. Поиск оптимальной реализации языка программирования провоцирует поиск теорий,в сфере фундаментальных исследований языков. Научно-исследовательские работы, направленные на анализ и формализацию процесса конструирования реализаций языков, заключаются в основном в аппроксимации результатов теории автоматов, а также теории построения формальных языков.
Проблемы, связанные с практической реализацией языков программирования требуют создания специальной теоретической базы. Формирование такой теоретической базы осуществляется в процессе становления программирования как дисциплины, а также за счет привлечения теорий, относящихся к области фундаментальных разработок в сфере языков.
В качестве, примера таких теорий дается описание абстрактной машины А. Тьюринга и> порождающей грамматики Н. Хомского.
Эти концепции повлияли также и на определяющую для программирования деятельность, а именно на- формализацию поставленной задачи, поскольку описание функционирования какой-либо системы, относящейся к определенной предметной области, в первоначальном виде представляет собой текст на естественном языке.
Специфика языков программирования как формализованных языков, заключается в том, что эти языки выполняют, с одной стороны, роль искусственных языков, которые позволяют запечатлеть математические методы, с другой стороны, сами представляют аналитический метод по отношению к языку заданной предметной области, задачи которой предполагается решить посредством вычислительной машины. Это обеспечивается, за счет выделения различных уровней организации данных, что обусловлено значениями выражений языка, представляющими собой все предыдущие алгоритмы вычислений, существующие по отношению к конкретной среде'реализации.
Третья глава посвящена анализу современных теоретических исследований в области языков программирования и определению специфических черт теории языков программирования по отношению к научным теориям.
В параграфе 3.1. — «Исследования синтаксиса и семантики языков программирования» — представлен обзор основных концепций анализа синтаксиса и семантики языков программирования, как поиска методов формального определения языков программирования. На данный момент наиболее проработанным среди них является метод описания синтаксиса — «форма Бэкуса-Наура», который положен в основу создания атрибутивных грамматик. Принято считать, что расширенная «форма Бэкуса-Наура» является основой атрибутивной грамматики, содержащей в себе так называемую статическую семантику. Статическую семантику относят к классу операционных237, поскольку смысл конструкциям языка придается с точки зрения их влияния на функции переходов из состояния в состояние абстрактного вычислителя. Более совершенными, но менее проработанными на данный момент являются аксиоматические и денотационные семантики. Аксиоматические семантики сосредотачивают свое внимание на выборе и использовании аксиом и правил вывода, которые обеспечивают универсум рассуждения в процессе составления программы. В денотационных
238 семантиках операционное определение заменяется денотационным , чем обеспечивается возможность еще более глубокого анализа выражений конкретного языка программирования. К денотационным семантикам также относят алгебраические семантики, в первую очередь направленные на категоризацию алгебраических понятий и операций. Подходы к построению семантик оказываются тесно связанными с подходами к определению понятия «язык программирования».
237 Выделение семантических теорий приводится по: Вольфенгаген В.Э. Конструкции языков программирования. М АО «Центр ЮрИнфоР» 2001. стр. 77-80.
238 Денотат в данном случае понимается как идеализированный математический объект, посредством высокой степени абстракции представляющий (моделирующий) другие объекты.
133
Исследование подходов к построению семантики позволяет сделать вывод о часто не учитываемой, но очень существенной особенности языков, программирования, а именно о том, что семантика этих языков должна анализироваться как по отношению к вычислителю, так и по отношению к человеку, работающему над созданием программ. Выражения, записанные с помощью какого-либо языка, должны быть осмыслены, прежде всего, человеком, их создающим. Эта особенность стала ощутима в момент, когда человеку для того, чтобы управлять вычислительной машиной, перестало быть нужным подробное знание об организации аппаратной, составляющей устройства, для которого предназначается программа. Это было одной из первостепенных задач, для решения которых разрабатывались языки «высокого уровня». Поскольку формальное описание выражений языка программист получает, обратившись к спецификации, в которой все значения конструкций конкретного языка определяются нормативно, выполнимость написанной им программы может быть определена только в процессе ее тестирования и отладки, т.е. на уровне практической реализации.
В параграфе 3.2. — «Парадигмы программирования» — выделяются подходы к определению парадигмальных оснований развития языков программирования. Сделано предположение относительно того, что способы построения семантик языков программирования оказывают влияние на выделение парадигм. «Парадигма», как она определяется Т.С. Куном239, представляет совокупность концептуальных, ценностных и практических ориентиров, определяющих деятельность научного (интеллектуального) сообщества. Парадигмы языков программирования выделяются на основании
240 методологии, определяющих «стиль мышления» , в процессе создания программ. В специальной литературе, посвященной этой теме, используются термины «стиль программирования», «концепции программирования»,
239 Кун Т.С. Структура научных революций. — М.: ACT, 2001
240 Непейвода H.H. Стили и методы программирования. М.:«Интернет-Университет Информационных Технологий», 2005 методологии программирования». В некоторых современных англоязычных источниках встречается термин «философия программирования241». Все эти термины, призваны подчеркнуть разницу в способах конструирования программ на основании различения применяемых методов. Методологии, как только они определяются в рамках какого-то конкретного языка, в скором времени становятся основанием для расширения и усовершенствования других ранее созданных языков, что характерно для развития технических теорий.
Тесная связь семантик, положенных в основу разработки языков-программирования, с методологиями может быть объяснена тем, что разработчик программы в процессе формализации задачи полагает некоторый способ рассуждения. Этот способ, в том числе, определяется конструкциями выбранного им языка. Если рассматривать текст программы по аналогии с рассуждением, то можно говорить о следующих допущениях, реализованных в языках программирования. Алгоритм, определяющий ход выполнения программы, можно описывать как совокупность действий (операций). Такой способ описания алгоритмов реализован в языках, называемых в специальной литературе декларативными. Эта методология лежит в основе языков, которые ориентированы на описание последовательности состояний вычислителя (представленного абстрактно) и связанных с «действием» перехода из одного состояния в другое. Текст программы такого рода представляет собой, прежде всего, описание действий, необходимых для реализации вычислений. Предметную область, соответствующую конкретной задаче, можно описывать не только, как совокупность последовательных действий, но и как совокупность отношений, заданных функционально. Такой подход определяет основу для развития функционального программирования. Широкое применение этого подхода определяется накопившимся со временем множеством уже
241 Grogono G. The Evolution of Programming Languages. Department of Computer Science. Concordia University. Montreal, Quebec. 1999. описанных средствами какого-то языка алгоритмов, вычисляющих ту или иную функцию. Существенными для этой методологии оказываются, прежде всего, отношения, заданные между классами абстрактных объектов, использующихся при составлении алгоритма. Конструирование таких абстрактных объектов, которым в качестве определения задаются свойства их функционирования, реализуется в объектно-ориентированной методологии. Это обеспечивает возможность разрабатывать программу, выполнение которой не только не зависит от аппаратно-программной реализации конкретного вычислителя, но и позволяет формализовать задачи, относящиеся к различным предметным областям. В основном именно эта методология развивается и совершенствуется в настоящий момент, и определяет направление специальных теоретических исследований.
Таким образом, на основании анализа употребления понятия «парадигма программирования» в теории языков программирования, в соответствии со значением термина «парадигма», определенным в результате исследования научных теорий Т.С. Куном, выявляются специфические черты теории языков программирования как технической теории.
В результате в третьей главе диссертации было определено направление развития теоретических исследований в области языков программирования и выявлены специфические характеристики становления теории языков программирования как научно-технической теории. Развитие теоретических исследований в области языков программирования определено стремлением повысить выразительные возможности языковых конструкций посредством реализации средств создания предельно абстрактных математических объектов. В качестве основной тенденции развития языков программирования отмечается поиск таких методологий программирования, которые позволили бы наиболее точно отразить логику человеческих действий, ориентированных на решение задач, относящихся к различным предметным областям.
Было показано, что теория языков программирования развивается согласно особенностям, определенным концепцией развития технических теорий В.Г. Горохова, выбранной в качестве методологии для данного исследования. Специфика теории языков программирования как технической теории заключается в том, что в процессе аппроксимации результатов, полученных в области исследования формальных языков, в частности, языка математики, определяются новые задачи, решение которые требует новых исследований в области гуманитарных наук, направленных на изучение естественных языков, с целью определения связи познавательных и мыслительных процедур, значимых для управленческих и информационных процессов. Междисциплинарный характер исследований, который определяется в ходе становления теории языков программирования, можно объяснить поиском решений, обеспечивающих возможность моделирования «поведения» любых искусственных и даже некоторых естественных систем.
Данное исследование предлагает анализ развития языков, созданных для управления вычислительной машиной, что имеет большое значение для понимания методологических основ вычислительной техники, поскольку теория языков программирования находится на стадии становления. В диссертации изложены основные проблемы становления теории языков программирования как технической теории, связанные с процедурой формализации, представляющей собой особый вид мыслительной и познавательной деятельности. Таким образом, материал диссертации может служить основой для дальнейших исследований в области философии техники и методологии науки.
Список научной литературыКазакова, Анастасия Евгеньевна, диссертация по теме "Философия науки и техники"
1. Анисимов A.M., Абстрактная вычислимость и язык программирования АВТ. // Логические исследования. Вып. 3, М.: Наука. 1995.
2. Апокин И. А., Майстров JI. Е. История вычислительной техники: от простейших счет, приспособлений до сложных релейных систем // М.: Наука, 1990.
3. Ахо А., Сети Р., Ульман Д., Компиляторы. Принципы, технологии, инструменты. Киев: Вильяме, 2003.
4. Бар-Хиллел, И. Некоторые новые результаты в теоретической лингвистике. // Математическая логика и ее применения. Сборн. Ст., под ред. А.И. Мальцева. М.: Мир. 1965.
5. Бен-Ари М. Языки программирования. Практический сравнительный анализ. — М.: Мир, 2000.
6. Болотов А.Е., Бочаров В.А., Горчаков А.Е. и др. Логика и компьютер. М.: Наука, 2004.
7. Большаков Е. И. Краткая история корпорации IBM // История науки и техники, 2002.
8. Бочаров В.А., Маркин В.И. Основы логики. Учебник. — М.: Космополис, 1994.
9. Васильев В. В. Мозг и сознание: выходы из лабиринта. // Вопросы философии, 2006, № 1.
10. Вейль Г. Математическое мышление. Пер. с англ. и нем. Составитель Ю.А. Данилов. Под ред. Б.В. Бирюкова и А.Н. Паршина. — М., Наука, 1989.
11. Вигнер Е. Этюды о симметрии. — М.: Мир, 1997.138
12. Винер Н. Я математик. // Творец и будущее: пер. с англ. - М.: ООО «Изд. ACT», 2003
13. Вирт Н. Новая наука, от рождения до зрелости. // Речь на праздновании годовщины факультета компьютерных наук, ЕТН Zurich, 19 октября 1988г. Пер. А.Деревянко, 2006
14. Вирт Н., Алгоритмы + структуры данных = программы. М., "Мир", 1985
15. Вирт Н. Систематическое программирование. Введение. М.: «Мир», 1977.
16. Виттих В.А., Коварцев А.Н., Кораблин М.А. Имитация втоматизированных систем с использованием концепции состояний // М.: Известия АН СССР. Техническая кибернетика. 1981. №4, стр. 86-93.
17. Войшвилло Е.К., Дегтярев М.Г. Логика как часть теории познания и научной методологии. М.: Наука, 1994
18. Вольфенгаген В.Э. Конструкции языков программирования. Приемы описания. — М.: АО «Центр ЮрИнфоР», 2001.
19. Гинзбург С. Математическая теория контекстно-свободных языков. — М.: Мир, 1970.
20. Дал У.-И., Мюрхауг Б., Нюгорд К., СИМУЛА 67: Универсальный язык программирования. — М.: Мир, 1969.
21. Дейкстра Э. Дисциплина программирования. 1-е изд. — М.: Мир, 1978.
22. Дейкстра Э. Заметки по структурному программированию. // Дал У., Дейкстра Э., Хоор К., Структурное программирование. пер с англ. Зеленецкого С.Д. - М.: Мир. 1975
23. Ершов Ю.Л., Палютин Е.А., Математическая логика. М.: Наука. 1979.
24. Иноземцев В.А., Некоторые аспекты развития и классификации языков представления знаний. // Логико-философские исследования. Вып. 1., — М.: ВИНИТИ, 1989.
25. Карнап Р. Значение и необходимость. Исследования по семантике и модальной логике. Биробиджан: ИП «ТРИВИУМ», 2000.
26. Карри Г., Некоторые логические аспекты грамматической структуры. // Новое в лингвистике. Вып. IV. М.: Прогресс. 1965.
27. Кассирер Э., Философия символических форм. Том 1. Язык. М.; СПб.: Университетская книга, 2001.
28. Кнут Д., Искусство программирования. Т. 1-5; — М., изд-во. «Вильяме». 2006-2008
29. Кондильяк Э.В. де. Об искусстве рассуждать // Сочинения в трех томах. — М.: Мысль, 1983.
30. Кун Т.С. Структура научных революций. — М.: ACT, 2001
31. Лавров С.С. Основные понятия и конструкции языков программирования. -— М.: Финансы и статистика, 1982.
32. Лурия А.Р. Язык и сознание. Изд. "Феникс", г. Ростов на Дону, 1998.
33. Малиновский Б.П. История вычислительной техники в лицах. — Киев.: Фирма "КИТ", ПТОО "А.С.К." 1995.
34. Марков А.А. Теория алгорифмов. Труды Матем. Ин-та АН СССР им. В .А. Стеклова, Изд-во АН СССР, 1954.
35. Марков Ю.Г. Функциональный подход в современном научномпознании. —Новосибирск: "Наука", 1982.140
36. Математическая логика и ее применения. Сборн. Статей под ред. Э.Нагела, П. Саппса и А. Тарского. Пер. с англ. Под ред. Мальцева А.И. Изд-во «Мир». М. 1965.
37. Мейер Б., Бодуэн К. Методы программирования: в 2-х томах. Т.1., пер. с франц. Ю.А. Первина. —М.: Мир. 1982.
38. Непейвода Н.Н. Основания программирования. Ижевск; Москва: РХД, 2003.
39. Непейвода Н.Н. Стили и методы программирования. — М.: «Интернет-университет информационных технологий», 2005
40. Пенроуз Р. Новый ум короля: о компьютерах, мышлении иIзаконах физики. М.: Едиториал УРСС, 2005.
41. Петцольд Ч., Код. — М.: Издательско-торговый дом «Русская редакция», 2004.
42. Поппер К.Р., Логика и рост научного знания: Избр. Работы. / Общ. Ред. В.Н. Садовского. -М.: Прогресс, 1983.
43. Пратт Т., Языки программирования: разработка и реализация. -Пер. с англ. Под ред. Ю.М. Баяковского. М.: Мир. 1989.
44. Пуанкаре А. О науке: пер. с фр. 2-е изд., — М.: Наука. 1990.
45. Саймон Г. Науки об искусственном: пер. с англ. Изд. 2-е. — М., Едиториал УРСС, 2004.
46. Себеста Р.У. Основные концепции языков программирования. — М., Спб., Киев: Вильяме, 2001.
47. Смирнова Е.Д. Логика и философия. — М.: РОССПЭН, 1996.
48. Современная американская лингвистика: Фундаментальные направления. Изд.З-е. М.: Эдиториал УРСС, 2006.
49. Степин В. С., Горохов В. Г., Розов М. А. Философия науки и техники. —М.: Гардарики, 1999.
50. Стяжкин Н.И. Становление математической логики. — М., Наука, 1964.
51. ТеслерГ.С. Место и роль алгоритмического базиса в решении проблемы производительности // Математические машины и системы. 1997. № 1, стр. 25 33.
52. Тондл Л., Проблемы семантики. М.: изд. «Прогресс», 1975
53. Философия языка // ред.-сост. Дж. Серл: пер. с англ. М.: Едиториал УРСС, 2004.
54. Френкель А.А., Бар-Хиллел И. Основания теории множеств. М., издательство «Мир», 1966.
55. Хоггер К., Введение в логическое программирование: пер. с англ. М.: Мир, 1988.
56. Хомский Н. Вопросы теории порождающей грамматики. // Философия языка. Ред.-сост. Дж. Р. Сёрл: пер. с англ. М: Едиториал УРСС, 2004.
57. Хомский Н., Миллер Д., Языки с конечным числом состояний. // Кибернетический сборник. Вып. 4. 1962. стр. 233-255.
58. Хомский Н., Объяснительные модели в лингвистике. // Математическая логика и ее применения. Сборн. Ст., под ред. А.И. Мальцева. —М.: Мир. 1965.
59. Хомский, Н. Три модели описания языка. // Кибернетический сборник. Вып. 2, 1961. стр. 237-266.
60. Шенк Р., Бирнбаум JL, Мей Дж. К интеграции семантики и прагматики. // Новое в зарубежной лингвистике. Вып. XXIV. Компьютерная лингвистика. М.: Прогресс. 1989.
61. Backus, J. Can programming be liberated from the von Neumann style? A functional style and its algebra of programs. Communications of the ACM 21 (8), 613-64, 1978
62. Backus, J. THE HISTORY OF FORTRAN I, II, AND III // ACM SIGPLAN Notices, Vol. 13, No. 8, August 1978.
63. Ben-Ari, M. Principles of Concurrent Programming. Prentice-Hall, Englewood Cliffs, NJ. 1982.
64. Bohm C., Jacopini G., Flow Diagrams, Turing Machines, and Lanfuages with Only Two Formation Rules. Commun. ACM, Vol. 9, No 5, pp. 366-371.
65. Campbell-Kelly M. A History of the Software Industry // MIT Press, 2003.
66. Chomsky N. Three models for the description of language. IRE Trans., Vol. 1. N-2, №3. 1956)
67. Davis M. The Universal Computer: The Road from Leibniz to Turing // W. W. Norton & Co., 2000.
68. Dijkstra, E. A Discipline of Programming. Prentice-Hall Series in Automatic Computation, 1976.
69. Farrow R., LINGUIST 86: Yet Another Translator Writing System Based on Attribute Grammars. // ACM SIGPLAN Notices, Vol. 17 №6. 1982.
70. Gill, S., Getting programmes right. In International Symposium on Automatic Digital Computing. National Physical Laboratory. 1954.
71. Godfrey M.D., Hendry F. The Computer as von Neumann Planned It. // IEEE Annals of the History of Computing, Vol. 15., №1, 1993."
72. Grogono G., The Evolution of Programming Languages. Department of Computer Science. Concordia University. Montreal, Quebec. 1999.
73. History of Computing Software Issues. By ed. U. Hashagen, R. Keil-Slawik, A. L. Norberg // Springer Verlag, 2002.
74. History of Scientific Computing. S. G. Nash // Assn for Computing Machinery, 1990.
75. Hoare C.A.R., A Hard Act to Follow. // Higher-Order and Symbolic Computation, Vol. 13 №1/2, April 2000.
76. Horowitz, E. Fundamentals of Programming Languages (Rockville, Maryland: Computer Science Press, 1983)
77. International Standard ISO/IEC 9899. Programming languages — C. Second Edition, 1999.
78. ISO/IEC FCD 1539-1:2004(E). Information technology -Programming languages Fortran.
79. ISO/IEC 9899. Information technology Programming languages — C.
80. Iverson R.E., A Programming Language. John Wiley, New York. 1962.
81. Kay, A. C. The Reactive Engine. Ph.D. Thesis. University of Utah, September 1969.
82. Kemeny J. G., Kurtz Т. E. Back to Basic: The History, Corruption, and Future of the Language // Addison-Wesley, 1985.
83. Knuth, Donald E. The Art of Computer Programming, Volumes 1-4, Addison-Wesley Professional, 1997.
84. Knuth Donald E., Semantics of Context-Free Languages. Mathematical Systems Theory, Vol. 2, No. 2.
85. MacCarthy, J. Recursive Function of Symbolic Expressions and Their Computation by Machine, Part I. Communications of the. ACM, Vol. 3, № 4.
86. MacLennan, B. Principles of Programming Languages: Design, Evaluation, and Implementation. London, Oxford University Press, 1987.
87. Neumann, J. First Draft of a Report on the EDVAC // Moore school of Electrical Engineering University of Pennsylvania, 1945.
88. Newell N.J., Simon H.A., The Logic Theory Machine — A Complex Information Processing System. // IRE Transactions on Information Theory. Vol. IT-2, №3, pp. 61-79.
89. Salus P. H. A Quarter Century of UNIX // Addison-Wesley, 1994.
90. Sebesta, Robert W. Concepts of Programming Languages, The Benjamin/Cummings Publishing Company, Inc, 1993
91. Scott D.S., Strachey C. Towards a Mathematical Semantics for Computer Language. // Proceedings, Symposium on Computers and Automation, ed. J.Fox, Polytechnic Institute of Brooklyn Press, New York.
92. Teitelbaum Т., Reps T. The Cornell Program Synthesizer: A Syntax-Directed Programming Environment. // Commun. ACM, Vol. 24, №9. 1981.
93. The First Computers History and Architectures. By ed. R. Rojas, U. Hashagen // MIT Press, 2002.
94. The FORTRAN Automatic Coding System. Reprinted from the Proceedings of the Western Joint Computer Conference, Los Angeles, California, February 1957.
95. The Future of Software. By ed. D. Leebaert // MIT Press, 1995.
96. Turing A. On computable numbers, with an application to the entscheidungsproblem. Proc. of the London Math. Soc., (2), 42, 1936
97. Watt D.A. An Extended Attribute Grammar for Pascal. // ACM SIGPLAN Notices, Vol. 4 №1. 1979.
98. Weaver W. Science and Complexity, Am. Scient., 1948.
99. WignerE.P. Symmetries and Reflections. Bloomington, London, 1970
100. William G. Lycan Philosophy of Language A contemporary introduction. London and New York, Taylor & Francis Group, Routledge 2001.
101. Williams M. R. A History of Computing Technology // John* Wiley & Sons-IEEE Computer Society Press, 1997.
102. WitrhN. Algorithms + Data Structures = Programs. Prentice-Hall, Inc., Englewood Cliffs, 1975
103. Zuse, Konrad. Der Plankalkul, Berichte der Gesellschaft fur Mathematik und Datenverarbeitung, Nr. 63, Sankt Augustin, 1972.