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

История возникновения и развития языка программирования Си (С++) и Java (ИССЛЕДОВАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ)

Содержание:

ВВЕДЕНИЕ

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

Язык программирования — это набор правил для компьютера или вычислительного устройства с целью решения определенных задач. Термин «язык программирования» обычно относят к языкам высокого уровня, таким как BASIC, C, C ++, COBOL, Java, FORTRAN, Ada, Pascal.

Компьютер понимает только значения в виде единиц и нулей. Однако программировать на таком уровне является очень сложной задачей для программиста.

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

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

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

Цель данной работы исследование истории возникновения и развития языков программирования С (С++) и Java. Соответственно, объектами исследования являются такие языки, как С, С++ и Java, а предметом исследования их история возникновения и развития.

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

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

  • раскрытие понятия «программирование»;
  • анализ высокоуровневых языков программирования;
  • исследование возникновения и развития языков C, C++ и Java;
  • анализ перспективы развития этих языков;
  • изучение литературы в данной области.

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

ГЛАВА 1. ИССЛЕДОВАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ

1.1 Теоретические понятия программирования

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

Программа – это последовательность команд, понятных компьютеру.

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

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

Процессы управления не только компьютерами, но всеми другими техническими устройствами и системами сводятся к реализации определенных алгоритмов, что показывает принадлежность алгоритмизации и понятия алгоритма к их родовой дисциплине – кибернетике. [1, 3, 21]

Свойства алгоритма:

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

Два других краеугольных термина информатики – это структуры и базы данных.

Данные – это информация, переносимая во времени, то есть хранящаяся на физическом носителе информации в виде знаков, символов, значений, для ее последующего использования через какое-то время: наносекунды, секунды, часы, годы, тысячелетия. [12, 14]

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

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

1.2 Высокоуровневые языки программирования

Fortran — это первый компилируемый язык, созданный Джимом Бэкусом в 50-е годы. Программисты, разрабатывавшие программы исключительно на ассемблере, выражали серьезное сомнение в возможности появления высокопроизводительного языка высокого уровня, поэтому основным критерием при разработке компиляторов Фортрана являлась эффективность исполняемого кода. Хотя в Фортране впервые был реализован ряд важнейших понятий программирования, удобство создания программ было принесено в жертву возможности получения эффективного машинного кода. Однако для этого языка было создано огромное количество библиотек, начиная от статистических комплексов и кончая пакетами управления спутниками, поэтому Фортран продолжает активно использоваться во многих организациях, а сейчас ведутся работы над очередным стандартом Фортрана F2k, который появится в 2000 году. Имеется стандартная версия Фортрана HPF (High Performance Fortran) для параллельных суперкомпьютеров со множеством процессоров. [1, 19] В целом, классификация языков показана на рисунке 1.

D:\studwork\Вариант 11. История возникновения и развития языка программирования Си(С++) и Java\Языки программирования.png

Рисунок 1 — Классификация языков программирования

Cobol — это компилируемый язык для применения в экономической области и решения бизнес-задач, разработанный в начале 60-х годов. Он отличается большой «многословностью» — его операторы иногда выглядят как обычные английские фразы. В Коболе были реализованы очень мощные средства работы с большими объемами данных, хранящимися на различных внешних носителях. На этом языке создано очень много приложений, которые активно эксплуатируются и сегодня. Достаточно сказать, что наибольшую зарплату в США получают программисты на Коболе. [3, 15]

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

Язык Паскаль, созданный в конце 70-х годов основоположником множества идей современного программирования Никлаусом Виртом, во многом напоминает Алгол, но в нем ужесточен ряд требований к структуре программы и имеются возможности, позволяющие успешно применять его при создании крупных проектов. Basic (Бейсик). Для этого языка имеются и компиляторы, и интерпретаторы, а по популярности он занимает первое место в мире. Он создавался в 60-х годах в качестве учебного языка и очень прост в изучении. [12]

С (Си). Язык Си (C) создан в 1972 г. Д.Ритчем (D.Ritchie) и К.Томпсоном (K.Thompson) из Bell Labs/Lucent Technologies при поддержке Б.Кернигана. Ими же в 1973 г. на языке Си представлена операционная система UNIX. В рекламных целях UNIX в университетах распространялся почти бесплатно, вместе с UNIX распространялся и Си. Благодаря эффективности исполнения программ, написанных на этом языке, он получил широкое распространение. До сих пор Си – один из лучших языков для системного программирования. Он стандартизован в 1989 г., стандартная версия языка обозначается ANSI C. Данный язык был создан в лаборатории Bell и первоначально не рассматривался как массовый. Он планировался для замены ассемблера, чтобы иметь возможность создавать столь же эффективные и компактные программы, и в то же время не зависеть от конкретного типа процессора. Си во многом похож на Паскаль и имеет дополнительные средства для прямой работы с памятью (указатели). На этом языке в 70-е годы написано множество прикладных и системных программ и ряд известных операционных систем (Unix). [14, 19]

Си++ — это объектно-ориентированное расширение языка Си, созданное Бьярном Страуструпом в 1980 году. Множество новых мощных возможностей, позволивших резко повысить производительность программистов, наложилось на унаследованную от языка Си определенную низкоуровневость, в результате чего создание сложных и надежных программ потребовало от разработчиков высокого уровня профессиональной подготовки.

