Языки программирования: что это такое, зачем нужны и какой выбрать новичку
Разбираемся, как устроены языки программирования, почему их так много и чем они отличаются от алгоритмов.
Что такое язык программирования
Язык программирования — это набор формальных правил, по которым пишут программы. Обычный язык нужен для общения людей, а язык программирования — для общения с компьютером. Как и в любом естественном языке, тут есть лексика — слова, функции и операторы, из которых по правилам синтаксиса составляются выражения. Они имеют чёткий, вполне определённый смысл, понятный компьютеру, — семантику.
Вот, например, программа на языке JavaScript:
Здесь слово alert — лексика, один из принятых в языке методов обработки текста. Текст в одинарных кавычках, скобки, точка с запятой — правила синтаксиса. А то, что нужно сделать в итоге, — семантика. Получив эти инструкции, компьютер выведет на экран всплывающее окно с кнопкой и сообщением: «Это программа на JavaScript».
Фанат Free Software Foundation, использую Linux и недолюбливаю Windows. Пишу истории про кодинг и программы на Python. Влюблен в LISP, но пока что не умею на нем программировать.
Чем языки программирования отличаются от алгоритмов
Программы нужны для того, чтобы машина сделала что-то полезное. Это невозможно, если нет чёткого порядка действий и правил их выполнения — алгоритма.
Алгоритм работает как маршрут в навигаторе: «Из пункта А едем в пункт Б, поворот через 150 метров». Англичанин понимает его по-английски, китаец —
по-китайски, а мы с вами — по-русски. Языки разные, а порядок действий один и все должны добраться до нужного места.
Любая программа начинается с алгоритма, но на разных языках это может выглядеть по-разному. Например, вот эта — на языке С — проверяет, чтобы делитель не был нулём, а затем делит одно число на другое. Или пишет, что так делать нельзя.
То же самое, но на Python.
В программе на Python нет фигурных скобок и точек с запятой, но алгоритм и результат работы такой же, как у программы на C, да и слова похожи.
Перейти с одного языка программирования на другой легко: если знаешь Java — быстро начнёшь кодить, например, на Python или C#.
Как компьютер понимает разные языки программирования
На самом деле язык программирования — это не язык компьютера. Машина понимает последовательности нулей и единичек: есть напряжение в цепи — единица, нет — ноль. Поэтому любую программу сначала надо перевести в набор таких машинных команд.
Для этого есть два инструмента — компилятор и интерпретатор. Компилятор работает как бюро переводов: вы отдаёте ему весь текст программы, а он превращает его в исполняемый код, набор команд для процессора. Интерпретатор больше похож на переводчика-синхрониста: сказали фразу — синхронист тут же её перевёл, а компьютер выполнил.
Внутри компиляторов и интерпретаторов — сложные наборы правил по превращению языка программирования в машинный код, понятный компьютеру. Это тоже программы. Их пишут создатели нового языка — на каком-то другом, уже существующем. Например, интерпретатор Python написан на C, а сам C — на ассемблере, практически машинном коде.
Что такое библиотеки
Библиотеки — наборы функций, готовых шаблонов, написанных на каком-то из языков программирования. Это удобно и похоже на книги в обычной библиотеке: на них можно ссылаться внутри программ и сразу получать результат без необходимости каждый раз писать много кода.
Например, в Python есть модуль — библиотека yandex_translate, которая переводит тексты на разные языки. Программистам не надо создавать программу-переводчик с нуля, достаточно подключить этот модуль и обратиться к нему из любой точки кода.
Классификация языков программирования
Работы любой сложности
Квалифицированная помощь от опытных авторов
Языки программирования — основные понятия
Эволюция языков программирования тесно связана с историей развития компьютерных наук, которая началась в XIV веке, вместе с изобретением первой механической вычислительной машины английским ученым Чарльзом Бэббиджем. Программа для нее, позволяющая вычислять числа Бернулли, была написана леди Адой Августой Лавлейс в 1842 году. В честь нее впоследствии был назван один из языков программирования — Ада.
В дальнейшем появились и первые ЭВМ, вместе с которыми начали развиваться языки программирования в их современном понимании.
Язык программирования — искусственный язык, созданный для разработки и записи программ, предназначенных для выполнения их определенным техническим объектом, способным быть запрограммированным (станки с ЧПУ, все виды компьютерной техники). Его назначение — представить задачу в понятной и выполнимой для ЭВМ форме.
Компьютерная программа — это последовательность определенных команд (инструкций), с помощью которых компьютер решает поставленную задачу.
Команда (инструкция) — указание процессору, какое действие (операцию) ему необходимо выполнить.
Число языков программирования постоянно растет. На сегодняшний день их рост замедлился, но общее количество (включая модификации) составляет более двух тысяч, среди которых самых популярных не больше сотни.
Программист-профессионал знает и использует в своей работе более десятка различных языков в зависимости от стоящих перед ним задач.
Их условно можно классифицировать:
Составляющие части языка программирования
Несмотря на то, что в концепции построения языков наблюдаются принципиальные различия, строение их внутренней системы формально является одинаковым. Основными составляющими частями языков программирования являются:
С помощью низкоуровневых языков чаще всего разрабатываются драйверы и системные программы. Одним из таких языков является Ассемблер, который каждую из команд машинного кода представляет в виде мнемоник — условных символьных изображений.
Недостаток состоит в том, что созданные с их помощью алгоритмы представляют трудность для чтения даже самому разработчику, а для работы с ними необходимо разбираться в архитектурных особенностях компьютера.
Высокого уровня
Наибольшее распространение приобрели языки высокого уровня (машинно-независимые), с помощью которых можно писать программы независимо от типа процессора конкретного компьютера, его архитектуры. Понятия и структура высокоуровневых языков максимально удобны для восприятия человеком. Разрабатывать программы с помощью понятных и достаточно мощных команд, используемых ими, программисту гораздо проще.
При этом разработчик допускает меньше ошибок, а исходные тексты программ легко переносятся с помощью трансляторов и на другие платформы.
Транслятор — специальная программа-переводчик, являющаяся одним из инструментов среды программирования. Она считывает программу, написанную на высокоуровневом языке, и переводит ее в машинный код конкретного процессора. Все трансляторы работают либо по принципу интерпретации, либо по принципу компиляции.
Интерпретатор — программа, которая выполняет перевод (трансляцию) каждого отдельного оператора исходной программы с последующим его выполнением.
При этом сама программа остается в первоначальном виде. При ее повторном запуске процесс трансляции будет выполняться заново. Поэтому метод интерпретации считается недостаточно эффективным. Он имеет два недостатка:
Тем не менее, интерпретаторы активно используются в качестве трансляторов в процессе разработки программ и их первоначальной отладки.
Компилятор — программа, которая полностью переводит текст исходной программы с высокоуровневого на низкоуровневый (машинный) язык.
Полученный при этом машинный код сохраняется в виде исполняемого файла с расширением «.exe», который можно многократно использовать уже без повторной трансляции.
При использовании компиляции сначала происходит полная трансляция исходной программы на язык машинных кодов, и только после этого она запускается на выполнение. В процессе исполнения программы транслятор становится ненужным, освобождая оперативную память. Это позволяет повышать производительность по сравнению с методом интерпретации для одной и той же программы.
Существуют также трансляторы, которые сочетают достоинства, как интерпретатора, так и компилятора. На этапе разработки и отладки они работают как интерпретаторы, а после окончательной отладки исходная программа методом компиляции транслируется в объектный модуль, который обрабатывается редактором связей Link (специальной программой ОС) и преобразуется в загрузочный модуль.
По принципам программирования
По принципам программирования языки делятся на:
В процедурном программировании роль компьютера состоит в механическом исполнении формальных предписаний о том, как именно решить конкретную задачу. Система, в которую объединяются эти предписания, и является программой процедурного типа. В непроцедурном программировании используется противоположный принцип. Компьютер получает задачу в общем виде, проводит ее исследование и самостоятельно находит алгоритм ее решения.
Процедурные
Основой процедурных языков является описание последовательной смены состояния процессора, ячеек памяти и других устройств компьютера. На этапе процедурного программирования разработчик детально описывает процесс решения задачи, составляет его алгоритм, не вдаваясь в подробности об ожидаемых свойствах результата.
Программист работает с операторами и данными, которые являются основными понятиями этого вида языков. Комбинация различных операторов при этом называется процедурой, откуда и взялось название процедурного программирования.
Поскольку процедурные языки имеют операторный тип, то алгоритм, написанный с их помощью, является последовательностью операторов. Их характерным признаком также считается наличие оператора присваивания (Basic, Fortran, Pascal, Algol, С).
Эти языки называю еще императивными, потому что программа, написанная с их помощью, напоминает повелительное наклонение (императив) в обычной речи, приказ что-то делать. Программа является последовательностью команд для их выполнения компьютером и имеет четкую, строгую структуру.
При процедурном программировании оперируют данными в пошаговом режиме с помощью пошаговых инструкций. Используя императивный стиль программирования, разработчик подробно расписывает компьютеру, как и что он должен пошагово сделать, чтобы решить задачу.
Непроцедурные
Непроцедурные языки более эффективны для написания программ по поиску больших объемов данных, а также, когда невозможно точно описать процесс решения задачи (например, при распознавании образов или переводе). К языкам непроцедурного программирования относят декларативные и объектно-ориентированные.
При использовании декларативных языков подробно описываются критерии, которым должен соответствовать искомый результат, имеющиеся исходные структуры и связи между ними, но не указываются способы его достижения (нет готового алгоритма, схемы решения).
При декларативном типе программирования используется декларативная семантика. Вместо понятия «оператор» декларируются высказывания (объявления) с помощью символьной логики.
Декларативные языки принято делить на две группы (или семейства):
При использовании логического программирования разработчик задает совокупность определенных фактов и логических правил, отношений между ними в виде формул, создает запросы по искомой проблеме. Система же сама решает данную проблему, применяя механизмы логического вывода, основанные на математической логике.
Программа, написанная на языке PROLOG, состоит из двух частей:
Основной операцией при работе с данными является сопоставление (унификация, согласование). Программа начинается с запроса по проблеме. С помощью операции сопоставления производится доказательство истинности определенного логического утверждения в пределах заданной совокупности правил и фактов.
Алгоритм этого логического доказательства и будет определять принципы работы программы. Чаще всего этот язык используют в программировании экспертных систем.
Функциональное программирование основано на формулировании задачи в качестве совокупности определенных функций. Программа выглядит как хаотичный набор уравнений, который определяет функции и значения. Эти значения, в свою очередь, сами являются функциями от других значений.
Программист лишь описывает способ решения задачи, не определяя строгую последовательность действий при нахождении решения. Основными свойствами таких языков являются модульность, отсутствие побочных эффектов, простота и краткость.
В восьмидесятые и девяностые годы XX века декларативные языки были весьма популярны в качестве программирования искусственного интеллекта, но так и не получили широкого применения из-за отсутствия возможности создавать быстродействующие программы для решения более содержательных задач.
Объектно-ориентированные
Методика ООП появилась в конце XX века. Объектно-ориентированные языки вместо «процедур» и «данных» оперируют понятием «объект». С помощью ООП создается окружение в виде большого количества объектов. Каждый из них является независимым блоком, работая как отдельный компьютер.
Блоки используют для решения задач, не вникая в принципы их внутреннего функционирования (C++, Visual Basic, Delphi, Java, Python). На сегодняшний день среди профессиональных программистов самым популярным является язык C++, который затмил собой по популярности процедурные аналоги.
Дальнейшее развитие языков нацелено на их использование в современном «параллельном программировании» (программы представляют собой набор процессов, исполняемых одновременно). В связи с этим создаются специализированные языки ООП, одним из которых является высокоуровневый язык MC#, разработанный для платформы «.NET». Он позволяет создавать программы, работающие с асинхронными вызовами в распределенной среде.
По ориентации на класс задач
Универсальные
Универсальные языки программирования нацелены на решение широкого спектра задач. Среди них сегодня наиболее распространены C++, Visual Basic, Pascal, Java, Delphi, Python.
Специализированные
Многие языки программирования разрабатывались для решения строго очерченного круга задач, с учетом специфики конкретной области. Например, COBOL был создан для обработки информации в области экономики.
Существуют также языки:
Оба направления (универсальные и специализированные языки) продолжают активно развиваться. Выбор для изучения достаточно обширен, все зависит от целей применения их в программировании.
Популярные языки
Краткая характеристика самых популярных языков:


