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

История развития программирования в России (Становления кибернетики в советский период)

Содержание:

Введение

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

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

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

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

1. Начало программирования и вычислительной техники, начиная с 40-х годов;

2. Появление персональных компьютеров и языков программирования, которые на них использовались;

3. Языков программирования: появление, различие, использование с примерами.

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

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

Курсовая работа состоит из введения, двух глав, заключения, списка источников.

Глава 1. Становления кибернетики в советский период

1.1 Начальный период становления кибернетики

В 1948 году академик Лаврентьев, директор Института математики и вице-президент АН СССР написал Сталину письмо о необходимости ускорения исследований в области вычислительной техники и о перспективах использования ЭВМ. 29 июня 1948 года Председатель Совета Министров СССР И. В. Сталин подписал постановление, в соответствии с которым создавался Институт точной механики и вычислительной техники.

В 1948 году Патентным бюро госкомитета Совета министров СССР по внедрению передовой техники в народное хозяйство было зарегистрировано изобретение Б. И. Рамеевым и И. С. Бруком цифровой электронной вычислительной машины (свидетельство номер 10475 с приоритетом 4 декабря 1948 года).

В том же 1948 году на Западе вышла книга «Кибернетика, или управление и связь в животном и машине» Норберта Винера. В СССР книга была издана только в 1958 году, а в то время была доступна только в спецхранах. Однако, выход книги вызвал шумиху в западной прессе и заставил обратить на себя внимание партийной и идеологической верхушки СССР.

К начальному периоду становления кибернетики можно отнести время с 1955 года по 1959 год. В 1959 году в Академии Наук СССР был создан Ученый совет по проблеме "кибернетика". За эти годы в Советском Союзе образовалась целая инфраструктура, полностью способствующая развитию нового научного направления.

Появление новой инфраструктуры связана с деятельностью А. И. Берга, чей огромный организаторский талант позволил преодолеть все препоны в бюрократической системе государства. Благодаря адмиралу Берг, который занимал пост заместителя министра обороны СССР по радиоэлектронике в 1953-1957 годах, кибернетика приобрела человека, который обеспечил достойные условия для ее становления и процветания кибернетике как науке.

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

Вместе с развитие кибернетики как науки велась и создание принципиально новых компьютеров, и создание новых методов решения на них разнообразных прикладных задач. В 1948 году были сформированы Институт точной механики и вычислительной техники АН СССР и Специальное конструкторское бюро Министерства приборостроения и автоматики (СКБ 245). В этих учреждениях, а также в ряде других исследовательских лабораторий различных институтов АН СССР активно развивается теория вычислительных машин, разрабатывается новые методы программирования.

В «Философский словарь» 1954 года издания попала характеристика кибернетики как «реакционной лженауки». Там кибернетика была определена как универсальная наука «…о связях и коммуникациях в технике, о живых существах и общественной жизни, о „всеобщей организации“ и управлении всеми процессами в природе и обществе». Однако кибернетике в статье даются весьма нелестные, даже зловещие характеристики, например: «реакционная лженаука», «форма современного механицизма», «отрицает качественное своеобразие закономерностей различных форм существования и развития материи», «рассматривает психофизиологические и социальные явления по аналогии… с электронными машинами и приборами, отождествляя работу головного мозга с работой счётной машины, а общественную жизнь - с системой электро- и радиокоммуникаций», «по существу своему… направлена против материалистической диалектики, современной научной физиологии, обоснованной И. П. Павловым», «ярко выражает одну из основных черт буржуазного мировоззрения — его бесчеловечность, стремление превратить трудящихся в придаток машины, в орудие производства и орудие войны», «поджигатели новой мировой войны используют кибернетику в своих грязных практических делах», «под прикрытием пропаганды кибернетики в странах империализма происходит привлечение учёных… для разработки новых приёмов массового истребления людей - электронного, телемеханического, автоматического оружия», «является… идеологическим оружием империалистической реакции, … средством осуществления её агрессивных военных планов». В «Философский словарь» 1954 года издания попала характеристика кибернетики как «реакционной лженауки».