Язык программирования Java разработан в 1995 г. Джеймсом Гослингом из компании Sun Microsystems на основе Си++. Он призван упростить разработку приложений на основе Си++ путем исключения из него всех низкоуровневых возможностей. Но главная особенность этого языка — компиляция не в машинный код, а в платформно-независимый байт-код (каждая команда занимает один байт). Этот байт- код может выполняться с помощью интерпретатора — виртуальной Java-машиныJVM (Java Virtual Machine), версии которой созданы сегодня для любых платформ. Благодаря наличию множества Java-машин программы на Java можно переносить не только на уровне исходных текстов, но и на уровне двоичного байт-кода, поэтому по популярности язык Ява сегодня занимает второе место в мире после Бейсика. Особое внимание в развитии этого языка уделяется двум направлениям: поддержке всевозможных мобильных устройств и микрокомпьютеров, встраиваемых в бытовую технику (технология Jini) и созданию платформно-независимых программных модулей, способных работать на серверах в глобальных и локальных сетях с различными операционными системами (технология Java Beans). Пока основной недостаток этого языка — невысокое быстродействие, так как язык Ява интерпретируемый. [12, 14, 19]

В данной главе были рассмотрены понятие «программирование» и проведён обзор нескольких высокоуровневых языков программирования. В последующих главах будут подробнее рассмотрены языки C++ и Java.

ГЛАВА 2. ИСТОРИЯ ВОЗНИКНОВЕНИЯ И РАЗВИТИЯ ЯЗЫКА C/C++

2.1 Появление языка С

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

  • операционные системы;
  • компиляторы языка;
  • текстовые редакторы;
  • сетевые драйверы;
  • базы данных;
  • языковые переводчики.

Язык С составляет подмножества языка С++. Практически более новый язык включает в себя весь С и добавляет ему новые функции, а самое главное — объектно-ориентированную парадигму. [3, 14, 17]

Программа на C может состоять от 3 до миллионов строк и может быть записана в один или несколько текстовых файлов с расширением «.c» ; например, hello.c

Язык B был полезен в контексте проблем, с которыми сталкиваются создатели UNIX в операционной системе. Язык B был взят из BCPL Мартином Ричардсом. Как уже говорилось, UNIX была написана на ассемблере. Чтобы выполнять даже небольшие операции в UNIX, нужно было писать много страниц кода. Язык B решил эту проблему. В отличие от ассемблера требовал значительно меньше строк кода для выполнения каких-то задач в UNIX. Тем не менее, было много того, что B не мог сделать. Гораздо больше ожидалось от B в контексте быстро меняющихся требований. Например, B не распознает типы данных. Даже в языке B типы данных были выражены машинным языком. Он также не поддерживает структуры данных.

Было ясно, что-то должно измениться. Итак, Ритчи и его коллеги приступили к преодолению препятствий, стоящих перед ними. Язык C был разработан в 1971-73 годах. При всех своих ограничениях C обязан своим рождением B, поскольку C сохранил много того, что предложил B, добавив такие новшества, как типы данных и структуры данных. Название C было выбрано потому, что оно шло за B. [6]

В ранние годы C был разработан с учетом UNIX. C использовался для выполнения задач и управления UNIX системой. Сохранив производительность многие компоненты UNIX были переписаны на язык C с языка ассемблер. Например, ядро UNIX было переписано в 1973 году на DEC PDP-11.

Ритчи и Керниган задокументировали их новый язык в виде книги под названием «Язык программирования C». Хотя Керниган утверждал, что не играл роли в создании C, он был автором знаменитой программы «Hello World» и многих других программ UNIX. [14, 16]

2.2 Эволюция языка С

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

Первое изменение произошло, когда Американский национальный институт стандартов (ANSI) сформировал комитет в 1983 году для стандартизации C. После обзора языка они немного изменили его, чтобы он был также совместим с другими программами, которые были до C. Таким образом, новый стандарт ANSI появился в 1989 году и известен как ANSI C или C89. Международная организация по стандартизации (ISO) также способствовали стандартизации C. [3]

Со временем C развился, так как он добавил в свой богатый набор некоторые важные опции, такие как управление памятью, функции, классы и библиотеки. C используется в разработке многих крупнейших проектов в мире. C также повлиял на развитие множества языков, таких как AMPL, AWK, C ++, C--, C#, Objective-C , Bit C, D, Go, Java, JavaScript , Julia, Limbo, LPC, Perl, PHP, Pike, Processing, Python , Rust, Seed7 и Verilog. [14, 16, 17]

За появление Microsoft Windows нужно поблагодарить язык C, потому что разработан Windows в основном на C. То же самое касается MacOS, Linux, Android, iOS и Windows Phone, потому что почти все современные операционные системы основаны на C. Он также широко используется во встроенных системах, такие как датчики в автомобилях, интеллектуальные мониторы и бесчисленные интернет-устройства (интернет вещей).

Некоторые из проектов, которые разрабатываются на С:

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

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

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

2.3 История развития языка С++

C++ — это язык объектно-ориентированного программирования общего назначения (OOP), является расширением языка C. Это даёт возможность программировать на C++ в стиле «C» или же в «объектно-ориентированном стиле». В некоторых случаях он может использовать оба варианта, что показывает эффективным примером гибридного языка. [6, 16]

