Текстовый вариант видеоурока из предыдущего шага План: Язык программирования; Критерии деления языков программирования; Популярность; Компилируемые или интерпретируемые языки программирования; Низкоуровневые и высокоуровневые языки программирования; Деление языков программирования по принципам программирования; Критерии по классу задач. Язык программирования Язык программирования — формальный язык, предназначенный для записи компьютерных программ. В разрезе архитектуры и при абстрактном взгляде: язык программирования — инструмент. Многие начинающие разработчики уделяют много внимания выбору языка программирования, но набравшись опыта, мы начинаем смотреть на систему абстрактно или погружаться в архитектуру различных систем, начинаем понимать, что язык программирования — всего лишь небольшая деталь или инструмент, помогающий решать те или иные задачи. В пример можно привести большие социальные сети, как Facebook и Reddit, успешно решающие ряд поставленных проблем. Данные социальные сети включают в себя различные технологии и языки программирования, например, в Facebook — PHP, в Reddit — Python. Задачи и проблемы, которые решают эти системы — одинаковые, но решаются разными языками программирования. Здесь нельзя сказать, какой из них лучше или хуже, это всего лишь инструмент. Критерии деления языков программирования По популярности; По компилируемости или интерпретируемости; По низкоуровневости или высокоуровневости; По принципам программирования; По классу задач и др. Популярность Различные системы и рейтинги составляются по различным наборам данных. Некоторые рейтинги составляются по количеству поисковых запросов в поисковых системах, другие — по количеству страниц про тот или иной язык, третьи — по количеству вопросов, которые задаются по тому или иному языку программирования; четвертые — опросы разработчиков по всему миру, пытающиеся отранжировать эти языки для выведения статистики и ежегодных отчетов. Нет единого рейтинга популярности, поэтому смотрите на несколько рейтингов и самостоятельно определяйте, какой рейтинг вам импонирует. Три наиболее популярных и правдивых рейтинга: TIOBE; StackOverflow Annual Survey; PYPL. Если язык программирования, которым вы пользуетесь, не попал в десятку на слайде, не переживайте, это лишь примерная статистика. Здесь мы выделили: С; C++; C#; Java; JavaScript; TypeScript; Python; PHP; Go; Swift. Компилируемые и интерпретируемые языки программирования Компилируемые языки программирования — языки, которые имеют процесс компиляции, в рамках которого исходный код преобразуется в машинный код для конкретной архитектуры. Машинный код исполняется на конкретных процессорах и на железе. Компилируемые языки: С; C++; Go; Swift. TypeScript (с большой натяжкой и сомнением, потому что преобразуется не в машинный код, а в JavaScript). Условно-компилируемые языки (это те языки, которые преобразовываются в промежуточный код, а не в машинный): C# (IL); Java (Байт-код). К этим языкам мы вполне можем добавить TypeScript. Промежуточный язык выполняется с помощью виртуальных машин. Он компилируется, преобразуется, интерпретируется в машинный код. Данные языки находятся в условно-компилируемом блоке, потому что они не сразу преобразуются в машинный код в своем обычном виде. Интерпретируемые языки программирования — языки, выполняющиеся в рантайме, подстрочно. В рамках выполнения у них есть интерпретатор, который уже в рантайме преобразует конкретные исходные коды в машинный код, который будет исполняться на процессоре и железе. Интерпретируемые языки: JavaScript; Python; PHP. Низкоуровневые и высокоуровневые языки программирования Низкоуровневые языки программирования — языки, которые позволяют написать программу максимально близко к машинным кодам. К низкоуровневым можно отнести язык ассемблера и прочие языки с мнемоническими командами, с адресацией к памяти. К высокоуровневым можно отнести остальные языки. Большинство программистов пишет на высокоуровневых языках. Данным изображением мы решили напомнить, что, если мы будем рассматривать архитектуру системы, архитектуру нашего предприятия на всех диаграммах, которые мы рассматривали, диаграмма кода всегда будет считаться низким уровнем с точки зрения архитектуры. Но если посмотрим с точки зрения процесса программирования и исполнения кода, то в низком уровне на нашей архитектуре пишем на высоком уровне с точки зрения работы на железе. Напоминание: написание исходного кода будет результатом использования больших систем и развесистых архитектур по выполнению этого кода, компиляции, по работе системы и взаимодействию с железом. Архитектура везде. Архитектурные подходы необходимо применять и в построении абстракций бизнес-систем, и в абстракциях железа, сети, операционных систем и т.д. Деление языков программирования по принципам программирования Языки программирования делятся на: Процедурные (императивные); Объектно-ориентированные; Декларативные. К процедурным языкам относятся те языки, у которых программа выглядит, как набор операторов, инструкций и вызовов функций или процедур (С, Pascal, Fortran и т.д.). Это простые программы, где алгоритм — последовательность наборов разных операторов и вызовов других подпрограмм. Объектно-ориентированные языки программирования. Здесь развитие получили процедурные языки. Программа выглядит, как набор создания экземпляров и вызов методов у этих экземляров (C++, Java, C# и др.). В декларативных языках программа выглядит как то, что мы хотим от этой программы. SQL, HTML — эти языки мы можем назвать декларативными. Они описывают, что мы хотим получить в итоге. Эти языки делятся на функциональные (Haskell и др.) и логические (Пролог). Критерии по классу задач Языки программирования могут быть специализированными. Они могут быть: Для разметки; Для запросов данных; Для математических вычислений; Графиками; Универсальными и т.д. Чаще всего мы пишем на универсальных языках программирования. Они могут решать задачи из различных классов, а также работать с другими языками. Языки программирования можно делить по следующим критериям: По наличию сборщика мусора; По динамической и статической типизации и т.д. Цель данного урока — показать, что языков программирования много; выбирая их, вам нужно отталкиваться от многих критериев (конкретные задачи, изучение различных инструментов, популярность языка и поиск людей с нужными компетенциями). Выбирайте язык, исходя из потребностей, которые у вас возникают.