Там кибернетика была определена как универсальная наука «…о связях и коммуникациях в технике, о живых существах и общественной жизни, о „всеобщей организации“ и управлении всеми процессами в природе и обществе». Однако кибернетике в статье даются весьма нелестные, даже зловещие характеристики, например: «реакционная лженаука», «форма современного механицизма», «отрицает качественное своеобразие закономерностей различных форм существования и развития материи», «рассматривает психофизиологические и социальные явления по аналогии… с электронными машинами и приборами, отождествляя работу головного мозга с работой счётной машины, а общественную жизнь — с системой электро- и радиокоммуникаций», «по существу своему… направлена против материалистической диалектики, современной научной физиологии, обоснованной И. П. Павловым», «ярко выражает одну из основных черт буржуазного мировоззрения - его бесчеловечность, стремление превратить трудящихся в придаток машины, в орудие производства и орудие войны», «поджигатели новой мировой войны используют кибернетику в своих грязных практических делах», «под прикрытием пропаганды кибернетики в странах империализма происходит привлечение учёных… для разработки новых приёмов массового истребления людей - электронного, телемеханического, автоматического оружия», «является… идеологическим оружием империалистической реакции, … средством осуществления её агрессивных военных планов».

Все неидеологические аспекты кибернетики в 1940-х — 1950-х годах преподавались в советских вузах под называнием ТАУ («Теория автоматического управления»).

В «Философский словарь» 1954 года издания попала характеристика кибернетики как «реакционной лженауки». Там кибернетика была определена как универсальная наука «…о связях и коммуникациях в технике, о живых существах и общественной жизни, о „всеобщей организации“ и управлении всеми процессами в природе и обществе». Однако кибернетике в статье даются весьма нелестные, даже зловещие характеристики, например: «реакционная лженаука», «форма современного механицизма», «отрицает качественное своеобразие закономерностей различных форм существования и развития материи», «рассматривает психофизиологические и социальные явления по аналогии… с электронными машинами и приборами, отождествляя работу головного мозга с работой счётной машины, а общественную жизнь - с системой электро- и радиокоммуникаций», «по существу своему… направлена против материалистической диалектики, современной научной физиологии, обоснованной И. П. Павловым», «ярко выражает одну из основных черт буржуазного мировоззрения - его бесчеловечность, стремление превратить трудящихся в придаток машины, в орудие производства и орудие войны», «поджигатели новой мировой войны используют кибернетику в своих грязных практических делах», «под прикрытием пропаганды кибернетики в странах империализма происходит привлечение учёных… для разработки новых приёмов массового истребления людей - электронного, телемеханического, автоматического оружия», «является… идеологическим оружием империалистической реакции, … средством осуществления её агрессивных военных планов».

Реабилитацией кибернетики в СССР можно считать 1955 год, когда в журнале «Вопросы философии» (№ 4) вышла статья С. Л. Соболева, А. И. Китова и А. А. Ляпунова «Основные черты кибернетики», в которой в частности говорилось: «Некоторые наши философы допустили серьезную ошибку: не разобравшись в существе вопросов, они стали отрицать значение нового направления в науке, в основном, из-за того, что вокруг этого направления была поднята за рубежом сенсационная шумиха, из-за того, что некоторые невежественные буржуазные журналисты занялись рекламой и дешевыми спекуляциями вокруг кибернетики…».

В СССР одним из главных борцов за реабилитацию «буржуазной лженауки» кибернетики был А. И. Китов, который был автором первых положительных публикаций о ней и убежденным пропагандистом ее идей. Его научные труды и статьи, написанные им самостоятельно и совместно с А. И. Бергом, А. А. Ляпуновым и С. Л. Соболевым, относящиеся к периоду 1952—1961 гг., сыграли огромную роль в признании кибернетики как науки и развитии информатики в Советском Союзе и в нескольких других странах. В 1951-52 годах А. И. Китов, ознакомившись в библиотеке секретного конструкторского бюро по разработке ЭВМ СКБ-245 с оригиналом книги американского учёного Норберта Винера «Кибернетика», сразу же оценил большую пользу для Общества, которую эта новая наука может принести. Не только оценил, но и написал развернутую положительную статью «Основные черты кибернетики», что потребовало от него проявления в то сталинское время истинного гражданского мужества. Затем прошло около полутора лет многочисленных публичных выступлений о кибернетике А. И. Китова и А. А. Ляпунова, прежде чем Идеологический отдел ЦК КПСС санкционировал публикацию этой статьи. В середине 1955 года эта статья с подписями академика С. Л. Соболева, А. И. Китова и А. А. Ляпунова была опубликована в главном идеологическом коммунистическом журнале «Вопросы философии». Эта статья вошла в историю российской науки как победный момент в борьбе за кибернетику. В вышедшем в 1955 году дополнительном тираже 4-го издания «Краткого философского словаря» критическая статья про кибернетику уже отсутствует.

В 1955 году был принят на вооружение комплекс ПВО С-25 Беркут, в котором применялась обработка данных от радиолокаторов и управление ракетами с применением счетно-решающего устройства. Главные конструкторы - С. Л. Берия и П. Н. Куксенко. Заместитель главного конструктора - А.Расплетин.

В 1956 году была опубликована монография А. И. Китова «Электронные цифровые машины», послужившая толчком к популяризации данного направления в широких научных кругах (например, «главный кибернетик страны» В. М. Глушков неоднократно подчеркивал своё первое знакомство с компьютерами по книжке Китова).

В это же время началось издание научно-популярной литературы. В 1958 году в издательстве «Советское радио» выходит перевод книги Н. Винера «Кибернетика, или Управление и связь в животном и машине».

Развивались системы автоматизации производства и АСУ ТП. В 1958 году на базе Лаборатории управляющих машин и систем (ЛУМС) АН СССР был организован Институт электронных управляющих машин (ИНЭУМ) АН СССР в числе задач которого была и разработка систем управления производством в целом. В том же 1958 году началась разработка управляющих машины «Днепр» и УМ-1НХ, предназначенных для управления технологическими процессами.

1.2 Развитие программирования в 60-70 годы

Прогресс компьютерных технологий определил процесс появления новых разнообразных знаковых систем для записи алгоритмов языков программирования. Смысл появления такого языка — упрощение программного кода.

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

Языки программирования принято делить на пять поколений. В первое поколение входят языки, созданные в начале 50-х годов, когда первые компьютеры только появились на свет. Это был первый язык ассемблера, созданный по принципу «одна инструкция - одна строка».

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

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

Довольно скоро стало понятно, что процесс формирования машинного кода можно автоматизировать. Уже в 1950 году для записи программ начали применять мнемонический язык - язык assembly. Язык ассемблера позволил представить машинный код в более удобной для человека форме: для обозначения команд и объектов, над которыми эти команды выполняются, вместо двоичных кодов использовались буквы или сокращенные слова, которые отражали суть команды. Например, на языке ассемблера команда сложения двух чисел обозначается словом add, тогда как ее машинный код может быть таким: 000010.

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

Но сложность разработки в нём больших программных комплексов привела к появлению языков третьего поколения — языков высокого уровня. Но на этом применение ассемблера не закончилась, он пользуется популярностью в узких кругах и по сей день. Сейчас его используют в написании отдельных фрагментов программ или иногда в написании самих программ. Примеров может быть много, но самые яркие это использование ассемблера в написании драйверов, игр и загрузчиков ОС. Не стоит забывать, что у хакеров этот язык так же пользуется популярностью, в связи с тем, что скорость работы полученной программы значительно выше скорости программы написанной на языке программирования высокого уровня. Это объясняется тем, что получившийся размер программы очень мал. Разработчики антивирусов так же используют ассемблер в некоторых модулях своих программ, что так же обеспечивает их быстродействие.

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

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

Довольно скоро стало понятно, что процесс формирования машинного кода можно автоматизировать. Уже в 1950 году для записи программ начали применять мнемонический язык - язык assembly. Язык ассемблера позволил представить машинный код в более удобной для человека форме: для обозначения команд и объектов, над которыми эти команды выполняются, вместо двоичных кодов использовались буквы или сокращенные слова, которые отражали суть команды. Например, на языке ассемблера команда сложения двух чисел обозначается словом add, тогда как ее машинный код может быть таким: 000010.

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

Но сложность разработки в нём больших программных комплексов привела к появлению языков третьего поколения - языков высокого уровня. Но на этом применение ассемблера не закончилась, он пользуется популярностью в узких кругах и по сей день. Сейчас его используют в написании отдельных фрагментов программ или иногда в написании самих программ. Примеров может быть много, но самые яркие это использование ассемблера в написании драйверов, игр и загрузчиков ОС. Не стоит забывать, что у хакеров этот язык так же пользуется популярностью, в связи с тем, что скорость работы полученной программы значительно выше скорости программы написанной на языке программирования высокого уровня. Это объясняется тем, что получившийся размер программы очень мал. Разработчики антивирусов так же используют ассемблер в некоторых модулях своих программ, что так же обеспечивает их быстродействие.

В 60-х годах 20 века программирование развивалось благодаря комитетам. В 70-х ситуация кардинально изменилась – теперь новые языки придумывали небольшие группы людей. Это произошло благодаря доступности компьютера – теперь заполучить ЭВМ мог буквально любой человек. Именно в 70-х берёт своё начало история языков Pascal и C.

Dartmouth BASIC

Но прежде всего 70-е в программировании ознаменовались подъёмом BASIC. Он был создан в 60-х Джоном Кемени и Томасом Курцем в Дартмутском колледже в США, и должен был выполнить две основные функции:

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

Сделать программирование общедоступным курсом.

Однако мгновенного отклика BASIC не нашёл. Комитеты, отвечавшие за разработку Фортрана, Алгола и Кобола, преследовали совершенно иные цели, а потому на высших уровнях до образовательного языка долгое время не было никакого дела. В первой версии BASIC было несколько ограничений:

Оперировать можно было только функциями LET, PRINT, END, FOR, NEXT, GOTO, IF THEN, DEF, READ, DATA, DIM, GOSUB, RETURN и REM.

Не было различия между целыми и действительными числами.

Имя переменной было ограничено одной буквой или одной буквой и цифрой.

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

Первые массовые ПК имели не более 4 Кбайта памяти, позднее - 16 Кбайт. В определённой степени это было возвращение на 20 лет назад, ведь компиляторы языка высокого уровня занимали сотни килобайт, поэтому часто приходилось работать с машинными командами и кодами. Но было одно исключение - BASIC.

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

https://uploads.hb.cldmail.ru/geekbrains/public/ckeditor_assets/pictures/4844/content-69d1aafe17ed120416a3876330975bd5.jpg

Altair-8800. ПК, который изменил мир.

Первым совместным проектом Пола Аллена и Билла Гейтса был как раз интерпретатор BASIC для PDP 8 (мини-ПК). Они учились в средней школе, когда свет увидел компьютер Altair из MITS. Юные изобретатели увидели в этом уникальную возможность, урезали свой интерпретатор до 4 Кбайт так, чтобы он позволял системе запустить небольшую программу.

Билл Гейтс утверждает, что им потребовалось три с половиной недели, чтобы подготовить первую версию и около восьми недель, чтобы отполировать ее. Чтобы вы лучше представляли, как сложно уместить интерпретатор в 4 Кбайт: им пришлось урезать традиционное READY до OK, чтобы выиграть три байта памяти.

Продукт получил название «4K BASIC» - первая версия Microsoft BASIC. Было много других реализаций языка для Altair и не только - Tiny BASIC Ли Чен Вана, TRS-80 BASIC Стива Лэйнинера, EBASIC и CBASIC Гордона Эубэнкса, 6800 BASIC Роберта Уиттеркика, целая серия интерпретаторов BASIC для Apple от Стива Возняка. Но именно Microsoft BASIC Билла Гейтса оказал наибольшее влияние на программирование и ПО в целом.