C++ считается языком промежуточного уровня, поскольку он инкапсулирует как языковые функции высокого, так и низкого уровня. Первоначально язык назывался «C с классами», так как он обладал всеми свойствами языка C с дополнительным понятием «классы». Однако в 1983 году он был переименован в C++.

C++ — один из самых популярных языков, в основном используется в системном и прикладном программном обеспечении, при написании драйверов, и при разработке клиент-серверных приложений. [7]

Основная особенность языка C++ в наборе шаблонных классов, в которых имеются самые часто используемые алгоритмы и контейнеры. Они уже написаны и могут много раз использоваться разработчиками при написании своих программ. Язык также облегчает объявление пользовательских классов. Классы используют функции для реализации определенных требований. Можно создавать множество объектов класса, у которых будут все свойства определенные для данной сущности. Объекты могут быть определены как экземпляры, и созданы прямо во время выполнения. Эти классы также могут быть унаследованы другими новыми классами, которые по умолчанию используют публичные свойства своих предков и реализует их в своих объектах. [17]

C++ включает в себя большое количество операторов, таких как:

  • арифметически операторы;
  • операторы сравнения;
  • операторы составного присваивания;
  • побитовые операторы;
  • логические операторы;
  • операторы работы с указателями и членами класса.

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

К основным концепциям С++ относятся полиморфизм, инкапсуляция и наследование. Они вместе составляют основную концепцию объектно-ориентированного программирования. [17]

C++ является одним из самых популярных языков программирования и работает на самых разных платформах оборудования и операционных систем. В качестве эффективного компилятора для собственного кода он реализует себя в таких областях, как системное программное обеспечение, прикладное программное обеспечение, драйверы устройств, встроенное программное обеспечение, высокопроизводительные серверные и клиентские приложения и развлекательное программное обеспечение, такие как видеоигры. Несколько групп разработчиков предоставляют как бесплатное, так и проприетарное программное обеспечение для компилятора C++, включая GNU Project, LLVM, Microsoft и Intel.

C++ сильно повлиял на многие другие популярные языки программирования, в первую очередь на C # и Java. [3, 16]

Язык программирования C++ имеет историю, восходящую к 1979 году, когда Бьёрн Страуструп работал над своей кандидатской диссертацией. Одним из языков, который был создан Страуструпом, был язык под названием «Simula», который, как следует из названия, является языком, в основном предназначенным для моделирования. Язык Simula 67, который был вариантом, с которым работал Страуструп, рассматривается как первый язык для поддержки парадигмы объектно-ориентированного программирования. Страуструп обнаружил, что эта парадигма очень полезна для разработки программного обеспечения, однако язык Simula был слишком медленным для практического использования. [12, 14]

Вскоре после этого он начал работу над языком «C с классами», которая, как следует из названия, должна была быть надмножеством языка C. Его целью было добавить объектно-ориентированное программирование в язык C, который был языком, активно используемым из-за его возможности быть переносимым, не теряя при этом скорости или функциональности. Его язык включал в себя классы, базовое наследование, аргументы функций по умолчанию и строгую проверку типов в дополнение ко всем функциям языка C.

Первый компилятор C с классами был назван Cfront, который был получен из компилятора C под названием CPre. Это была программа, предназначенная для перевода C с кодом Classes на обычный C. Интересным моментом, является то, что Cfront был написан в основном на C с классами, что делает его компилятором для самостоятельной компиляции (компилятор, который может скомпилировать себя). Позднее Cfront будет оставлен в 1993 году после того, как стало сложно интегрировать в него новые функции, а именно исключения C++. Тем не менее, Cfront оказал огромное влияние на реализации будущих компиляторов и операционной системы Unix. [17]

В 1983 году название языка было изменено с C с классами на C++. Оператор ++ на языке C является оператором для увеличения переменной, что дает некоторое представление о том, как Страуструп рассматривал этот язык. В это время было добавлено много новых функций, наиболее заметными из которых являются виртуальные функции, перегрузка функций, ссылки на символ &, ключевое слово const и однострочные комментарии с использованием двух косых черт (что является опцией, взятой из языка BCPL).

В 1985 году труд Страуструпа под названием «Язык программирования C++» был опубликован. В том же году C++ был переведен в ранг коммерческого продукта. Язык еще не был официально стандартизован, что делало книгу очень важным трудом. Язык был обновлен снова в 1989 году, чтобы включить защищенные и статические члены, а также наследование из нескольких классов. [14]

В 1990 году было выпущено справочное руководство Annotated C++. В том же году компилятор Borland Turbo C++ будет выпущен как коммерческий продукт. Turbo C++ добавил множество дополнительных библиотек, которые существенно повлияли на разработку C++. Хотя последний стабильный выпуск Turbo C ++ был в 2006 году, компилятор по-прежнему широко используется. [17]

В 1998 году Комитет по стандартам С++ опубликовал первый международный стандарт для C++ ISO/IEC 14882:1998, который стал неофициально известен под именем C++98. Было упомянуто, что справочное руководство Annotated C++ оказывает большое влияние на разработку стандарта. Также была включена Библиотека стандартных шаблонов, которая начала свою концептуальную разработку в 1979 году. В 2003 году комитет ответил на многочисленные жалобы, о которых сообщалось, со своим стандартом 1998 года, и соответствующим образом пересмотрел его. Измененный язык был назван C++ 03. [10, 17]

