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

«Современные языки программирования»(Введение в языки программирования )

Содержание

Введение

Глава 1. Введение в языки программирования 

1.1 Что такое язык программирования 4

1.2 Классификация 5

1.2.1 Низкий и высокий уровни 5

1.2.2 Компиляторы и интерпретаторы 6

1.2.3 Зависимость и независимость кода 7

1.3 Парадигмы программирования 8

1.3.1 Императивная парадигма 9

1.3.2 Декларативная парадигма 9

1.3.3 Фундаментальная парадигма 9

1.3.4 Объектно-ориентированная парадигма 10

1.4 Краткий обзор популярных языков современного программирования 12

1.4.1 Язык программирования C 12

1.4.2 Язык программирования C++ 14

1.4.3 Язык программирования C# 16

1.4.4 Язык программирования Java 17

1.4.5 Язык программирования Python 18

1.4.6 Язык программирования PHP 19

1.4.7 Язык программирования JavaScript 20

1.4.8 Язык программирования R 21

Глава 2. Анализ инструментов разработки 23

2.1 Рынок востребованности языков 23

2.1.1 RedMonk 23

2.1.2 IEEE Spectrum 25

2.1.3 TIOBE 26

2.2 Языки программирования и технологии 27

2.2.1 Чат-боты 27

2.2.2 Машинное обучение 28

Заключение

33

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

Введение

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

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

Глава 1. Введение в языки программирования

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

1.1 Что такое язык программирования

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

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

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

Кроме этого языки программирования делятся по классификациям: низкого и высокого уровня, безопасные и небезопасные, компилируемые и интерпретируемые.

1.2 Классификация

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

1.2.1 Низкий и высокий уровни

У языков программирования существуют два уровня, такие как низкий и высокий. К языкам низкого уровня относятся машинные языки (computer language) – они являются воспринимаемыми аппаратной частью компьютера (машинные коды)[2], их причисляют к первому поколению. После чего на замену подошли машинно-ориентированные языки, отображающие структуру определенного типа компьютера, т.е. процесс разработки ведется только под определенной архитектурой. Примером таковым является язык ассемблера. Название ассемблер (assembler – сборщик) происходит от основной функции этих программ – собирать машинные команды, переводя мнемонические имена операций и идентификаторы операндов в коды команд и коды операндов (это могут быть адреса и/или непосредственные операнды).[3]

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

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

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

1.2.2 Компиляторы и интерпретаторы

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

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

1.2.3 Зависимость и независимость кода

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

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

Еще больше усложняет проблему переносимости (portability) отсутствие единого мнения о том, какие структуры должны входить в конкретный язык. Чтобы преодолеть эту трудность, Национальный институт стандартизации США (ANSI ‑ American National Standards Institute) и Международная организация по стандартизации (ISO ‑ International Organization for Standardization) приняли и опубликовали стандарты для многих распространенных языков программирования.[6] Но и при строгой стандартизации языков разработчики компиляторов часто снабжают их расширениями языка, которые не входят в стандартную версию. Если программист будет использовать эти расширения, получившаяся программа может быть несовместима со средой, использующей компилятор другого производителя.

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

1.3 Парадигмы программирования

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

1.3.1 Императивная парадигма

Императивная (imperative paradigm), или процедурная парадигма (procedural paradigm), представляет собой традиционный подход к процессу программирования.[7] Императивная парадигма характеризует процесс программирования как систему последовательности команд для манипуляции входными данными, суть которых, получение необходимого результата. Получается, согласно этой парадигме сначала стоит найти алгоритм решения задачи, после чего преобразовать его в виде последовательности команд.

1.3.2 Декларативная парадигма

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

1.3.3 Фундаментальная парадигма

