Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

История развития программирования в России (Понятие программирования)

Содержание:

ВВЕДЕНИЕ

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

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

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

Следовательно, цель работы – рассмотрение истории развития программирования в России. Для достижения данной цели следует выполнить следующие задачи:

  • охарактеризовать основные понятия программирования;
  • рассмотреть этапы программирования;
  • описать историю развития программирования в мире;
  • изучить историю развития программирования в России;
  • подвести итоги работы.

Объект работы – процесс программирования, в предмет – история развития программирования в России.

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

Структура работы состоит из следующих элементов:

  • введение;
  • 1 глава: два параграфа;
  • 2 глава: два параграфа;
  • заключение;
  • список использованных источников (23 наименования).

Общий объем работы составляет 34 страницы.

1. Понятие программирования

1.1 Основные понятия программирования

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

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

В Законах РФ «О защите программ и баз данных для ЭВМ» и «Законе об авторских и смежных правах» дано следующее определение компьютерных программ:

Программа для ЭВМ – это совокупность команд и данных, предназначенных для определенного функционирования ЭВМ [1,2].

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

Процесс создания компьютерных программ носит название программирование, а людей, занимающихся этим видом деятельности, называют программистами либо разработчиками программ для ЭВМ. Людей, занимающихся отладкой программ на ЭВМ путем тестирования называют тестировщиками.

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

1.2 Программирование – процесс создания компьютерных программ [20].

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

В более широком смысле под программированием понимают весь спектр деятельности, связанный с созданием и поддержанием в рабочем состоянии программ – программного обеспечения ЭВМ. Иначе это называется «програмная инженерия» («инженерия ПО»). Сюда входят анализ и постановка задачи, проектирование программы, построение алгоритмов, разработка структур данных, написание текстов программ, отладка и тестирование программы (испытания программы), документирование, настройка (конфигурирование), доработка и сопровождение [11].

Программирование для ЭВМ основывается на использовании языков программирования, на которых записывается программа. Чтобы программа могла быть понята и исполнена ЭВМ, требуется специальный инструмент – транслятор.

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

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

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

Пользователи программ для ЭВМ согласно Закону РФ «О защите прав потребителей» имеют общегражданские права на защиту своих прав при обнаружении дефектов в программах на ЭВМ – права на замену программ без дефектов либо на возврат денег за приобретение дефектной продукции [3].

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

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

К программному обеспечению (ПО) относится также вся область деятельности по проектированию и разработке ПО:

  • технология проектирования программ (например, нисходящее проектирование, структурное и объектно–ориентированное проектирование и др.);
  • методы тестирования программ;
  • методы доказательства правильности программ;
  • анализ качества работы программ;
  • документирование программ;
  • разработка и использование программных средств, облегчающих процесс проектирования программного обеспечения, и многое другое [23].

Программное обеспечение – неотъемлемая часть компьютерной системы. Оно является логическим продолжением технических средств. Сфера применения конкретного компьютера определяется созданным для него ПО.

В первом приближении все программы, работающие на компьютере, можно условно разделить на три категории (рис. 1) [23]:

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

http://mif.vspu.ru/books/informaticsshau/theory/chapter6/0001.gif

Рис. 1. Категории программного обеспечения [23]

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

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

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

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

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

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

  • операционные системы и оболочки;
  • системы программирования (трансляторы, библиотеки подпрограмм, отладчики и т.д.);
  • инструментальные системы;
  • интегрированные пакеты программ;
  • динамические электронные таблицы;
  • системы машинной графики;
  • системы управления базами данных (СУБД);
  • прикладное программное обеспечение [18].

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

Прикладная программа – это любая конкретная программа, способствующая решению какой–либо задачи в пределах данной проблемной области

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

Прикладные программы могут носить и общий характер, например, обеспечивать составление и печатание документов и т.п.

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

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

Системные программы выполняются вместе с прикладными и служат для управления ресурсами компьютера – центральным процессором, памятью, вводом–выводом.