В 2005 году комитет по стандартам C++ опубликовал технический отчет (получивший название TR1), в котором подробно описаны различные функции, которые они планировали добавить к последнему стандарту C++. Новый стандарт был неофициально назван C++ 0x, поскольку ожидалось, что он будет выпущен до конца первого десятилетия. Как ни странно, однако, новый стандарт не был выпущен до середины 2011 года. Несколько технических отчетов были выпущены до тех пор, и некоторые компиляторы начали добавлять экспериментальную поддержку для новых функций. [16]

В середине 2011 года был закончен новый стандарт C++ (получивший название C++ 11). Проект библиотеки Boost оказали значительное влияние на новый стандарт, а некоторые из новых модулей были получены непосредственно из соответствующих библиотек Boost. Некоторые из новых функций включают поддержку регулярных выражений, полную библиотеку рандомизации, новую библиотеку для работы со временем C++, поддержку атомизации, стандартную библиотеку потоков (которая до 2011 года отсутствовала как на C, так и на C++), новый синтаксис цикла, обеспечивающий функциональность, подобную циклам foreach в некоторых других языках, ключевое слово auto, новые классы контейнеров, лучшую поддержку объединений и списки инициализации массивов, и вариативные шаблоны. [6]

В 2012 году был основан Фонд стандарта С++, а в 2014 году было выпущено 4-ое издание главной книги о языке С++.

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

Новые возможности библиотеки: std и многие небольшие улучшения в существующих библиотечных средствах, такие как двух диапазонные перегрузки для некоторых алгоритмов, типы псевдонимов, типы признаков типа, определяемые пользователем строки, длительность и литералы сложных чисел и т.д. [8, 16]

В 2015 году появился TS. Этот TS является экспериментальным расширением библиотеки C++, которое указывает библиотеку файловой системы на основе boost.filesystem V3 (с некоторыми изменениями и расширениями). Этот TS был объединен с C++17.

Это TS стандартизирует параллельный интерфейс для всех стандартных алгоритмов библиотеки, а также добавляет новые алгоритмы, такие как reduce, transform_reduce и exclusive_scan. [17]

2.4 Перспективы развития языка C++

Дискуссии о текущем положении C++ в мире программирования, как правило, делят участников на два фронта: одни специалисты, считают, что язык скоро исчезнет; другие же наоборот утверждают, что на C++ ещё будет долго использоваться. В данный момент C++ находится в «подвешенном» состоянии, в котором он был, например, между выходами стандартов C++03 и C++11.

Может быть C++ не настолько популярен в плане изучения начинающими программистами, как C# или Java, может быть под него не затачиваются новые технологии, выпускаемые корпорациями-гигантами, может быть он не продвигается теми же Microsoft и Oracle, но несмотря на всё это, он ещё активно используется, и будет в трендах ещё долгое время. Программное обеспечение, написанное с использованием C++, никуда не делось и требует поддержки. Новое ПО, например, игровые движки, также вовсю использует C++, а стандарты C++11, C++14 и C++17 только подтверждают, что дела у этого языка программирования идут неплохо. [23]

Как упоминалось ранее, между стандартами C++11 и C++03 язык находился в своеобразном «подвешенном» состоянии. Вроде бы развивались и дополнялась такие библиотеки, как boost, Qt и прочие, появился C++/CLI, а нового официального стандарта всё не было и не было. [9, 13]

Так продолжалось достаточно долго, да и стандарт C++11, планировавшийся к публикации в 2009 году, вышел только двумя годами позже. Но тем не менее вышел. И не просто вышел, а принёс собой множество дополнений, расширений и «синтаксического сахара». Писать с использованием нового стандарта стало проще и удобнее, в стандартную библиотеку было добавлено множество средств, облегчающих программистам жизнь. Была введена официальная поддержка параллельного программирования, что немаловажно, списки инициализации, призванные сделать код понятнее, лямбда-функции и т.д.

Но что не менее важно — тенденция не потеряна и на горизонте уже виднеются заготовки для нового стандарта.

Несомненно, пройдёт некоторое время, прежде чем программисты познают все прелести новых стандартов и научатся грамотно применять нововведения. Тем не менее, эти нововведения должны положительно сказаться на качестве кода и программного обеспечения. [12, 18]

С использованием C++ написано множество программного обеспечения. И, конечно, его необходимо поддерживать. С учётом того, что C++ стал намного удобнее в работе с выходом новых стандартов, идея писать модули/дополнения на современном C++ имеет место быть и не выглядит безумной. В дальнейшем такой код будет куда проще поддерживать. В то же время — это всё тот же производительный C++, с обширнейшим набором возможностей. А дополненная стандартная библиотека позволит использовать уже готовые решения без необходимости изобретения собственных решений.

На этом фронте дела идут не слишком гладко: С++ не слишком популярный язык среди начинающих программистов и существенно проигрывает таким языкам, как C# или Java. Тут можно выделить несколько причин. [23]

1. Высокий порог вхождения.

Наверное, нет такого программиста, который бы не слышал о сложности С++. Безусловно, язык обширен, нюансов — несчётное множество. Производительность и глубинный контроль происходящих процессов (особенно если несколько спуститься с C++ к чистому C). Тут опять же следует упомянуть про стандарт C++11, который более приветлив к новичкам, предлагая удобный синтаксис, различного рода контейнеры, алгоритмы и прочие удобные вещи, предназначенные облегчить жизнь и написание кода.