Всё дело в его деловой хватке и даре убеждения - даже японцы купили Microsoft BASIC. Вишенкой на торте стало включение детища Гейтса и Аллена в IBM PC. Microsoft продолжала разрабатывать BASIC вплоть до 90-х годов, а окончательной версией стал Quick BASIC - полностью структурированный язык, который сохранил свою простоту и понятность.

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

Взяв за основу Algol, в 1972 году Вирт создал язык Pascal, названный в честь французского математика XVII века Блеза Паскаля. Упрощение коснулось не только синтаксиса, но и компиляции. Например, функции и процедуры должны быть определены в начале программы, это позволяло использовать однопроходный компилятор.

Pascal стал очередной революцией в программировании.

Несмотря на критику, Pascal был очень быстро принят компьютерным сообществом. Причиной стал умный способ сделать его доступным для большинства машин без необходимости писать для каждой компиляторы с нуля. Вирт создал компилятор, который переводил код Pascal в пи-код (язык ассемблера). Далее всё, что нужно было сделать для работы на конечном устройстве - написать простой интерпретатор пи-кода, что намного проще, чем каждый раз писать компилятор Pascal.

Именно так до бытового уровня дошла идея использования виртуальной машины – концепции программирования, которая особенно прославится в конце века благодаря языку Java и машине JVM.

Точкой же взлёта Pascal стало появление UCSD Pascal. Кеннет Боулс создал не просто ещё один компилятор, но и операционную систему с утилитами в пи-коде. Система UCSD появилась в 1976 году, а статья в журнале Byte в следующем году принесла ей известность и востребованность на рынке ПК. Популярность была такой большой, что USCD была представлена на презентации очередного IBM PC как альтернативная ОС.

Войны BASIC и Pascal

Неудивительно, что всё это привело к настоящей битве за доминирование между BASIC и Pascal. В каком-то роде это было продолжение противостояния из прошлого десятилетия – Algol против Fortran или Cobol. Однако, если тогда это было просто идеологическое противостояние на уровне комитетов, теперь появилась новая реальная сила – мнение простых людей. И уже тогда было понятно, что именно здесь лежит будущее программирования.

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

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

Пока BASIC и Pascal боролись за умы начинающих программистов, многие корпорации были озабочены разработкой мощного универсального языка высокого уровня, который бы был производительнее и удобнее тех, над которыми трудились комитеты. Больше всего в этом преуспела компания Bell Labs - именно здесь увидели свет операционная система Unix и язык программирования C.

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

В результате в Великобритании появились сначала системный язык CPL, а потом его урезанный младший брат - BCPL (базовый CPL). Его слава добралась до другой стороны Атлантики, где Кен Томпсон, сотрудник Bell Labs, выпустил еще более упрощённую версию BCPL - B. В то время Unix разрабатывался на ассемблере, поэтому B стал настоящим панацеей для компании.

Позднее Деннис Ритчи переработал некоторые идеи Томпсона, и создал C (просто следующая буква алфавита). Язык сочетал в себе функции низкого уровня со структурой Algol. Таким образом, вначале C получил известность как структурированный язык ассемблера.

Самым ярким доказательством качества языка являлось то, что основная часть Unix, кроме небольшого ядра, была полностью переписана на C. Именно так, рука об руку, язык и ОС Unix существовали первые годы. Но слава распространялась, и в конечном итоге С начал использоваться в других операционных системах, и как итог - получил славу языка общего назначения.

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

Комитетские языки

Для Fortran и Cobol 70-е годы были временем перезапуска. Первый в 77 версии обзавёлся строковым типом, освоил блочную конструкцию if-else, расширил возможности по работе с файлами. Cobol-74 стал более статичным и ещё больше расширил синтаксис в угоду финансовым структурам.

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

В СССР лишь в 1978 году появляется первый стандарт на комитетский язык – им стал Фортран. Разумеется, речь шла о базисном языке, а не его свежем диалекте. ГОСТ на Алгол-68 вышел спустя 10 лет, и, если вы его откроете, то узнаете причину задержки - синтаксис языка был полностью переведён на русский язык. Именно поэтому сложилось впечатление, что Фортран в СССР был больше востребован. На самом деле так было только в образовании. В науке и обороне Алгол был востребован ничуть не меньше.

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