Фундаментальная парадигма (functional paradigm) рассматривает процесс разработки программы как соединение «черных ящиков», каждый из которых получает входные данные и порождает выходные данные так, чтобы создать необходимую зависимость между ними.[9] Математики называют данные «ящики» функциями, из-за чего подход имеет название функциональный. Примитивы функционального языка программирования являются элементарными функциями, при помощи которых есть возможность построить более сложные функции, необходимые для решения определенной задачи. В таком случае, разработчик, придерживающийся функциональной парадигмы, создает ПО, совмещая элементарные функции в систему, суть которой порождать необходимый результат. Дословно, процесс программирования сводится к построению простых функций из более сложных.

1.3.4 Объектно-ориентированная парадигма

Объектно-ориентированная парадигма (object-oriented paradigm) и соответствующее ей объектно-ориентированное программирование (ООП) представляют собой другой подход к процессу разработки программного обеспечения.[10] Данные – это «объекты», а не как пассивные единицы в императивной парадигме. В императивной парадигме список рассматривается набором данных, Программа, которая пытается получить доступ к списку, обязана содержать алгоритм, выполняющий необходимые действия. В таком случае, список является пассивным, т.е. он обслуживается управляющей программой, а не сам себя. Но при объектно-ориентированном подходе список рассматривается как объект, который состоит из самого списка и программ для манипуляций. Таким образом, программе, которая пытается получить доступ к списку, не должна включать в себе алгоритмы для выполнения данных задач. Вместо этого она использует методы объекта. Т.е. объект имеет возможность попросить отсортировать себя, а не программа сортирует его, как это было императивной парадигме.

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

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

1.4 Краткий обзор популярных языков современного программирования

1.4.1 Язык программирования C

Язык С был изобретен и реализован в 1970-х годах Деннисом Ритчи. Этот язык появился в результате эволюции языка BCPL. BCPL разработан Мартином Ричардсом под влиянием другого языка В, автор которого Кен Томпсон.

Долгое время стандартом языка С была версия для UNIX системы. Впервые её описание было в книге Брайана Кернигана и Денниса Ритчи The С Programming Language в 1978 году. В 1983 году, летом был создан комитет Американского института национальных стандартов (ANSI), суть которого была разработать стандарт языка С. Работа комитета растянулась на шесть долгих лет.

После чего стандарт ANSI C был одобрен в декабре 1989 года и стал распространяться в начале 1990-го. Данный стандарт был помимо этого одобрен Организацией международных стандартов (ISO), получив название ANSI/ISO Standard С. В 1995 году одобрена Первая поправка, суть которой, добавление нескольких новых библиотечных функций. В 1989 году стандарт языка С вместе с Первой поправкой стали базовым документом для стандарта языка C++, в котором было выделено подмножество С. Версию языка С, определенную стандартом 1989 года, обычно называют С89.[13]

После 1989 года в центре внимания разработчиков стал язык C++. Формирование данного языка в течение 1990-х годов закончилось одобрением стандарта в конце 1998 года. Между тем работа над языком С продолжалась, не создавая чрезмерного шума. Из-за чего в 1999 году появился новый стандарт языка С под названием С99. Стандарт С99 сберег фактически все свойства стандарта С89, не изменив основных нюансов языка. Язык С стандарта С99, практически совпадает с языком, соответствующим стандарту С89. Комитет по разработке стандарта С99 сосредоточился на двух вопросах: включении в язык нескольких математических библиотек и развитии некоторых специфических и весьма сложных свойств, например, массивов переменной длины и квалификатора указателей restrict. В стандарт С99 вошли также некоторые свойства, позаимствованные из языка C++, например, однострочные комментарии. Поскольку разработка стандарта языка C++ завершилась до создания стандарта С99, ни одно из новшеств языка С не вошло в стандарт C++

C – язык сравнительно "низкого уровня". Ничего уничижительного в этом определении нет; это всего лишь значит, что язык C работает с теми же объектами, что и большинство компьютерных систем, а именно с символами, числами и адресами.[14]

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

