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

История возникновения и развития языка программирования Си (С++) и Java (Понятие «программирование»)

Содержание:

ВВЕДЕНИЕ

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

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

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

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

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

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

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

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

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

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

1. Анализ предметной области

1.1 Понятие «программирование»

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

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

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

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

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

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

Программирование в широком смысле можно разбить на несколько стадий:

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

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

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

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

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

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

С (Си). Язык Си (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, 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++ — один из самых популярных языков, в основном используется в системном и прикладном программном обеспечении, при написании драйверов, и при разработке клиент-серверных приложений.

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

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

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

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

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

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

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

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

Вскоре после этого он начал работу над языком «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.

В 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 и многие небольшие улучшения в существующих библиотечных средствах, такие как двух диапазонные перегрузки для некоторых алгоритмов, типы псевдонимов, типы признаков типа, определяемые пользователем строки, длительность и литералы сложных чисел и т.д. [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, а нового официального стандарта всё не было и не было.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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]

В 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. Он должен быть удобным в использовании, выбрав то пункты, которые считалось хорошей частью других объектно-ориентированных языков.

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

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

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

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

Это достигается большинством компиляторов 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]

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

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

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

Язык Java, созданный еще в 1995 г., остается одним из наиболее популярных языков программирования, особенно для клиент-серверных веб-приложений. Численность применяющих его разработчиков оценивается в 9 млн. Главная особенность заключается в том, что это развивающаяся технология.

В мире, наверное, нет более широко используемого программного кода, чем код на языке Java, созданном д-ром Джеймсом Гослингом и его командой в корпорации Sun Microsystems в начале 1990-х и выпущенном в 1995 г. в качестве ключевого компонента Sun Java Platform. И на то есть веские причины. [21]

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

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

Карманные устройства, ПК и серверы— «гиганты» — все ждут от Java одного и того же.

Хорошее описание Java дал сам д-р Гослинг. «Вы выстраиваете в ряд маленькое мобильное устройство вроде смартфона, настольный компьютер и сервер, и все они ждут от Java одного и того же».

Бинго. Теперь у вас более полное представление о том, что делает Java. Он позволяет всем этим штукам общаться друг с другом независимо от типа устройства, сети, телекоммуникационного провайдера, приложения или API-интерфейса. Он просто работает со всем, что угодно.

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

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

Во-первых, новый цикл релиза каждые 6 месяцев. Джон Дюймович, заслуженный инженер и главный технолог IBM по Java, имеющий более чем 20-летний опыт работы с этим языком, предложил свой прогноз, на что следует обратить внимание в мире Java в 2018-2019 г.

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

Ускорится конвергенция с контейнерами. В рамках более широких усилий с целью упростить разработку и управление будет установлена более тесная связь между контейнерами и выполняемыми программами вроде Java. Те и другие будут оптимизированы, чтобы обеспечить беспрепятственное управление приложениями Java и их конфигурирование. Появятся согласованное управление памятью и упрощенная коммутация (wiring) между конструктами Java и контейнерами. В результате разработчики смогут использовать преимущества контейнеров и выполняемых программ на Java, которые, в сущности, представляют собой другой вид контейнеров. [21]

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

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

Бессерверные платформы вызовут крупную перестройку Java. Растет спрос на бессерверные платформы. Первоначально они рассматривались как модели потребления, но теперь они расширяются, превращаясь из простых моделей программирования событий в сложные системы на базе потоков. Данная инновация продолжится в связи с тем, что разработчики облаков хотят сместить акцент на приложение и не беспокоиться по поводу серверов. Это означает, что программы на Java необходимо будет оптимизировать и перенести на бессерверную архитектуру. А в этом мире быстрые стартапы и небольшие фирмы играют более важную роль. [21]

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

ЗАКЛЮЧЕНИЕ

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

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

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

С++ сейчас является господствующим во многих областях коммерческого развития. 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 Дата обращения (14.01.2019)
  19. Сайт с образовательными программами [Электронный ресурс] История программирования и алгоритмических языков перспективы развития средств автоматизации. Режим доступа: http://emirb.org/zadacha-avtomatizacii-sostoit-v-osushestvlenii-avtomaticheskog.html?page=9 Дата обращения (14.01.2019)
  20. Справочник Java [Электронный ресурс] Подробнее о технологии Java Режим доступа: http://www.java.com/ru/about/ Дата обращения (14.01.2019)
  21. itWeek [Электронный ресурс] Перспективы Java на 2018 год. Режим доступа: https://www.itweek.ru/foss/article/detail.php?ID=199284 Дата обращения (14.01.2019)
  22. TIOBE [Электронный ресурс] TIOBE Index for January 2019. Режим доступа: https://www.tiobe.com/tiobe-index/ Дата обращения (14.01.2019)
  23. Habr [Электронный ресурс] C++ в современном мире Режим доступа: https://habr.com/company/pvs-studio/blog/259777/ Дата обращения (14.01.2019)