Глава 2. Развитие программирования в современной России

2.1 Развитие объектно-ориентированного программирования

Первым языком программирования, в котором были предложены принципы объектной ориентированности, была Симула. В момент своего появления (в 1967 году), этот язык программирования предложил поистине революционные идеи: объекты, классы, виртуальные методы и др., однако это всё не было воспринято современниками как нечто грандиозное. Тем не менее, большинство концепций были развиты Аланом Кэйем и Дэном Ингаллсом в языке Smalltalk. Именно он стал первым широко распространённым объектно-ориентированным языком программирования.

В настоящее время количество прикладных языков программирования (список языков), реализующих объектно-ориентированную парадигму, является наибольшим по отношению к другим парадигмам. В области системного программирования до сих пор применяется парадигма процедурного программирования, и общепринятым языком программирования является язык C. Хотя при взаимодействии системного и прикладного уровней операционных систем заметное влияние стали оказывать языки объектно-ориентированного программирования. Например, одной из наиболее распространенных библиотек мультиплатформенного программирования является объектно-ориентированная библиотека Qt, написанная на языке C++.

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

Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной ориентированности - для этого требуется наличие наследования.

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

Язык Self, соблюдая многие исходные положения объектно-ориентированного программирования, ввёл альтернативное классам понятие прототипа, положив начало прототипному программированию, считающемуся подвидом объектного.

Понятию “объект” сопоставляют ряд дополняющих друг друга определений. Ниже приведены некоторые из них.

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

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

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

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

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

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

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

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

- активного или воздействующего объекта, когда он воздействует на другие объекты, но сам воздействию не подвергается;

- пассивного или исполняющего, когда объект подвергается воздействию, но сам на другие объекты не воздействует;

- посредника, если объект и воздействует и сам подвергается воздействию.

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

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

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

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

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

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

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

Можно выделить пять типов операций:

- конструктор, создание и инициализация объекта;

- деструктор, разрушающий объект;

- модификатор, изменяющий состояние объекта;

- селектор для доступа к переменным объекта без их изменения;

- итератор для доступа к содержанию объекта по частям в определенной последовательности.

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

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

2.2 Актуальные проблемы развития программирования

Исследование Thomas E. Potok, Mladen Vouk и Andy Rindos показало отсутствие значимой разницы в продуктивности разработки программного обеспечения между ООП и процедурным подходом.

Кристофер Дэйт указывает на невозможность сравнения ООП и других технологий во многом из-за отсутствия строгого и общепризнанного определения ООП.

Александр Степанов, в одном из своих интервью, указывал на то, что ООП «методологически неправильно» и что «… ООП практически такая же мистификация как и искусственный интеллект…».

Фредерик Брукс (Frederick P. Brooks, Jr.) в своей статье «No Silver Bullet. Essence and Accidents of Software Engineering» (Computer Magazine; April 1987) указывает на то, что наиболее сложной частью создания программного обеспечения является « … спецификация, дизайн и тестирование концептуальных конструкций, а отнюдь не работа по выражению этих концептуальных конструкций…». ООП (наряду с такими технологиями как искусственный интеллект, верификация программ, автоматическое программирование, графическое программирование, экспертные системы и др.), по его мнению, не является «серебряной пулей», которая могла бы на порядок величины (то есть примерно в 10 раз, как говорится в статье) снизить сложность разработки программных систем. Согласно Бруксу, «…ООП позволяет сократить только привнесённую сложность в выражение дизайна. Дизайн остаётся сложным по своей природе…».

Эдсгер Дейкстра указывал: «… то о чём общество в большинстве случаев просит - это змеиное масло. Естественно, „змеиное масло“ имеет очень впечатляющие имена, иначе будет очень трудно что-то продать: „Структурный анализ и Дизайн“, „Программная инженерия“, „Модели зрелости“, „Управляющие информационные системы“ (Management Information Systems), „Интегрированные среды поддержки проектов“, „Объектная ориентированность“, „Реинжиниринг бизнес-процессов“…».