2. Слабое продвижение.

Ни для кого не секрет, как продвигаются такие языки как C# или Java корпорациями-владельцами: Microsoft и Oracle, со стороны Microsoft продвижения весьма заметно. Большинство технологий Microsoft затачиваются именно под C#. Хакатоны, проводимые Microsoft, опять же проходят с использованием C#. [2, 4]

Для C++ такой поддержки нет. Да, для него выпускаются различные инструменты, позволяющие облегчить работу и процесс создания приложений. Тут стоит вспомнить тот же Qt, недавно вышедший ReSharper C++ от JetBrains. В Visual Studio 2015 ввели поддержку некоторых нововведений из последних стандартов, плюс некоторые дополнительные функции — работать стало удобнее. Но с масштабом вышеупомянутых продвижений это всё же в сравнение не идёт. [23]

3. Специализация.

Несмотря на то, что C++ — язык, дающий разработчику, как говорится, все карты в руки, область его применения не всеобъемлюща и занимает определённую нишу. Конкуренты есть, это тоже оказывает свое влияние. Взять, например, мобильную разработку. Основные платформы заняты теми или иными языками: Windows Phone — C#, Android — Java, iOS — Objective-C. И это вовсе не означает, что под эти платформы нет возможности писать на C++, вопрос лишь в том, насколько это будет удобно и будет ли также эффективно. Для веба, разработка под который с каждым годом становится популярнее и популярнее, C++ тоже не очень подходит. Возможность работы с сокетами есть, библиотеки, наподобие Wt, есть. С учётом того, что мобильная и веб-разработка стали очень популярны и только набирают обороты, понятен выбор начинающих в пользу других языков.

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

Как видно из рисунка 2, по сравнению с прошлым годом C++ немного сбавил позиции, но на май 2020 года всё-таки находится в лидерах, на четвертом месте, а вот язык С, наоборот, улучшил свои позиции, и теперь снова возглавляет рейтинг. [22, 23]

Рисунок 2 — Рейтинг языков программирования от TIOBE [22]

С++ продолжает активно использоваться и занимает свою определённую нишу. Выходящие стандарты добавляют новшеств в язык, делая его удобнее и проще в обращении. Программное обеспечение, написанное на этом языке, также никуда не делось и требует поддержки. В определённых областях C++ как нельзя лучше подходит для написания программного обеспечения, а это, в совокупности с вышеописанным, означает одно — C++ актуален, развивается и сдавать позиции не намерен. [13]

В рамках данной главы были рассмотрены вопросы, связанные с историей и развитием языков программирования C и C++.

ГЛАВА 3. ИСТОРИЯ ВОЗНИКНОВЕНИЯ И РАЗВИТИЯ ЯЗЫКА JAVA

3.1 История появления языка Java

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

Java — это объектно-ориентированный язык программирования, разработанный Джеймсом Гослингом и его коллегами из Sun Microsystems в начале 1990-х годов. В отличие от обычных языков, которые обычно разрабатываются либо для компиляции на собственный (машинный) код, либо для интерпретации исходного кода во время выполнения, Java предназначен для компиляции в байт-код, который затем выполняется (как правило, с использованием компиляции JIT) с помощью Виртуальной машины Java. [10, 12]

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

Язык Java является производным языка С, поэтому его синтаксические правила очень похожи на C. Например, кодовые блоки модулируются в методы и ограничены фигурными скобками {и}, а переменные объявляются до их использования. [13]

Структурно язык Java начинается с пакетов. Пакет - это механизм пространства имен языка Java. В пакетах есть классы, а внутри классов - методы, переменные, константы и т. д.

Программы, созданные на Java, являются кроссплатформенными. Исходный код компилируется в то, что в Java называется байт-код, который можно запустить в любом месте, на сервере или на клиенте, который имеет виртуальную машину Java (JVM). JVM интерпретирует байт-код в код, который будет работать на компьютерном оборудовании. Напротив, большинство языков программирования, таких как COBOL, C ++, Visual Basic или Smalltalk, компилируют код в двоичный файл. Бинарные файлы зависят от платформы, поэтому программа, написанная для компьютера под управлением Windows на базе Intel, не может быть запущенной на Mac или Linux. JVM включает в себя необязательный (JIT) компилятор, который динамически компилирует байт-код в исполняемый код. Во многих случаях динамическая компиляция JIT быстрее, чем интерпретация виртуальной машины. [2]

Код Java надежный. В отличие от программ, написанных на C ++ и некоторых других языках, объекты Java не содержат ссылок на внешние данные или другие известные объекты. Это гарантирует, что инструкция не может содержать адрес хранения данных в другом приложении или в самой операционной системе, из-за чего программа и, возможно, сама операционная система могут завершиться или ситуация приведёт к сбою. JVM выполняет ряд проверок на каждом объекте для обеспечения целостности программы. [9, 11]

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

Апплет Java дают большую гибкость. В дополнение к выполнению на клиенте, а не на сервере, Java-апплет имеет другие характеристики, предназначенные для быстрого запуска. [12, 13]

Разработчики могут быстро изучить Java. С синтаксисом, аналогичным C++, Java относительно легко изучать, особенно для тех, у кого есть база на C.

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

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