Как и у любых языков, у C есть свои недостатки: некоторые операции имеют нелогичный приоритет; некоторые синтаксические конструкции можно было бы организовать и получше. И тем не менее язык C доказал свою высочайшую эффективность и выразительность для самого широкого круга приложений.[15]

#include <stdio.h>

int main(void)

{

printf("Hello, World!\n");

getchar();

return 0;

}

Листинг 1. Вывод строки "Hello, World!" на языке программирования C

1.4.2 Язык программирования C++

Изначально язык C++ представлял собой расширение языка С. Впервые он был разработан в 1979 году Бьярном Страуструпом (Bjame Stroustrup), сотрудником компании Bell Laboratories в г. Мюррей-Хилл (штат Нью-Джерси) Сначала язык назывался “C с классами”, однако в 1983 году его название было изменено на C++.[16]

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

Многие усовершенствования, внесенные в язык С, касались лишь поддержки ООП (Краткое описание этой парадигмы программирования содержится в разделе «Парадигмы программирования»). Страуструп заявляет, что некоторые объектно-ориентированные свойства языка C++ унаследованы у Simula 67. Из-за чего выясняется, что язык C++ обладает достоинствами двух мощных методов программирования.

После рождения языка C++ его модификация проходила трижды, каждый раз приобретая все новые свойства. Первый пересмотр его основ состоялся в 1985 году, второй раз он подвергался ревизии в 1990 году. Несколько лет назад началась работа над созданием стандарта языка C++. Для этого была сформирована объединенная комиссия двух организаций по стандартизации: ANSI и ISO.[17] Первый черновой вариант стандарта был обнародован 25 января 1994 года. В этом документе комитет ANSI/ISO C++ пытался придерживаться идей, сформулированных Страуструпом, добавив к ним новые возможности. И всё же в целом стандарт лишь констатировал состояние языка C++, сложившееся в тот момент.

Далее после опубликования первого варианта стандарта произошло событие, которое оказало огромное влияние на развитие языка C++: Александр Степанов разработал стандартную библиотеку шаблонов STL (Standard Template Library). Данная библиотека представляет собой набор обобщенных процедур, которые можно применять для обработки данных. Библиотека STL – не только мощный и элегантный, но и очень крупный механизм. Из-за чего члены комитета единогласно проголосовали за включение библиотеки STL в стандарт языка C++. Это сильно расширило изначальные рамки языка C++, но кроме этого, приостановило процесс стандартизации.

#include <iostream>

using namespace std;

int main()

{

cout << "Hello, World!";

return 0;

}

Листинг 2. Вывод строки "Hello, World!" на языке программирования C++

1.4.3 Язык программирования C#

C# – современный, объектно-ориентированный, типобезопасный язык программирования. C# входит в семейство языков C, из-за чего не составляет труда его освоить, имея опыт на C, C++ или Java. Он соответствует международному стандарту Европейской ассоциации производителей компьютеров (ECMA) – стандарт ECMA-334, а также стандарту ISO и Международной электротехнической комиссии (International Electrotechnical Commission, IEC) – стандарт ISO/IEC 23270. Компилятор Microsoft C# для .NET Framework согласуется с обоими этими стандартами.[18]

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

using System;

namespace HelloWorld

{

class Hello

{

static void Main()

{

Console.WriteLine("Hello, World!");

Console.ReadKey();

}

}

}

Листинг 3. Вывод строки "Hello, World!" на языке программирования C#

1.4.4 Язык программирования Java

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

Язык Java был задуман в 1991 году сотрудниками компании Sun Microsystems Джеймсом Гослинrом, Патриком Нотоном, Крисом Уортом, Эдом Фрэнком и Майком Шериданом.[19] Его изначальное название – Oak, но в 1995 году, по решению маркетологов, его переименовали в Java. В первое время сами разработчики языка не ставили перед собой задач разработки интернет-приложений. Главной их целью было создание платформенно-независимого языка, при помощи которого можно было бы создавать встраиваемое программное обеспечение для разной бытовой аппаратуры с микропроцессорным управлением, таких как тостеров, микроволновых печей и пультов ДУ. Обычно, в устройствах подобного типа применялись микропроцессорные контроллеры различной архитектуры, а исполняемый код, был ориентирован на определенные архитектуры процессоров. Таким примером может служить язык С++.

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

class HelloWorld {

public static void main(String[] args) {

System.out.println("Hello, World!");

}

}

Листинг 4. Вывод строки "Hello, World!" на языке программирования Java

1.4.5 Язык программирования Python

Язык Python является, пожалуй, самым простым в изучении и самым приятным в использовании из языков программирования, получивших широкое распространение. Программный код на языке Python легко читать и писать, и, будучи лаконичным, он не выглядит загадочным.[20] Python – очень выразительный язык, позволяющий уместить приложение в меньшее количество строк, чем на это потребовалось бы в других языках, таких как C++ или Java.

Python является кроссплатформенным языком: обычно одна и та же программа на языке Python может запускаться и в Windows, и в UNIX подобных системах, таких как Linux, BSD и MacOS, для чего достаточно просто скопировать файл или файлы, составляющие программу, на нужный компьютер; при этом даже не потребуется выполнять «сборку», или компилирование программы. Конечно, можно написать на языке Python программу, которая будет использовать некоторые характерные особенности конкретной операционной системы, но такая необходимость возникает крайне редко, т.к. практически вся стандартная библиотека языка Python и большинство библиотек сторонних производителей обеспечивают полную кроссплатформенность.

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

print("Hello, World!")

Листинг 5. Вывод строки "Hello, World!" на языке программирования Python

1.4.6 Язык программирования PHP

PHP – язык сценариев, интерпретируемый на стороне сервера. Это значит, что вы должны написать PHP-код, выгрузить его на веб-сервер и запустить с помощью интерпретатора.[21] PHP, обычно, используют с веб-серверами, такими как Apache или nginx для поддержки динамического контента. Также, язык PHP используется для создания мощных приложений, которые могут запускаться из командной строки. PHP прост для освоения, и при этом способен удовлетворить запросы профессиональных программистов.

Язык PHP переживает ренессанс. Он эволюционирует в современный язык сценариев со многими полезными свойствами, таким как трейты (traits), замыкания и встроенное кэширование байт-кода, пространства имен. PHP-разработчики все чаще используют небольшие специализированные компоненты и все реже монолитные фреймворки. Composer (Менеджер зависимостей) внес революционные изменения в построение PHP-приложений. Он дал возможность взаимодействовать PHP-компоненты между собой, которые больше всего соответствуют нуждам приложений. Без предложенных сообществом стандартов и их курирования со стороны PHP Framework Interop Group совместимость компонентов была бы невозможной.

<?php
echo "Hello, World!";
?>

Листинг 6. Вывод строки "Hello, World!" на языке программирования PHP

1.4.7 Язык программирования JavaScript

JavaScript был представлен в 1995 году как способ добавлять программы на веб-странницы в браузере Netscape Navigator.[22] За это время язык смог прижиться во все основные графические браузеры. С тех пор появилась возможность проявить себя в современных веб-приложениях, таких как браузерные емеил-клиенты, карты и социальные сети. Так же без его участия не обходятся и более традиционные сайты для обеспечения интерактивности.

JavaScript не имеет отношения к языку Java. Имя было выбрано по маркетинговым соображениям. В то время язык Java широко распространялся и набирал немалую популярность.

После того, как язык вышел за пределы Netscape, был составлен документ, описывающий работу языка, чтобы разные программы, заявляющие о его поддержке, работали одинаково. Он называется стандарт ECMAScript по имени организации ECMA.[23]