Это программы общего пользования, которые предназначены для всех пользователей компьютера. Системное программное обеспечение разрабатывается так, чтобы компьютер мог эффективно выполнять прикладные программы [18].

2 Этапы программирования

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

Для выполнения задачи создания и эксплуатации программного обеспечения ее разбивают на определенные этапы:

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

2. Составление алгоритма.

3. Составление и ввод программы.

4. Отладка и тестирование программы.

5. Сопровождение программного продукта [20].

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

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

1. Описание исходных данных и результатов (виды, представление, точность, ограничения и т.п.).

2. Описание задачи, реализуемой программой.

3. Способ обращения к программе.

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

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

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

Третий этап как раз и является непосредственно программированием на языке, понятном ЭВМ. По своей сути третий этап является продолжением второго, так как программа тоже есть форма записи алгоритма с максимальной степенью детализации, – программная.

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

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

Отладка – процесс исправления ошибок в программе. Так, при отладке исправляются синтаксические ошибки, алгоритмические, ошибки, обнаруженные при тестировании и другие.

Пятый этап наступает, когда программный продукт сдан в эксплуатацию (или начались его продажи). Здесь так же возможно обнаружение не найденных на этапе тестирования ошибок, – их необходимо локализовать и исправить. Кроме этого, возможно изменение свойств программы для удобства эксплуатации: элементов интерфейса, некоторых функций и т.д. Казалось бы, пятый этап самый простой. Но ему отводится самая большая часть затрат времени и средств: до половины и более. Все эти этапы разработки и сопровождения программного продукта, включая завершение поддержки эксплуатации, составляют жизненный цикл программы [3].

Возможно и другое деление на этапы [1] с приблизительным делением по времени реализации:

1. Анализ требований.

2. Определение спецификаций.

3. Проектирование.

4. Кодирование.

5. Автономное тестирование.

6. Комплексное тестирование.

Временные затраты на реализацию этапов цикла разработки программного обеспечения (за исключением этапа эксплуатации и сопровождения) [1] На последний же этап эксплуатации и сопровождения объемных программных продуктов отводится более половины времени: до 67% от общего времени жизненного цикла.

Классическим называется следующий набор технологических этапов (процессов) [11]:

1. Возникновение и исследование идеи

2. Управление

3. Анализ требований

4. Проектирование

5. Программирование

6. Тестирование и отладка

7. Ввод в действие

8. Эксплуатация и сопровождение

9. Завершение эксплуатации

Процессы жизненного цикла программного обеспечения определены международным стандартом ISO 12207 [ISO/IEC 12207:1995] и делятся на три группы (без привязки ко времени) [7]:

Основные процессы:

  • приобретение,
  • поставка,
  • разработка,
  • эксплуатация,
  • сопровождение. ·

Вспомогательные процессы:

  • документирование,
  • управление конфигурацией,
  • обеспечение качества,
  • верификация,
  • аттестация,
  • совместная оценка,
  • аудит,
  • разрешение проблем. ·

Организационные процессы:

  • управление,
  • создание инфраструктуры,
  • усовершенствование,
  • обучение.

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

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

3. История развития программирования

3.1 История развития программирования в мире

Программирование появилось задолго до 50–х годов XX века. Первые идеи высказал ещё Чарльз Бэббидж (1792–1871), которого по праву считают отцом компьютера. Он не знал о транзисторах, микросхемах и мониторах, но достаточно точно описал основные принципы, на которых будут строится все вычислительные машины. Развила идею графиня Ада Лавлейс (1815–1852). Её место в истории до сих вызывает немало споров, но одно абсолютно точно – именно Ада фактически стала первым известным программистом. Благодаря её трудам стало понятно, что путь к эффективному использованию машин – алгоритмы, описанные в коде [9].

https://uploads.hb.cldmail.ru/geekbrains/public/ckeditor_assets/pictures/4574/content-4826a7a409f4bb24dcafe9f35a98ebcf.jpg

Рис. 2. Аналитическая машина Бэббиджа

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

В 1950–х работать с элементарными машинными кодами, а это практически всё равно что программировать при помощи паяльника.

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

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

Решение лежало на поверхности: необходимо перевести цифровые обозначения операций в буквы. То есть вместо «01 10 15» использовать «ADD 10 15». Это требовало дополнительного перевода символов в машинную команду, но, учитывая проблему, жертва была минимальна [21].

Решение оказалось настолько очевидным, что доподлинно неизвестно, кто первым изобрёл язык Ассемблера. Вероятнее всего, он появился одновременно сразу в нескольких местах. За название и популяризацию ответственными принято считать авторов книги «The preparation of programs for a digital computer» Уилкса, Уилера и Гилла. Нетрудно догадаться, что название Ассемблер происходит от английского слова assemble – собирать, монтировать, что вполне точно описывает процесс. Позднее символы стали касаться не только простейших операций, но и адресации, что значительно упростило читаемость кода.

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

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

Ассемблер позволил создать простые превращения. Например, перевод 01 в ADD. Макроассемблер расширил эту идею и подарил программистам возможность сворачивать несколько инструкций в одну. К примеру, если в программе вы постоянно добавляли значение в ячейку памяти и проверяли, не переполнена ли она, всё это можно было записать в макрос INCRT и использовать его, меняя лишь переменные. По сути, макроассемблеры превратились в первые языки высокого уровня [17].

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

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

Тем не менее компилятор стал единственным выходом из ситуации, но здесь проявилась другая трудность – арифметические выражения. Их исполнение не совпадает с тем, как машина читает код. Из школьного курса мы знаем порядок вычислений в выражении «2+3*5», но машина читает код в одном направлении, так что ответ будет неверным. Да, указанный пример можно решить, создав макрос, но для сложных выражений уровня «(2 + 3 * 5 + 4/6) * 10 + 16– (14 + 15) * 8» требовался принципиально иной подход

Найти алгоритм анализа стека удалось Джону Бэкусу, создателю Фортрана. Он начал работать над ним в 1954 году и ему потребовалось почти 5 лет, чтобы доказать право языков высокого уровня на существование. Полное название Фортрана – The IBM Formula Translating System, или FORmula TRANslator. Несмотря на 60–летний возраст, он остаётся одним из самых популярных языков программирования и невероятно востребован в Data Science. За это время мы видели множество версий: Fortran 1, II, 66, 77, 90, 95, 2008, а в следующем году выйдет ещё одна (планировался Fortran 2015, но из–за задержек название может смениться на 2018). Именно в Фортране впервые были одновременно реализованы многие атрибуты языка высокого уровня, среди которых:

  • арифметические и логические выражения;
  • цикл DO (ранняя форма цикла FOR);
  • условный оператор IF;
  • подпрограммы;
  • массивы [17].

Ещё одним важным наследием Фортрана, о котором даже не догадываются современные программисты, является использование ограничений для переменных для целых чисел. Все они должны были начинаться с одного из 6 символов I, J, K, L, M, N (происходит от I–Nteger). Именно отсюда взялась привычка для перечислений брать переменные i, j и т.д.

https://uploads.hb.cldmail.ru/geekbrains/public/ckeditor_assets/pictures/4576/content-f5c0be4b6c3068ab211a4cbf4181bdbc.jpg

Рис. 3. IBM 704 – машина, на которой был создан Fortran

При этом Фортран оставался языком, приближенным к машинам. Например, там существовало такое:

«if (выражение) doneg, dozero, dopos»

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

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

Fortran 1 был научным языком, в его основе лежали операции с комплексными числами и с плавающей запятой. Он даже не умел обрабатывать текст, для этого приходилось преобразовывать его в специальные коды. Поэтому Фортран оказался непригоден для бизнеса, где был специально создан язык Cobol [22].

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

«Move Income To Total Subtract Expenses»

Cobol стал олицетворением максимального удаления от прежнего машинно–арифметического мышления к общечеловеческому. И главное – теперь можно было работать с текстом и записями.

Следующим фундаментальным языком стал Algol (ALGOrithmic Language), предназначенный для научных отчётов и публикаций. В нём впервые появились естественные для нас вещи:

  • отличия между присваиванием := и логическим равенством =;
  • использование цикла for с тремя аргументами: начальное значение, предел, шаг;
  • блочная структура программ, заключённая между begin и end, это исключило необходимость применения GOTO [19].

Именно из Алгол произошли C, C ++, C #, Java и многие другие популярные сегодня языки.

Четвёртым китом 1950–х стал Лисп (LISt Processing language), разработанный специально для обслуживания искусственного интеллекта. Главной его особенность стала работа не с императивными данными, а с функциями. Для этого Джону Маккарти пришлось предусмотреть множество механизмов для нормальной работы: динамическую типизацию, автоматическое распределение памяти, сборщик мусора. В конечном счёте, именно Лисп стал прародителем таких языков, как Python и Ruby, а сам до сих пор активно применяется в ИИ.

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

Большое количество языков программирования появилось в 1960–1970–х гг. А за всю историю ЭВМ их было создано более тысячи. Но распространились, выдержали испытание временем немногие. В 1965 г. в Дартмутском университете был разработан язык Бейсик. По замыслу авторов это простой язык, легко изучаемый, предназначенный для программирования несложных расчетных задач. Наибольшее распространение Бейсик получил на микроЭВМ и персональных компьютерах. На некоторых моделях школьных компьютеров программировать можно только на Бейсике. Однако Бейсик – неструктурный язык, и потому он плохо подходит для обучения качественному программированию. Справедливости ради следует заметить, что последние версии Бейсика для ПК (например, QBasic) стали более структурными и по своим изобразительным возможностям приближаются к таким языкам, как Паскаль [4].

В эпоху ЭВМ третьего поколения получил большое распространение язык PL/I (Program Language One), разработанный фирмой IBM. Это был первый язык, претендовавший на универсальность, т. е. на возможность решать любые задачи: вычислительные, обработки текстов, накопления и поиска информации. Однако PL/I оказался слишком сложным языком. Для машин типа IBM 360/370 транслятор с него не мог считаться оптимальным, содержал ряд невыявленных ошибок. На ЭВМ класса мини и микро он вообще не получил распространения. Однако тенденция к универсализации языков оказалась перспективной. Старые языки были модернизированы в универсальные варианты – Алгол–68, Фортран–77 [13].

Значительным событием в истории языков программирования стало создание в 1971 г. языка Паскаль. Его автор – швейцарский профессор Н.Вирт – разрабатывал Паскаль как учебный язык структурного программирования.

Наибольший успех в распространении этого языка обеспечили персональные компьютеры. Фирма Borland International, Inc (США) разработала систему программирования Турбо Паскаль для ПК

Турбо Паскаль – это не только язык и транслятор с него, но еще и операционная оболочка, обеспечивающая пользователю удобство работы. Турбо Паскаль вышел за рамки учебного предназначения и стал языком профессионального программирования с универсальными возможностями. Транслятор с Турбо Паскаля по оптимальности создаваемых им программ близок наиболее удачному в этом отношении транслятору – транслятору с Фортрана. В силу названных достоинств Паскаль стал основой многих современных языков программирования, например, таких как Ада, Модула–2 и др. [13]

Язык программирования Си (английское название – С) создавался как инструментальный язык для разработки операционных систем, трансляторов, баз данных и других системных и прикладных программ. Так же как и Паскаль, Си – это язык структурного программирования, но, в отличие от Паскаля, в нем заложены возможности непосредственного обращения к некоторым машинным командам, к определенным участкам памяти компьютера. Дальнейшее развитие Си привело к созданию языка объектно–ориентированного программирования Си++ [15].