1. Java SE.

Простые, автономные приложения разрабатываются с использованием Java Standard Edition. Ранее известный как J2SE, Java SE предоставляет все API, необходимые для разработки традиционных десктопных приложений.

2. Java EE.

Java Enterprise Edition, ранее известная как J2EE, обеспечивает возможность создания серверных компонентов, которые могут проводить весь веб цикл запроса и ответа. Такая компоновка позволяет создавать Java-программы, которые могут взаимодействовать с интернет-клиентами, включая веб-браузеры, клиенты на базе CORBA и даже веб-сервисы на основе REST и SOAP. [2]

3. Java ME.

Java также предоставляет легкую платформу для мобильной разработки, известную как Java Micro Edition, ранее известная как J2ME. Java ME зарекомендовала себя очень популярной платформой для разработки встраиваемых устройств, она изо всех сил пыталась добиться успеха на арене разработки смартфонов. С точки зрения развития смартфонов, Android стал платформой мобильной разработки номер один в мире Java [26].

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

Сам язык заимствует большой синтаксис из C и C++, но имеет более простую объектную модель и меньше объектов низкого уровня. Java никак не относится к JavaScript, хотя они имеют похожие имена и используют синтаксис типа C. [9]

В начале 90-х годов распространение сетевых вычислений на повседневную жизнь было радикальным. Java был запущен в качестве проекта под названием «Дуб» Джеймса Гослинга в июне 1991 года. Гослинг должен был реализовать виртуальную машину и язык, который имел знакомое C-образное обозначение, но с большей однородностью и простотой, чем C/C++. В 1991 году небольшая группа инженеров Sun, названная «Зеленая команда», считала, что следующей волной в области вычислений является объединение цифровых потребительских устройств и компьютеров. Под руководством Джеймса Гослинга команда работала круглосуточно и создавала язык программирования, который бы революционизировал наш мир – Java. [22]

Зеленая команда продемонстрировала свой новый язык с помощью интерактивного портативного домашнего развлекательного контроллера, который первоначально был нацелен на индустрию цифрового кабельного телевидения. К сожалению, концепция была слишком продвинутой для команды в то время. Но это было просто для Интернета, который только начинал взлетать. В 1995 году команда объявила, что интернет-браузер Netscape Navigator будет включать технологию Java. [8]

Первой публичной реализацией стала Java 1.0 в 1995 году. Она вышла под лозунгом «Write Once, Run Anywhere» (пишется один раз, работает везде) с бесплатной загрузкой на популярных платформах. Он был достаточно надежным, и его безопасность была настраиваемой, позволяя ограничить доступ к сети и файлам. Основные веб-браузеры вскоре включили его в свои стандартные конфигурации в безопасной конфигурации «апплетов». Новые версии для больших и малых платформ (J2EE и J2ME) вскоре были разработаны с появлением «Java 2». Sun не объявила о каких-либо планах для «Java 3». [9, 12, 13]

Многие разработчики вскоре поняли, что архитектурный нейтральный язык, такой как Java, лучше всего подходит для написания программ для Интернета. Таким образом, внимание переключилось на Java с потребительской электроники на World Wide Web (Интернет).

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

В 1997 году Sun обратилась к органу стандартов ISO/IEC JTC1, а затем к Ecma International, чтобы формализовать Java, но вскоре отказалась от этого процесса. Java остается проприетарным стандартом де-факто, который контролируется через Java Community Process. Sun делает большую часть своих реализаций на Java доступными бесплатно, при этом доходы генерируются специализированными продуктами, такими как Java Enterprise System. Sun отличает его Software Development Kit (SDK) и Runtime Environment (JRE), который является подмножеством SDK, причем основное отличие заключается в том, что в JRE отсутствует компилятор.

3.2 Этапы развития языка Java

В 1998 году выходит J2SE 1.2 (Java2 Standard Edition) основными изменениями, которой являлись:

  • интегрированный графический API Swing;
  • ключевое слово strictfp;
  • JIT-компилятор в Sun JVM для Java-плагина. [8]

В 2000 году выходит J2SE 1.3 основными изменениями, которой являлись:

  • включен Hotspot JVM;
  • RMI изменен для поддержки совместимости с CORBA;
  • Java Naming and Directory Interface (JNDI);
  • Java Debugger Architecture (JPDA);
  • Java Sound.

В 2002 году выходит J2SE 1.4 — это был первый выпуск платформы Java, разработанный в рамках процесса java community, как JSR 59. основными изменениями, которой являлись:

  • регулярное выражение;
  • цепочка исключений;
  • API ввода-вывода изображений, для чтения и записи изображений;
  • включение Java Web start. [11, 18]

В 2004 выходит J2SE 5.0 под кодовым именем Tiger. Добавлены новые языковые функции:

  • Generics;
  • Metadata;
  • Autoboxing;
  • Enumeratations;
  • Swing;
  • Var args;
  • коллекции статического импорта и т. д.

В 2006 выходит Java SE 6 основными изменениями, которой являлись:

  • поддержка языка Scripting Language;
  • улучшенная поддержка веб-сервисов через JAX-WS;
  • поддержка JDBC 4.0;
  • поддержка подключаемых аннотаций;
  • усовершенствования JVM, включая оптимизацию производительности синхронизации и компилятора;
  • алгоритмы сбора Garbaze. [4, 5]