Никлаус Вирт считает, что ООП - не более чем тривиальная надстройка над структурным программированием, и преувеличение её значимости, выражающееся, в том числе, во включении в языки программирования всё новых модных «объектно-ориентированных» средств, вредит качеству разрабатываемого программного обеспечения.

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

Обычно сравнивают объектное и процедурное программирование:

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

Объектное - когда важна управляемость проекта и его модифицируемость, а также скорость разработки.

Патрик Киллелиа в своей книге «Тюнинг веб-сервера» писал: «… ООП предоставляет вам множество способов замедлить работу ваших программ …»

Известная обзорная статья проблем современного ООП-программирования перечисляет некоторые типичные проблемы ООП - Почему объектно-ориентированное программирование провалилось.

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

1. Критика рекламы ООП.

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

2. Оспаривание эффективности разработки методами ООП.

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

3. Производительность объектно-ориентированных программ.

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

4. Критика отдельных технологических решений в ООП-языках и библиотеках.

Эта критика многочисленна, но затрагивает она не ООП как таковое, а приемлемость и применимость в конкретных случаях тех или иных реализаций её механизмов. Одним из излюбленных объектов критики является язык C++, входящий в число наиболее распространённых промышленных ООП-языков.

Гради Буч указывает на следующие причины, приводящие к снижению производительности программ из-за использования объектно-ориентированных средств:

Динамическое связывание методов.

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

Значительная глубина абстракции.

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

Наследование «размывает» код.

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

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

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

Инкапсуляция снижает скорость доступа к данным.

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

Динамическое создание и уничтожение объектов.

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

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

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

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

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

Однако, Borland Pascal не вынуждает нас делать это. Как всякое структурное программирование, объектно-ориентированное программирование является дисциплиной, которую мы должны навязать себе, используя предоставляемые языком средства. Borland Pascal позволяет нам обращаться к полям объекта непосредственно извне объекта, однако он поощряет нас использовать преимущества объектно-ориентированного программирования и создавать методы для манипулирования полями объекта внутри самого объекта.

Итак, подведем некоторый итог. Что такое объект?

Объект состоит из структуры данных и связанных с ней процедур (которые называются методами), которые работают с данными, записанными в экземплярах структуры данных.

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

Полиморфизм означает, что один и тот же метод выполняется по-разному для различных объектов. Например, метод класса Музыкальный инструмент - PlayMusicForAnOrchestra (играй музыку для оркестра) - может быть определен как общий метод, который может использоваться с любой категорией музыкальных инструментов. Этот метод написан таким образом, что не важно, какой именно инструмент получает задание играть, однако для классов, описывающих конкретные инструменты, данный метод должен быть переопределен (override), что даст возможность определить конкретные действия, учитывающие особенности данного инструмента.

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

Современный объектно-ориентированный язык предлагает, как правило, следующий обязательный набор синтаксических средств:

Объявление классов с полями (данными - членами класса) и методами (функциями - членами класса).

Часть языков (иногда называемых «чисто объектными») целиком построена вокруг объектных средств - в них любые данные (возможно, за небольшим числом исключений в виде встроенных скалярных типов данных) являются объектами, любой код - методом какого-либо класса, и невозможно написать программу, в которой не использовались бы объекты. Примеры подобных языков - C#, Smalltalk, Java, Ruby. Другие языки (иногда используется термин «гибридные») включают ООП-подсистему в исходно процедурный язык. В них существует возможность программировать, не обращаясь к объектным средствам. Классические примеры - C++ и Delphi.

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

Средства защиты внутренней структуры классов от несанкционированного использования извне. Обычно это модификаторы доступа к полям и методам, типа public, private, обычно также protected, иногда некоторые другие.

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

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

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

Заключение

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

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

