Языки программирования: понятие и классификация
Процессор понимает нули и единицы. Человек так писать устаёт на второй команде. Язык программирования - договорённость, как описать задачу словами и формулами ближе к человеку, а потом превратить это в команды для машины.
Язык программирования - формальный язык с алфавитом, синтаксисом и семантикой, предназначенный для записи алгоритмов и программ, которые затем исполняет компьютер (напрямую или через переводчик: компилятор/интерпретатор).
Важно не смешать с «языком» в быту. У языка программирования жёсткие правила: лишняя скобка - ошибка, а не «ну примерно понятно». Зато один и тот же алгоритм можно записать на разных языках и получить одну идею в разных «диалектах».
Зачем столько языков
Задачи разные. Скрипт на пару экранов, драйвер устройства, сайт, научный расчёт, прошивка чайника - требования к скорости, безопасности, удобству и экосистеме не совпадают. Универсальный «лучший язык на все случаи» в природе не водится, хотя споры в интернете это опровергают еженедельно.
На контрольной обычно ждут классификацию и пару примеров, а не священную войну Python vs Java.
Машинный, ассемблер, языки высокого уровня
Машинный язык - команды в двоичном (или шестнадцатеричном) виде, которые исполняет конкретный процессор.
Язык ассемблера - мнемоническая запись тех же команд: MOV, ADD вместо сырых кодов. Близок к железу, зависит от архитектуры CPU.
Язык высокого уровня - абстракции ближе к человеку: переменные, функции, циклы, объекты. Один оператор часто соответствует многим машинным командам.
Цепочка типичная: исходный текст → компилятор или интерпретатор → (иногда байткод/промежуточное представление) → исполнение. Ассемблер используют там, где критичны размер, скорость или прямой доступ к железу. В школе и большинстве вузовских практикумов доминируют языки высокого уровня.
Компиляция и интерпретация
- Компилятор переводит программу целиком (или крупные части) в исполняемый код до запуска. Классические примеры духа: C, C++, Go. Плюс: скорость исполнения. Минус: цикл «написал → собрал → запустил» длиннее.
- Интерпретатор читает и выполняет программу по шагам. Удобно для скриптов и обучения. Чистый интерпретатор обычно медленнее скомпилированного кода.
- Смешанные схемы - норма сегодня: Java/C# компилируются в байткод и гоняются на виртуальной машине; Python тоже не «тупо строчка за строчкой» в современных реализациях.
В билете достаточно отличить идею «перевели заранее» от «разбираем по ходу», и не клясться, что Python «всегда только интерпретатор» в абсолютном смысле.
Классификация по парадигмам
Парадигма - стиль мышления о программе.
- Императивная - «сделай шаг 1, потом шаг 2»: явное изменение состояния (переменные, присваивания).
- Процедурная - императивная + разбиение на процедуры/функции (Pascal, C в типичном стиле).
- Объектно-ориентированная (ООП) - объекты, классы, инкапсуляция, наследование, полиморфизм (Java, C#, Python тоже умеет). Подробнее - в статье про ООП-языки.
- Функциональная - упор на функции без побочных эффектов, неизменяемые данные (Haskell; элементы в JavaScript, Scala, Python).
- Логическая - описание фактов и правил, поиск решения (Prolog; реже в базовом курсе).
Современные языки часто мультипарадигменные: на Python пишут и процедурно, и объектно, и с функциональными приёмами. Классификация - карта, не тюрьма.
Типизация: строгая и нестрогая, статическая и динамическая
Два разных вопроса, их любят склеивать.
- Когда проверяют типы? Статическая типизация - в основном до запуска (Java, C#, Go). Динамическая - во время выполнения (классический Python, JavaScript).
- Насколько жёстко? Сильная типизация меньше молчаливых странных преобразований; слабая чаще «угадывает» (исторический пример духа - неявные преобразования в JavaScript, из-за которых
==стал мемом).
Для ответа уровня ЕГЭ/колледжа: статика ловит часть ошибок раньше, динамика ускоряет прототипирование. Выбор - компромисс, не мораль.
Поколения и примеры «из учебника»
В старых пособиях ещё делят языки на поколения (1GL машинный, 2GL ассемблер, 3GL Fortran/C/Pascal/Java…, 4GL ближе к предметным генераторам запросов). Полезно как историческая шкала, но на практике важнее парадигма, экосистема и задача.
Частые примеры в курсах:
- Python - обучение, скрипты, данные, веб;
- Java / C# - крупные приложения, ООП, корпоративный сектор;
- C / C++ - системное ПО, производительность, близко к ресурсам;
- JavaScript - браузер и весь фронтенд; на Node.js ещё и сервер;
- SQL - язык запросов к реляционным БД (его иногда отдельно оговаривают как не «язык общего назначения»).
SQL как раз мост к теме баз данных: программа на Python/Java часто только «обёртка», а тяжёлая выборка живёт в запросе.
Алгоритм, программа, язык
Алгоритм можно нарисовать блок-схемой или описать словами. Программа - алгоритм, записанный на конкретном языке и готовый к исполнению средой. Один алгоритм - много программ. Одна программа без алгоритмической идеи - обычно каша.
Поэтому в информатике язык изучают вместе со структурами: ветвление, цикл, подпрограмма. Язык даёт синтаксис; алгоритм даёт смысл.
Среда разработки и трансляция
Писать в блокноте можно. Удобнее - в IDE: подсветка, отладка, автодополнение (VS Code, PyCharm, Visual Studio…). Транслятор (компилятор/интерпретатор) может быть вшит в IDE или вызываться отдельно из командной строки.
Ошибка компиляции ≠ ошибка логики. Первая: «так писать нельзя». Вторая: «написал законно, но считает не то». На защите лабораторной это разные миры.
Частые ошибки в ответах
- «HTML - язык программирования». HTML - язык разметки; логику даёт JavaScript и серверный код.
- «Чем выше уровень, тем всегда лучше». Для драйвера «выше» часто хуже.
- Путают компиляцию и интерпретацию до карикатуры.
- Сводят всё к списку логотипов без классификации.
- Путают алгоритм и программу.
Ещё классика: назвать Excel языком программирования из-за макросов VBA. VBA - язык; сетка Excel - среда. Формулировку лучше уточнять.
Краткая шпаргалка
- Язык программирования = правила записи программ для компьютера.
- Уровни: машинный → ассемблер → высокий уровень.
- Перевод: компиляция / интерпретация / смешанные схемы.
- Парадигмы: императивная, процедурная, ООП, функциональная, логическая.
- Типизация: статическая/динамическая и сила ограничений - разные оси.
- Алгоритм ≠ программа; HTML ≠ язык программирования общего назначения.
Если нужно углубиться в объекты и классы - см. ООП языки программирования. Если про «как устроен исполнитель команд» рядом с железом - загляните в операционные системы.