Вышло несколько версий языка JavaScript. ECMAScript 3 являлась доминирующей версией во время восхода языка в 2000-2010 гг. Готовилась невероятная 4-я версия, суть которой было добавление нескольких радикальных улучшений и расширений языка. Но по политическим причинам изменения популярного языка сделалось очень сложным, из-за чего работа была прекращена в 2008. Вместо неё вышла менее амбициозная 5-я версия в 2009. Сейчас большинство браузеров поддерживает именно её.

JavaScript имеет в своем арсенале не только поддержку браузеров, но и базы данных типа MongoDB и CouchDB которые используют его в качестве скриптового языка и языка запросов. Также имеется несколько платформ для настольных компьютеров и серверов, наиболее известная из которых Node.js, которая предоставляют мощное окружение для программирования не используя браузер.

<script type="application/javascript">

alert('Hello, World!');

</script>

Листинг 7. Вывод строки "Hello, World!" на языке программирования JavaScript

1.4.8 Язык программирования R

R – одно из наиболее популярных современных программных средств для анализа данных и их визуализации.[24] Это бесплатная программа с открытым кодом, предназначенная для операционных систем Windows, Mac OS X и Linux.

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

R весьма востребованный язык. Сложно найти американский или западноевропейский университеты, где бы не использовался R. Многие серьёзные компании устанавливают R для своей работы.[25]

print("Hello, World!")

Листинг 8. Вывод строки "Hello, World!" на языке программирования R

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

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

Глава 2. Анализ инструментов разработки

2.1 Рынок востребованности языков

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

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

2.1.1 RedMonk

Данная аналитическая компания регулярно публикует собственные рейтинги языков программирования. Они строятся на основе крупнейшего веб-сервиса GitHub и популярной системы вопросов и ответов о программировании Stack Overflow. Лидерами здесь являются JavaScript, Java, PHP и Python.[26]

Рисунок 1. Рейтинг отношения языков программирования между платформами Stack Overflow и GitHub

JavaScript сохранил лидерство, ровно как и Java с PHP на своих втором и третьем месте соответственно. Историческое изменение рейтинга с 2012 года можно посмотреть на следующем графике, из которого видно, что ТОП-10 в принципе не слишком подвержен серьёзным изменениям.[27]

Рисунок 2. Рейтинг языков программирования во временном графике по версии RedMonk

2.1.2 IEEE Spectrum

IEEE Spectrum является ежемесячным журналом, издаваемым Институтом инженеров электротехники и электроники. Летом 2016 года он опубликовал журнал с рейтингом популярности языков программирования. Лидером здесь является Си, следом Java, Python и С++.[28]

Здесь довольно необычным является выход R на пятое место. Объяснение этому простое – этот язык востребован в системах обработки больших объемов данных. Соответственно, растет количество запросов на Stack Overflow. Также, на GitHub появилось сразу 62 тысячи новых репозиториев. В научно-исследовательских публикациях появилось много вакансий и упоминаний этого языка.

Рисунок 3. Рейтинг языков программирования по версии IEEE

Для создания рейтингов специалисты IEEE используют 12 различных метрик из 10 источников. Основой является поиск результатов по типичным запросам, в ряде популярных сайтов. Учитываются и материалы, которые выдаются в поисковой выдаче Google, данные Google Trends, упоминания в социальных сетях.

2.1.3 TIOBE

Компания TIOBE Software, в момент публикации своего рейтинга, отмечает рост популярности ассемблера. Согласно этому рейтингу язык ассемблера демонстрирует устойчивый рост в рейтинге самых популярных языков программирования. Он вернулся в десятку, опередив даже таких «монстров», как Ruby, Visual Basic, Swift и R. Кроме того, он значительно превзошёл узкоспециализированные языки вроде MATLAB и Groovy. Единственное разумное объяснение, по их мнению, заключается в том, что речь идёт о разработке очень маленьких устройств, которых при этом становится всё больше. Даже при программировании электронных зубных щёток и кофе-машин сегодня используется язык ассемблера, говорится в примечании к рейтингу.[29]

