Файл: История развития программирования в России.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 25.04.2023

Просмотров: 75

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ВВЕДЕНИЕ

В нашу страну информация о разработках принципиально новых электронных устройств и создании новых типов информационных процессоров поступила довольно быстро. Исходя из интересов страны (прежде всего из необходимости поддерживать высокий уровень военных разработок), в СССР начались работы по созданию отечественных вычислительных машин. В конце 30-х годов в Институте электротехники АН СССР под руководством С. А. Лебедева уже начались работы по созданию ЭВМ с использованием двоичной системы счисления, но начавшаяся война прервала эти исследования. После этого пришло время продолжить их. В 1951 году в Киеве была запущена первая вычислительная машина в континентальной Европе - МЭСМ, созданная коллективом во главе с С. А. Лебедевым.

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

Целью работы является изучить историю программирования в России

Для достижения цени необходимо выполнить следующие задачи:

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

2. Проанализировать историю программирования в России

3. Рассмотреть общую характеристику задачи

4. Описать алгоритм решения задачи

Объектом работы является история программирования

Предметом работы – Развитие программирования в России

Глава 1. История развития программирования и их классификация

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

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


Первый вопрос, на который надо дать ответ, почему мы считаем актуальной проблему классификации компьютерных языков. Простой ответ состоит в том, что необходимость классификации (и систематизации) следует уже из числа известных компьютерных языков, которых уже несколько тысяч. Так, например, на плакате The History of Programming Languages издательства O’REILLY, специализирующегося на публикации ученой литературы по компьютерным языкам, представлены сведения о 2500 языках. Эти сведения включают названия, год рождения, авторство, влияние друг на друга и развитие версий компьютерных языков, появившихся в период с 1956 по 2006 гг.

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

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

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

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

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


Кроме того, часто специалисты по компьютерным языкам затрудняются отнести тот или иной язык к одному определённому классу. Например, функциональные языки программирования ML и Рефал появились ещё в 1960-ые годы как языки спецификаций вывода (логического и продукционного), но ещё в 1970-ые годы они стали языками программирования для задач искусственного интеллекта. В то же время они (в силу их декларативности) по-прежнему могут служить языками спецификаций для вычислительных программ. А некоторые языки изначально по замыслу их разработчиков не могут быть отнесены к одному конкретному классу. Вот, например, как позиционируют язык Ruby его активные пропагандисты [23]: Its creator, Yukihiro “matz ”, blended parts of his favorite languages (Perl, Smalltalk, Eiffel, Ada, and Lisp) to form a new language that balanced functional programming with imperative programming.

Мы полагаем, что современная классификация универсума компьютерных языков может быть основана на гибком понимании компьютерных парадигм. В современной методологии науки парадигмы - это разные подходы к постановке и решению задачи или проблемы. Современным пониманием этого термина мы обязаны широко известной диссертации Томаса Куна [9], впервые опубликованной в 1970 г.

Роберт Флойд стал первым в информатике, кто ввёл понятие парадигм программирования в научный оборот в его тьюринговской лекции Paradigms of Programming в 1978 г. [Floyd, 1979]. К сожалению, он не дал явного определения этого понятия.

В 2009 г. Питер ванн Рой опубликовал в Интернете таксономию The principal programming paradigms, в которой выделил 27 различных парадигм, и предпринял попытку обосновать её в статье [20]. Однако ни эта таксономия, ни соответствующая статья не дают развёрнутого определения понятия парадигм программирования. Можно процитировать только следующее краткое (и неполное, на наш взгляд) определение [20]: A programming paradigm is an approach to programming a computer

based on a mathematical theory or a coherent set of principles. Each paradigm supports a set of concepts that makes it the best for a certain kind of problem.

На основе краткого определения понятия парадигмы программирования, предложенного Питером ванн Роем [20], в 2011 г. нами было дано следующее более полное понятие компьютерных парадигм [3, 17]:

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

Компьютерные парадигмы обычно поддержаны строгими математическими теориями/моделями и аккумулированы в соответствующих компьютерных языках.

Компьютерные парадигмы соответствуют классам компьютерных языков и наоборот:


о каждый естественный класс компьютерных языков представляет компьютерную парадигму, которую языки этого класса реализуют; о каждая компьютерная парадигма естественно характеризуется классом компьютерных языков, реализующих эту парадигму.

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

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

Роль синтаксиса, семантики и прагматики. Категории синтаксиса, семантики и прагматики используются для описания как естественных, так и искусственных языков (компьютерных языков в том числе). Синтаксис - это правописание (орфография) языка. Смысл правильно написанных фраз (слов) языка определяет его семантика. Прагматика - это практика использования синтаксически корректных осмысленных фраз языка.

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

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

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

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


Роль и значение семантики для компьютерных языков общепризнанны. Косвенным подтверждением признания этого является количество лауреатов премии имени А. Тьюринга (самой престижной международной премии в области информатики), заслуживших эту премию за вклад в развитие семантики компьютерных языков: Эдсгер Дейкстра (1972), Джон Бэкус (1977), Роберт Флойд (1978), Ч. Энтони Р. Хоар (1980), Никлаус Вирт (1984), Робин Милнер (1991) и Питер Наур (2005). Таким образом, за 46-летнюю историю присуждения этой ежегодной премии 7 раз она присуждалась именно за вклад в развитие языков программирования и их семантики.

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

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

распространённое предубеждение, что формальная семантика малополезна и неэффективна на практике;

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

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

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

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

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