Модула–2 – это еще один язык, предложенный Н.Виртом, основанный на языке Паскаль и содержащий средства для создания больших программ. ЭВМ будущего, пятого поколения называют машинами «искусственного интеллекта». Но прототипы языков для этих машин были созданы существенно раньше их физического появления. Это языки ЛИСП и Пролог.

ЛИСП появился в 1965 г. Язык ЛИСП основан на понятии рекурсивно определенных функций. А поскольку доказано, что любой алгоритм может быть описан с помощью некоторого набора рекурсивных функций, то ЛИСП, по сути, является универсальным языком. С его помощью на ЭВМ можно моделировать достаточно сложные процессы, в частности интеллектуальную деятельность людей.

Язык Пролог разработан во Франции в 1972 г. также для решения проблемы «искусственного интеллекта». Пролог позволяет в формальном виде описывать различные утверждения, логику рассуждений и заставляет ЭВМ давать ответы на заданные вопросы [18].

Реализовать тот или иной язык программирования на ЭВМ – это значит создать транслятор с этого языка для данной ЭВМ. Существуют два принципиально различных метода трансляции. Они называются соответственно компиляция и интерпретация. Для объяснения их различия можно предложить следующую аналогию: лектор должен выступить перед аудиторией на незнакомом ей языке. Перевод можно организовать двумя способами:

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

Компиляция является аналогом полного предварительного перевода; интерпретация – аналогом синхронного перевода. Транслятор, работающий по принципу компиляции, называется компилятором; транслятор, работающий методом интерпретации, – интерпретатором.

При компиляции в память ЭВМ загружается программа–компилятор. Она воспринимает текст программы на ЯПВУ как исходную информацию. После завершения компиляции получается программа на языке машинных команд. Затем в памяти остается только программа на ЯМК, которая выполняется, и получаются требуемые результаты.

Интерпретатор в течение всего времени работы программы находится во внутренней памяти. В ОЗУ помещается и программа на ЯПВУ. Интерпретатор в последовательности выполнения алгоритма «читает» очередной оператор программы, переводит его в команды и тут же выполняет эти команды. Затем переходит к переводу и выполнению следующего оператора. При этом результаты предыдущих переводов в памяти не сохраняются. При повторном выполнении одной и той же команды она снова будет транслироваться. При компиляции исполнение программы разбивается на два этапа: трансляцию и выполнение. При интерпретации, поскольку трансляция и выполнение совмещены, программа на ЭВМ проходит в один этап. Однако откомпилированная программа выполняется быстрее, чем интерпретируемая. Поэтому использование компиляторов удобнее для больших программ, требующих быстрого счета. Программы на Паскале, Си, Фортране всегда компилируются. Бейсик чаще всего реализован через интерпретатор [18].

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

3.2 История программирования в России

Российское программирование имеет богатую историю, ведущую свой отчет от 50–х годов, когда программирование в основном предназначалось для решения военных и промышленных задач, например, для точного расчета места приземления космического корабля Юрия Гагарина. Ранние успехи советского программирования во многом связаны с тем, что советская экономика всегда была сильно индустриализованной и технически ориентированной. Растущая потребность в программистах была разрешена путем переориентации части математиков и физиков на информатику. В те времена количество программистов (да и самих компьютеров) было очень небольшим, так как область применения программирования была достаточно ограниченной. Так, за все 20 лет производства БЭСМ–6, одного из самых успешных компьютеров тех времен (было выпущено всего около 300 штук). Тем не менее, к концу 60–х советская школа программирования находилась на мировом уровне и в промышленной разработке программ, и в научных исследованиях [4].

К сожалению, где–то с начала 70–х годов в программировании, как и в ряде других отраслей, начали наблюдаться первые признаки застоя. Одной из основных причин стала официальная политика ориентации компьютерных платформ на клоны IBM/360 и PDP/11. Считалось, что путем копирования западной аппаратной базы удастся сэкономить деньги, которые впоследствии можно было бы использовать для «гигантского скачка» в программировании. Эта «стратегия» потерпела провал, а Эдгар Дейкстра в своей лекции, прочитанной в России, назвал это решение советского правительства «величайшей победой Запада в холодной войне» (подробнее о ранней истории программирования в России можно прочитать в [1]).

Кризис продолжался до начала 90–х годов. В процессе перехода на рыночную экономику большинство существовавших структур рухнуло [6], что привело, в частности, к радикальной смене преобладающей аппаратной платформы. В течение нескольких лет мэйнфреймы были потеснены мощным потоком персональных компьютеров; так, согласно оценке IDC, в 1997 году в России было продано 1,4 млн. компьютеров. Переход на новую платформу создал потребность в целом ряде новых услуг, например, в разработке программ и системной интеграции, которые стали предоставлять молодые частные компании. Большинство современных лидеров в компьютерном бизнесе России – представители этой «новой волны»; сегодня такие компании вполне могут считать себя ветеранами рынка, несмотря на возраст от 8 до 12 лет.

Компьютерный рынок быстро увеличивался вплоть до кризиса 1998 года. Отечественная компьютерная индустрия была одной из наиболее пострадавших из–за своей зависимости от западного рынка; лишь совсем недавно Россия снова вышла на уровень 1997 года по количеству продаваемых компьютеров. Тем не менее, сегодня перспективы компьютерного рынка в России выглядят очень хорошими; страна демонстрирует очень быстрый рост темпов продаж компьютеров, при том, что рынок еще ненасыщен: на 100 человек в России приходится всего лишь около 5 компьютеров (в США – 62) [17].

Самым большим конкурентным преимуществом российской индустрии программирования является наличие большого количества хорошо обученных технических специалистов. Типичный российский программист обладает как минимум высшим образованием в программировании, технических или точных науках, что совсем нехарактерно для западных стран. Например, примерно 86% американских программистов обладают лишь степенью бакалавра, закончили специальные двухгодичные курсы или вообще ограничились средним образованием [3].

Платное образование становится все более популярным; по данным Госкомстата, в 2001 году более трети студентов в России платили за свое образование. Однако программы обучения всех университетов, как государственных, так и частных, контролируются государством с помощью набора стандартов, гарантирующих единый уровень обучения. Такой подход порождает ряд специфических для России моментов. Например, в стандарте на программистские специальности традиционно очень велик процент обязательных курсов по математике и прочим фундаментальным наукам. В результате, первые два с половиной года самой распространенной программистской специальности 351500 (бывшая 220400) почти полностью посвящены математическим предметам; это означает, что студенты не получают достаточной практики в программировании до третьего или даже четвертого курса. У такого подхода к делу есть и преимущества: отечественные программисты получают базовые знания, которые могут быть применены в самых разных исследовательских задачах. Это, кстати, регулярно подтверждается победами российской молодежи на различных международных соревнованиях. Например, команда Санкт–Петербургского государственного университета два года подряд становилась победителем международной олимпиады по программированию, проводимой под эгидой ACM (2000 и 2001 годы), а также входила в десятку победителей в течение пяти лет. Следующее поколение также подает большие надежды: в 2000 году российские школьники победили на международной олимпиаде по информатике в Китае [17].

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

Некоторый процент российских программистов эмигрирует из России, и все же проблема «утечки мозгов» уже не так критична, как в начале 90–х годов, когда программисты тысячами эмигрировали, опасаясь неясного положения и туманных перспектив развития России [4].

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

В стране исторически сложилось три основных центра программирования: Москва, Петербург и Новосибирск. Среди прочих городов с развитой индустрией программирования следует отметить Нижний Новгород, Екатеринбург, Пермь и Саров. В Москве сосредоточены основные денежные потоки, а также менеджмент страны и практически всех крупных российских компаний, поэтому многие здешние компьютерные компании ориентированы на внутренний рынок (хотя есть и исключения, например, Luxoft, VDI и Auriga). Петербург расположен в непосредственной близости от североевропейских стран, что превратило его в один из многообещающих центров глобального программирования. Здесь расположены десятки аутсорсинговых компаний, насчитывающих от 50 до 250 человек [19].

Новосибирск был с самого начала спланирован как город, ориентированный на науку – предполагалось, что ему удастся стать достойным противовесом научным центрам в европейской части России. К сожалению, российская наука испытывает сейчас не лучшие времена, поэтому происходит постепенная переориентация исследователей на разработку бизнес–приложений. Однако географическая удаленность и проблемы с телекоммуникациями в Сибири являются серьезными барьерами на этом пути [19].

Практически все программные компании в России начинались с небольшой группы квалифицированных программистов. Чаще всего, на этом этапе вопросы качества вообще специально не рассматривались – компании в основном полагались на профессионализм отдельных сотрудников. Однако по мере роста возникали все новые и новые проблемы, связанные с качеством программных продуктов и процессов. Поэтому сегодня большинство российских компаний (особенно работающих с западными заказчиками) понимают важность обеспечения качества. За последние несколько лет рынок услуг, связанных с качеством, значительно вырос. Еще три–четыре года назад ни в одной российской компании не было внутренней программы улучшения качества, а сегодня десятки компаний уже получили сертификат соответствия стандарту ISO 9001, многие планируют сертификацию на следующие несколько лет [19].

Работы по обеспечению качества в России чаще всего основываются на ISO 9001, который еще в советские времена был положен в основу национального стандарта ГОСТ ИСО Р 9001. На сегодняшний день ISO 9001 по–прежнему остается наиболее доступным из всех программных стандартов: существует множество сертифицирующих органов (как национальных, так и международных) и множество курсов по ISO 9001. Прочие стандарты менее популярны и прежде всего по причине их недостаточной распространенности и высокой стоимости сертификации. Многие российские компании планируют сертификацию по стандарту СММ, однако еще ни одна из них еще не достигла этого; среди подразделений западных компаний необходимо отметить лабораторию Motorola в Петербурге, достигшую пятого уровня СММ [5].

Развитие российской индустрии программирования затруднено целым рядом проблем. Самая большая трудность – это компьютерное пиратство. 88% используемых в России программ являются нелицензионными (в среднем по миру – 36%). Только Вьетнам, Китай и ряд стран бывшего СССР имеют еще худшие показатели по этой проблеме. Некоторые компании пытаются избежать столкновения с этой проблемой путем ориентации создаваемых продуктов на западный рынок. Этот подход (известный также как «скандинавская» или «израильская» модель) представляется очень многообещающим, так как из–за разницы в уровне цен на исходном и целевом рынке финансовый результат может многократно превышать затраты. Единственная проблема заключается в том, что требуются значительные начальные финансовые вложения, отсутствующие у большинства российских компаний. Финансовый рынок в России также недостаточно развит для того, чтобы поддерживать подобные проекты. Поэтому, несмотря на целый ряд примеров успешной реализации подобной модели (например, антивирусная система AVP или графические средства, разработанные компанией ParaGraph и приобретенные впоследствии Silicon Graphics), все еще неясно, станет ли эта модель массовой в России [5].

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

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

ЗАКЛЮЧЕНИЕ

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

  • охарактеризованы основные понятия программирования;
  • рассмотрены этапы программирования;
  • описана история развития программирования в мире;
  • изучена история развития программирования в России.

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

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

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Закон РФ «О правовой охране программ для электронных вычислительных машин и баз данных» от 23.09.1992 N 3523-1 [Электронный ресурс]. Режим доступа: http://www.consultant.ru/document/cons_doc_LAW_1007/
  2. Закон РФ «Об авторском праве и смежных правах» от 09.07.1993 N 5351-1 [Электронный ресурс]. Режим доступа: http://www.consultant.ru/document/cons_doc_LAW_2238/
  3. Закон РФ от 07.02.1992 N 2300-1 (ред. от 08.12.2020) «О защите прав потребителей» [Электронный ресурс]. Режим доступа: http://www.consultant.ru/document/cons_doc_LAW_305/
  4. Ашарина, И. В. Основы программирования на языках C и C++ / И. В. Ашарина. – М.: Горячая линия – Телеком, 2017. – 208 c.
  5. Бибило, П. Н. Задачи по проектированию логических схем с использованием языка VHDL. Учебное пособие / П. Н. Бибило. – М.: ЛКИ, 2015. – 328 c.
  6. Биллиг, В. А. Основы объектного программирования на C# (C# 3.0, Visual Studio 2008) / В. А. Биллиг. – М.: Интернет–университет информационных технологий, Бином. Лаборатория знаний, 2016. – 584 c.
  7. Буховец, А. Г. Алгоритмы вычислительной статистики в системе R. Учебное пособие / А. Г. Буховец, П.В. Москалев. – М.: Лань, 2015. – 160 c.
  8. Васильев, П. П. Турбо Паскаль в примерах и задачах / П. П. Васильев. – М.: Финансы и статистика, 2016. – 496 c.
  9. Гавриков, М. М. Теоретические основы разработки и реализации языков программирования / М. М. Гавриков, А. Н. Иванченко, Д. В. Гринченков. – М.: КноРус, 2014. – 184 c.
  10. Гергель, В. П. Современные языки и технологии параллельного программирования / В. П. Гергель. – М.: Издательство МГУ, 2017. – 408 c.
  11. Герман, О. Программирование на Java и C# для студента / О. Герман, Ю. Герман. – М.: БХВ–Петербург, 2014. – 512 c.
  12. Зыков, С. В. Введение в теорию программирования. Курс лекций. Учебное пособие / С. В. Зыков. – М.: Интернет–университет информационных технологий, 2016. – 400 c.
  13. Истомин, Е. П. Информатика и программирование / Е. П. Истомин, A. M. Власовец. – М.: Андреевский Издательский дом, 2016. – 294 c.
  14. Ишкова, Э. А. C#. Начала программирования / Э. А. Ишкова. – М.: Бином–Пресс, 2016. – 334 c.
  15. Медведик, В. И. Практика программирования на Паскаль. Задачи и решения. Учебное пособие / В. И. Медведик. – М.: ДМК Пресс, 2015. – 590 c.
  16. Опалева, Э. А. Языки программирования и методы трансляции / Э. А. Опалева, В. П. Самойленко. – М.: БХВ–Петербург, 2015. – 480 c.
  17. Павловская, Т. А. C/C++. Процедурное и объектно–ориентированное программирование. Учебник / Т. А. Павловская. – М.: Питер, 2015. – 496 c.
  18. Павловская, Т. А. C/C++. Программирование на языке высокого уровня / Т. А. Павловская. – М.: Питер, 2017. – 464 c.
  19. Рапаков, Г. Г. Turbo Pascal для студентов и школьников / Г. Г. Рапаков, С. Ю. Ржеуцкая. – М.: БХВ–Петербург, 2016. – 352 c.
  20. Санников, Е. В. Курс практического программирования в Delphi. Объектно–ориентированное программирование / Е. В. Санников. – М.: Солон–Пресс, 2017. – 188 c.
  21. Семакин, И. Г. Основы программирования и баз данных. Учебник / И. Г. Семакин. – М.: Academia, 2014. – 224 c.
  22. Хабибуллин, И. Программирование на языке высокого уровня. C/C++ / И. Хабибуллин. – М.: БХВ–Петербург, 2016. – 512 c.
  23. Черпаков, И. В. Основы программирования. Учебник и практикум / И. В. Черпаков. – М.: Юрайт, 2016. – 220 c.