Рисунок 4. Рейтинг языков программирования по версии TIOBE

Также в 2016 г. самым популярным языком программирования был признан Go, разработанный Google. Данный язык программирования набрал 2,16% за год и уверенно обогнал своих ближайших конкурентов: Dart (+ 0,95%) и Perl (+ 0,91%). Основными факторами успеха Go является его доступность для обучения и общая применимость, кроме того Go имеет встроенную поддержку для параллельного программирования. Все больше и больше клиентов компании TIOBE внедряют именно этот язык программирования.

TIOBE ранжирует языки, основываясь на данных поисковых запросов, и выкладывает статистику ежемесячно, в том числе в наглядном представлении.[30]

2.2 Языки программирования и технологии

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

2.2.1 Чат-боты

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

Огромное количество времени, которое люди проводят, набирая текст в различных мессенджерах (будь то ВКонтакте, Facebook и т.п.) делает эти самые мессенджеры быстро растущим сегментом на рынке приложений. Люди используют их не только для дружеских переписок, но и в интересах развития бизнеса. Также быстрое развитие технологий искусственного интеллекта и машинного обучения позволяет современным чат-ботам вести себя максимально приближённо к тому, как ведут себя люди.

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

https://msdn.microsoft.com/ru-ru/mt718503.1(l=ru-ru).jpg

Рисунок 5. Пример работы чат-бота

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

2.2.2 Машинное обучение

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

Выйдя за пределы коммерческих приложений, машинное обучение уже оказало огромное влияние на научные исследования, управляемые данными. Различные инструменты в данной области используются для решения различных научных задач (исследование звезд, поиск далеких планет, открытие новых частиц, анализ последовательностей ДНК, а также разработка персонализированных методов лечения рака). Для извлечения прибыли с помощью машинного обучения совсем необязательно, чтобы ваши задачи были столь же крупномасштабными или меняющими мир.[31]

Чаще всего, для многих сверх применения науки о данных (data science) используется Python. Он сочетает в себе мощь языков программирования с простотой использования предметно-ориентированных скриптовых языков типа MATLAB или R. В Python есть библиотеки для загрузки данных, визуализации, статистических вычислений, обработки естественного языка, обработки изображений и многого другого. Этот обширный набор инструментов предлагает специалистам по работе с данными (data scientists) большой набор инструментов общего и специального назначения. Одним из основных преимуществ использования Python является возможность напрямую работать с программным кодом с помощью терминала или других инструментов типа Jupyter Notebook. Машинное обучение и анализ данных – это в основном итерационные процессы, в которых данные задают ход анализа. Крайне важно для этих процессов иметь инструменты, которые позволяют оперативно и легко работать.[32]

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

https://neuralnet.info/wp-content/uploads/2017/08/3-multi-layer-ann.png

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

2.2.3 Скриптовые языки и технологии их применения

JavaScript продолжает развиваться с невероятным темпом. Из года в год новые стандарты ускоряет разработку веб-браузеров. Стандарт ES2017 не исключение. Его приход принес JavaScript такую особенность, как async/await для асинхронных вычислений.

В конце прошлого года был выпущен TypeScript 2.1, который позволил использование async/await в старых браузерах. Помимо этого, были улучшены интерфейсы. TypeScript – язык программирования-надростройка со статически типизацией, который компилируется в JavaScript. В нем заключены такие мощные особенности, как статическая типизация и классическая модель объектно-ориентированного программирования, что в разы облегчает поддержку больших проектов. К слову, ныне популярный текстовый редактор от Microsoft Visual Studio Code написан тех же TypeScript и JavaScript. Исходный код данного редактора можно найти в репозитории на GitHub.[33]

Python 3.6 был выпущен в декабре этого года. Данный язык программирования предназначен для разработчиков и ученых в разных направлениях. Возможности данного языка не имеет границ: начиная с разработки бек-енд веб-приложения, и заканчивая разработкой ныне популярного искусственного интеллекта