В курсовой работе был описан процесс развития вычислительной техники и программирования в нашей стране, что повлияло на развитие. Также показано разнообразие алгоритмических языков. Результатом работы явилось описание языков, приведены примеры. Показано, какими техническими трудностями приходилось разрабатывать и использовать программы на первых ЭВМ. Видно, какую огромную роль сыграли электронно-вычислительные машины серии БЭСМ в CCCР. Описан процесс появления и внедрения персональных компьютеров и связанных с этим перевод программ на языки программирования, используемых на ПК. Показана история появления Интернета в России, когда появились первые сайты. Какие языки потребовались для их разработки. В процессе работы мы ознакомились со многими языками программирования, примерами их использования. Очень трудно порой выбрать язык программирования. На основе примеров использования и развития языков работа может помочь выбрать язык программирования для решения возникших задач. Большинство фирм, занимающихся разработкой языков программирования, выпускают новые версии. Но бывает, что у предприятий возникает потребность перевести программы с устаревших языков. Работа также может помочь в выборе нового языка, подходящего для использования. Описан процесс появления, внедрения и использования языков, таких, как Алгол, Паскаль, Безик, СИ, СИ++, Delphi, Java, Javascript, Go.

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

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

Список использованной литературы и источников

  1. Баранов А.Н., Крейдлин Е.Г. Программирование // ВЯ, № 2. 2019. с.84-99.
  2. Григорьев Ю.А., Ревунков Г.И. Банки данных: Учеб. для вузов. М: Изд-во МГТУ им. Н.Э. Баумана, 2017.
  3. Дейт, К. Руководство по реляционной СУБД [Текст] / К. Дейт. 2016. – М. – 519 с. –ISBN – 5-3216-3254-4.
  4. Инструментарий ARIS. Методы. Версия 4.1 М.: Весть-Мета Технология, 2018.
  5. Куправа, Т.А. Создание и программирование баз данных средствами СУБД dBase III Plus, FoxBASE Plus, Clipper [Текст] / Т.А. Куправа. – М. : Мир, 2019. – 468 с. – ISBN 6-0934-22981-3.
  6. Мартин, Г. SQL: Справочное руководство [Текст] / Г. Мартин. – М. : Лори, 2018. – 316 с. – ISBN 7-0932-023411-9.
  7. Монахов, В. Язык программирования Pascal [Текст] / В. Моняхов. – СПб. : БХВ-Петербург, 2017. - 640 с. - ISBN 978-5-9775-0216-0.
  8. Моргун, А. Н. Справочник по Turbo Pascal для студентов [Текст] / А. Н. Моргун. – М. : Вильямс, 2016. – 608 с. ISBN 5-8459-1028-5.
  9. Орлов С.А. Технологии разработки программного обеспечения: Учебник для вузов. ‑3-е издание. СПб.: Питер, 2018.
  10. Сафронов, И. Visual Basic в задачах и примерах [Текст] / И. Сафронов. – СПб. : БХВ-Петербург, 2019. - 400 с. - ISBN 5-94157-495-9.
  11. Фаронов, В. В. Turbo Pascal. Наиболее полное руководство [Текст] / В. В. Фарофонтов. – СПб. : Питер, 2017. – 763 с. - ISBN 5-89251-054-9.
  12. Фрост Р., Дей Дж., Ван К., Базы данных. Проектирование и разработка. М.: NT Пресс, 2016.
  13. Хорстманн, К. С., Корнелл, Г. Java 2. Библиотека профессионала [Текст] / К. С. Хорстман, Г. Корнелл. – М. : Вильямс, 2018. - 898 с. - ISBN 978-5-8459-0970-1.
  14. Шафрин Ю.А. Информационные технологии в 2ч. Ч.1: Основы информатики и информационных технологий / Шафрин Ю.А. – М.: БИНОМ. Лаборатория знаний, 2016. – 316 с.
  15. Шилдт, Г. Полный справочник по С++ [Текст] / Г. Шилдт. - М. : Вильямс, 2017. – 800 с. - ISBN 5-8459-0563-X.

Приложение А

https://cf.ppt-online.org/files/slide/y/YWIDyzjkvT3sbGmEaPLVCRUBNow0c295XqefHK/slide-3.jpg

Приложение Б

https://ds04.infourok.ru/uploads/ex/0405/000b9cc4-87e03312/img1.jpg