Java SE 7.0 D 2011 г. Java SE 7.0 основными изменениями, которой являлись:

  • поддержка JVM для динамического языка;
  • новая библиотека для параллельных вычислений;
  • автоматическое управление ресурсами.

Java SE 8.0 18 марта В 2014 г. Вышла Java SE 8.0 включавшая различные исправления ошибок и улучшения.

В создании языка Java было пять основных целей:

  1. Он должен был использовать методологию объектно-ориентированного программирования.
  2. Он должен позволять выполняться одной и той же программы на нескольких операционных системах.
  3. Он должен содержать встроенную поддержку для использования компьютерных сетей.
  4. Он должен быть разработан для безопасного выполнения кода из удаленных источников.
  5. Он должен быть удобным в использовании, выбрав то пункты, которые считалось хорошей частью других объектно-ориентированных языков. [5]

Для достижения целей сетевой поддержки и удаленного выполнения кода разработчикам Java иногда приходится использовать такие расширения, как CORBA, Internet Communications Engine или OSGi. [13]

Первая характеристика, объектной ориентации («OO»), относится к методу программирования и языкового дизайна. Хотя существует много интерпретаций OO, одна из основных отличительных идей заключается в разработке программного обеспечения, так что различные типы данных, которыми он управляет, объединяются вместе с их соответствующими операциями. Таким образом, данные и код объединяются в сущности, называемые объектами. Объект можно рассматривать как автономный пучок поведения (кода) и состояния (данных). Принцип состоит в том, чтобы отделить вещи, которые изменяются от вещей, которые остаются неизменными; часто изменение в некоторой структуре данных требует соответствующего изменения кода, который работает с этими данными, или наоборот. Это разделение на когерентные объекты обеспечивает более стабильную основу для разработки программной системы. [4, 18]

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

Вторая характеристика, независимость от платформы, означает, что программы, написанные на языке Java, должны работать аналогично на разных аппаратных средствах. Разработчик должен иметь возможность написать программу один раз и запустить ее в любом месте. [5, 19]

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

Существуют также реализации компиляторов Java, которые компилируют собственный код объекта, такой как GCJ, удаляя промежуточную стадию байт-кода, но вывод этих компиляторов можно запускать только в одной архитектуре. [12]

Лицензия Sun на Java настаивает на том, чтобы все реализации были «совместимыми». Это привело к юридическому спору с Microsoft после того, как Sun заявила, что реализация Microsoft не поддерживает интерфейсы RMI и JNI и добавила собственные функции платформы. В ответ Microsoft больше не переносит Java с Windows, а в последних версиях Windows Internet Explorer не может поддерживать Java-апплеты без стороннего плагина. Тем не менее, Sun и другие разработчики, предоставили доступные системы времени исполнения Java бесплатно для этих и других версий Windows.

Первые реализации языка использовали интерпретированную виртуальную машину для обеспечения переносимости. В этих реализациях выполнялись программы, которые выполнялись медленнее, чем программы, скомпилированные для собственных исполняемых файлов, например, написанные на C или C++, поэтому язык приобрёл репутацию плохой производительности. Более поздние реализации JVM создают программы, которые работают значительно быстрее, чем раньше, используя несколько методов. [13]

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

Второй метод, известный как компиляция «точно в момент времени» (JIT), переводит байт-коды Java в собственный код во время запуска программы, что приводит к выполнению программы, которая выполняется быстрее, чем интерпретируемый код, но также приводит к сбоям на этапе компиляции во время выполнения.

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

Переносимость — это технически трудная цель, и успех Java в этой цели был смешанным. Хотя на самом деле можно писать программы на платформе Java, которые ведут себя последовательно на многих системах, но большое количество доступных платформ с небольшими ошибками или несогласованностями привело к тому, что некоторые слоганы «Write once, Run anywhere» (писать один раз, запускать везде) в Sun называли «Write once, debug anywhere» (писать один раз, отлаживать везде).

Независимая от платформы Java, однако, очень успешна с серверными приложениями, такими как веб-сервисы, сервлеты и Enterprise JavaBeans, а также с встроенными системами на основе OSGi с использованием встроенных сред Java. [4]

3.3 Перспективы развития языка Java

Мир Java уже давно меняется не так стремительно, но в этом и преимущество –инвестиции в изучение Java будут актуальны достаточно долго. Сейчас Oracle запускает новую версию каждые полгода: последняя – Java 13, притом, что большинство проектов работает с Java 8, а то и более древней. Но по количеству новых фич это скорее минорные релизы и в Java 10–13 не так уж много нового. [16, 19]

Главные тренды в разработке на Java – переход к реактивному асинхронному программированию и рост популярности Kotlin как удобной и мощной альтернативы Java, а также рост популярности микросервисов и переход к облачной архитектуре. Последний уже не очень новый, но продолжает захватывать мир промышленной разработки: все больше приложений переезжает в облачную инфраструктуру благодаря низкой стоимости владения и возможности быстро и просто масштабироваться по мере необходимости. Благо сейчас большой выбор облачных решений и готовых облачных сервисов от Amazon, Google, Microsoft и «Яндекса». [24]

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