2.2.3 Enterprise

В 2017-м году произошел выпуск C# 7.0, который принес с собой не мало нововведений, к примеру кортежи, шаблоны, члены класса в виде выражений и т.п. Вместе с тем был открыт и код .Net Core. Появилась возможность развертывать программное обеспечение на таких платформах как Windows, Linux и MacOS, что позволяют писать быстрые и производительные приложения на том же C#. Также пришло обновление Visual Studio 2017, которая непосредственно поддерживает технологии выше.

Не обошлось и без выпуска Java 9. Появилась новые функции как REPL (интерактивная оболочка), поддержка HTTP 2.0 и новые API. Сейчас существует большой спрос на талантливых Java-разработчиков в различные проекты, где используется этот язык. Если Java – это не ваше, то есть несколько других языков программирования, использующих JVM (Java Virtual Machine – виртуальная машина Java). Например, Kotlin и Scala.

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

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

Заключение

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

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

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

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

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

  1. Брукшир Дж. Информатика и вычислительная техника. 7-е изд. – СПБ.: Питер, 2004. – с. 241-250
  2. Гедравнович В.В., Змеева Ю.В., Абрамович А.О. Основы информатики и вычислительной техники – Минск, Изд-во
  3. Джош Локхарт. Современный PHP. Новые возможности и передовой опыт / пер. с англ. Рагимов Р.Н – М.: ДМК Пресс, 2016, с. 20
  4. Керниган, Брайан У., Ритчи, Деннис М. Язык программирования C, 2-е издание. : Пер. с англ – М. : Издательство дом "Вильямс", 2009, с. 15-17
  5. Мюллер Андреас, Гвидо Сара, Введение в машинное обучение с помощью Python/ Москва 2016-2017, с. 13-18
  6. Роберт И. Кабаков. R в действии. Анализ и визуализация данных в программе R / пер. с англ. Полины А. Волковой. – М.: ДМК Пресс, 2014. с. 27
  7. Саммерфилд М. Программирование на Python 3. Подробное руководство. – Пер. с англ. – СПб.: Символ-Плюс, 2009, с. 13
  8. Хейлсберг А., Торгерсен М., Вилтамут С., Голд П. Язык программирования C#. Классика Computer Science. 4-е изд. – СПБ.: Питер, 2012. – с. 28
  9. Шилдт, Герберт. Полный справочник по C++, 4-е издание. . Пер. с англ. – М. : Издательский дом "Вильямс", 2006, с. 30-227
  10. Шилдт, Герберт. Java 8: руководство для начинающих, 6-е изд. : Пер. с англ. – М. : ООО "И.Д. Вильямс", 2015, с. 27
  11. Marijn Haverbeke. Выразительный Javascript 2-е издание/ пер. с англ Вячеслав Голованов. с.11-12
  12. URL: https://blogs.msdn.microsoft.com/dotnet/2017/03/09/new-features-in-c-7-0/
  13. URL: https://docs.oracle.com/javase/9/whatsnew/toc.htm
  14. URL: https://github.com/Microsoft/vscode
  15. URL: http://redmonk.com/sogrady/2016/07/20/language-rankings-6-16/
  16. URL: https://spectrum.ieee.org/static/interactive-the-top-programming-languages-2016
  17. URL: https://www.tiobe.com/tiobe-index/
  1. Гедравнович В.В., Змеева Ю.В., Абрамович А.О. Основы информатики и вычислительной техники – Минск, Изд-во МИУ, 2004, с. 75

  2. Гедравнович В.В., Змеева Ю.В., Абрамович А.О. Основы информатики и вычислительной техники – Минск, Изд-во МИУ, 2004, с. 76

  3. Брукшир Дж. Информатика и вычислительная техника. 7-е изд. – СПБ.: Питер, 2004. – с. 241

  4. Брукшир Дж. Информатика и вычислительная техника. 7-е изд. – СПБ.: Питер, 2004. – с. 243

  5. Брукшир Дж. Информатика и вычислительная техника. 7-е изд., с. 243

  6. Брукшир Дж. Информатика и вычислительная техника. 7-е изд. – СПБ.: Питер, 2004. – с. 244

  7. Брукшир Дж. Информатика и вычислительная техника. 7-е изд. – СПБ.: Питер, 2004. – с. 246

  8. Брукшир Дж. Информатика и вычислительная техника. 7-е изд., с. 246

  9. Брукшир Дж. Информатика и вычислительная техника. 7-е изд. – СПБ.: Питер, 2004. – с. 247

  10. Брукшир Дж. Информатика и вычислительная техника. 7-е изд, с. 249

  11. Брукшир Дж. Информатика и вычислительная техника. 7-е изд. – СПБ.: Питер, 2004. – с. 249

  12. Брукшир Дж. Информатика и вычислительная техника. 7-е изд., с. 250

  13. Шилдт, Герберт. Полный справочник по C++, 4-е издание.. Пер. с англ. – М. : Издательский дом "Вильямс", 2006, с. 30

  14. Керниган, Брайан У., Ритчи, Деннис М. Язык программирования C, 2-е издание.: Пер. с англ – М. : Издательство дом "Вильямс", 2009, с. 15

  15. Керниган, Брайан У., Ритчи, Деннис М. Язык программирования C, 2-е издание, с. 17

  16. Шилдт, Герберт. Полный справочник по C++, 4-е издание.. Пер. с англ. – М. : Издательский дом "Вильямс", 2006, с. 226

  17. Шилдт, Герберт. Полный справочник по C++, 4-е издание.. Пер. с англ. – М. : Издательский дом "Вильямс", 2006, с. 226

  18. Хейлсберг А., Торгерсен М., Вилтамут С., Голд П. Язык программирования C#. Классика Computer Science. 4-е изд. – СПБ.: Питер, 2012. – с. 28

  19. Шилдт, Герберт. Java 8: руководство для начинающих, 6-е изд. : Пер. с англ. – М. : ООО "И.Д. Вильямс", 2015, с. 27

  20. Саммерфилд М. Программирование на Python 3. Подробное руководство. – Пер. с англ. – СПб.: Символ-Плюс, 2009, с. 13

  21. Джош Локхарт. Современный PHP. Новые возможности и передовой опыт / пер. с англ. Рагимов Р.Н – М.: ДМК Пресс, 2016, с. 20

  22. Marijn Haverbeke. Выразительный Javascript 2-е издание/ пер. с англ Вячеслав Голованов. с.11

  23. Marijn Haverbeke. Выразительный Javascript 2-е издание/ пер. с англ Вячеслав Голованов. с.12

  24. Роберт И. Кабаков. R в действии. Анализ и визуализация данных в программе R / пер. с англ. Полины А. Волковой. – М.: ДМК Пресс, 2014. с. 27

  25. Роберт И. Кабаков. R в действии. Анализ и визуализация данных в программе R / пер. с англ. Полины А. Волковой. – М.: ДМК Пресс, 2014. с. 27

  26. URL: http://redmonk.com/sogrady/2016/07/20/language-rankings-6-16/

  27. URL: http://redmonk.com/sogrady/2016/07/20/language-rankings-6-16/

  28. URL: https://spectrum.ieee.org/static/interactive-the-top-programming-languages-2016

  29. URL: https://www.tiobe.com/tiobe-index/

  30. URL: https://www.tiobe.com/tiobe-index/

  31. Мюллер Андреас, Гвидо Сара, Введение в машинное обучение с помощью Python/ Москва 2016-2017, с. 13

  32. Мюллер Андреас, Гвидо Сара, Введение в машинное обучение с помощью Python, с. 18

  33. URL: https://github.com/Microsoft/vscode