В свою очередь, нейронные сети становятся особенно эффективны, если обучены на больших наборах данных, а это достигается благодаря прогрессу в области big data. Так, появилась возможность собирать очень большие объемы данных, хранить их, отбраковывать некорректные, обрабатывать и получать обучающие выборки. Все это поддерживается современными инструментами, написанными на Java (Hadoop) или Scala (Spark). Самой популярной библиотекой машинного обучения остается гугловский TensorFlow (Питон, С++). [24]

Наконец, еще один тренд – рост популярности систем обмена сообщениями. По сути это продолжение тренда реактивного программирования, но в глобальном распределенном формате, когда контрагенты расположены не внутри одной виртуальной машины, а распределены по сети. [16, 19]

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

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

В рамках данной главы были рассмотрены вопросы, связанные с историей и развитием языка программирования Java.

ЗАКЛЮЧЕНИЕ

В рамках курсового проекта были решены следующие задачи:

  • раскрыто понятия «программирование»;
  • проведён анализ высокоуровневых языков программирования;
  • проведено исследование возникновения и развития языков C, C++ и Java;
  • проведён анализ перспективы развития этих языков;
  • изучена литература в данной области.

Таким образом можно сказать, что оба языка, и С/С++, и Java прошли большой путь развития. Причиной возникновения этих языков были и случайные стечения обстоятельств, и упорный труд их создателей.

Язык C++ в определенном смысле можно назвать улучшенным С. С++ наиболее полно представляет парадигмы современного программирования и является фундаментом, на котором оно строится. В программе на С++ можно динамически управлять памятью, использовать адресную арифметику, обращаться к отдельным разрядам двоичного представления данных и т.д. Но главное в том, что C++ добавляет к С объектную ориентированность: поддерживает объектно-ориентированное программирование и позволяет разрабатывать библиотеки классов. Механизм шаблонов языка С++ и его стандартная библиотека дают возможность создавать программы, применяя методы обобщенного программирования.

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

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

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

  1. Буч Гради Объектно-ориентированное проектирование с примерами применения. — Конкорд, 2014. — 519 с.
  2. Васильев А. Java. Объектно-ориентированное программирование. — Питер, 2013. — 397 с.
  3. Дейтел Пол, Дейтел Харви С для программистов с введением в С11. — ДМК Пресс, 2013. — 546 с.
  4. Жемеров Д., Исакова С. Kotlin в действии. — ДМК Пресс, 2017. — 404 с.
  5. Крейг Уоллс Spring в действии. — ДМК Пресс, 2013. — 754 с.
  6. Магда Ю. Программирование и отладка C/C++ приложений для микроконтроллеров ARM. — ДМК Пресс, 2012. — 170 с.
  7. Мартин Роберт Идеальный программист. Как стать профессионалом разработки ПО. — Питер, 2011. — 240 с.
  8. Прохоренок Н. Основы Java. — БХВ-Петербург, 2017. — 688 с.
  9. Хабибуллин И. Самоучитель Java (3-е издание). — БХВ-Петербург, 2008. — 759 с.
  10. Bob Bryla, Kevin Loney. Oracle Database 12c The Complete Reference (Oracle Press) 1st Edition. — McGraw-Hill Education, 2013. — 1472 p.
  11. Herbert Schildt Java: A Beginner's Guide, Seventh Edition. — McGraw-Hill Education, 2017. — 752 p.
  12. Joshua Bloch Effective Java. — Addison-Wesley Professional, 2018. — 412 p.
  13. Joyce Farrell Java Programming. — Cengage Learning, 2015. — 976 p.
  14. Scott Meyers Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14. — O'Reilly Media, 2014. — 334 p.
  15. Stroustrup Bjarne Programming: Principles and Practice Using C++. — Addison-Wesley Professional, 2014. — 1282 p.
  16. Stroustrup Bjarne The Design and Evolution of C++. — Addison-Wesley, 2015. — 462 p.
  17. Tony Gaddis Starting Out with C++ from Control Structures to Objects. — Pearson, 2017. — 1344 p.
  18. Программирование [Электронный ресурс] Понятие «программирование». Режим доступа:
    https://sites.google.com/site/wwwprogrammirovaniecom/home/ponatie Дата обращения (01.05.2020)
  19. Сайт с образовательными программами [Электронный ресурс] История программирования и алгоритмических языков перспективы развития средств автоматизации. Режим доступа: http://emirb.org/zadacha-avtomatizacii-sostoit-v-osushestvlenii-avtomaticheskog.html?page=9 Дата обращения (01.05.2020)
  20. Справочник Java [Электронный ресурс] Подробнее о технологии Java Режим доступа: http://www.java.com/ru/about/ Дата обращения (01.05. 2020)
  21. itWeek [Электронный ресурс] Перспективы Java на 2018 год. Режим доступа: https://www.itweek.ru/foss/article/detail.php?ID=199284 Дата обращения (01.05.2020)
  22. TIOBE [Электронный ресурс] TIOBE Index for May 2020. Режим доступа: https://www.tiobe.com/tiobe-index/ Дата обращения (02.05.2020)
  23. Habr [Электронный ресурс] C++ в современном мире Режим доступа: https://habr.com/company/pvs-studio/blog/259777/ Дата обращения (01.05.2020)
  24. It-expert [Электронный ресурс] Тенденции в Web и Java-разработке в 2020 году. Режим доступа: https://www.it-world.ru/tech/admin/150552.html Дата обращения (02.05.2020)