Языки и методы программирования¶
Краткий справочник вопросов и ответов по основам языков и методов программирования для подготовки к экзамену.
1. Что такое программирование и язык программирования, зачем они нужны¶
Программирование — процесс создания инструкций (программ), которые компьютер выполняет для решения задачи. Язык программирования — формальная система записи этих инструкций, понятная человеку и преобразуемая в машинный код. Языки нужны, чтобы абстрагироваться от железа и выражать алгоритмы в удобной, переносимой и поддерживаемой форме.
2. Парадигмы программирования: чем отличаются¶
Парадигма — это способ мышления и организации кода. Основные различия:
- Императивная — программа описывает как шаг за шагом менять состояние (последовательность команд).
- Процедурная — разновидность императивной с разбиением на процедуры/функции (C, Pascal).
- Объектно-ориентированная (ООП) — код организован вокруг объектов с данными и поведением; ключевые принципы — инкапсуляция, наследование, полиморфизм.
- Функциональная — вычисления как применение функций, упор на неизменяемость и отсутствие побочных эффектов (Haskell, Erlang).
- Декларативная — описывает что нужно получить, а не как (SQL, HTML).
3. Направления программирования¶
Языки и инструменты обычно специализируются под область применения:
- Системное — ОС, драйверы, низкоуровневые утилиты (C, Rust).
- Прикладное — desktop-программы, бизнес-логика.
- Веб — frontend и backend (JavaScript, Python, Go).
- Мобильное — приложения для iOS/Android (Swift, Kotlin).
- БД — работа с данными и хранилищами (SQL).
- ML / Data Science — анализ данных и машинное обучение (Python, R).
- Embedded / IoT — микроконтроллеры и устройства (C, C++).
- Геймдев — игры и движки (C++, C#).
- DevOps / IaC — автоматизация инфраструктуры (Go, Python, YAML/HCL).
4. Эволюция языков программирования¶
Языки развивались от близких к железу к высокоуровневым и мультипарадигменным:
- Машинные коды — двоичные инструкции процессора.
- Ассемблер — мнемоники вместо чисел, но всё ещё привязка к архитектуре.
- Процедурные языки высокого уровня (Fortran, C, Pascal).
- ООП — Smalltalk, C++, Java.
- Современные мультипарадигменные — Python, Go, Rust, Kotlin.
По поколениям: 1GL (машинный код), 2GL (ассемблер), 3GL (процедурные высокоуровневые), 4GL (декларативные/предметные, например SQL), 5GL (логические и ИИ-ориентированные).
5. Классификация языков программирования¶
Языки классифицируют по нескольким признакам:
- По уровню: низкоуровневые (ассемблер, близко к железу) и высокоуровневые (абстрагированы от архитектуры).
- По парадигме: процедурные, объектно-ориентированные, функциональные, декларативные.
- По способу исполнения: компилируемые (C, Go — в машинный код заранее), интерпретируемые (Python — выполняются построчно интерпретатором), JIT (Java, C# — компиляция в байт-код и затем в машинный код во время выполнения).
6. Понятие системы программирования¶
Система программирования — это набор инструментов для создания и отладки программ. В неё входят:
- Компилятор — переводит исходный код в машинный/байт-код целиком.
- Интерпретатор — выполняет исходный код напрямую, без отдельной сборки.
- IDE — интегрированная среда разработки, объединяющая редактор, сборку и отладку.
- Отладчик (debugger) — пошаговое выполнение и анализ состояния программы.
- Компоновщик (linker) — связывает объектные модули в исполняемый файл.
7. Методы программирования¶
Метод программирования — практический подход к написанию кода в рамках парадигмы:
- Императивное — явное описание последовательности действий и изменения состояния.
- Декларативное — описание желаемого результата без указания шагов.
- Функциональное — построение программы из чистых функций без побочных эффектов.
- Объектно-ориентированное — моделирование предметной области через объекты и их взаимодействие.
8. Жизненный цикл программного обеспечения (SDLC)¶
SDLC — последовательность этапов создания и поддержки ПО: анализ требований, проектирование, разработка, тестирование, внедрение, сопровождение. Различают методологии организации этих этапов:
- Каскадная (Waterfall) — этапы строго последовательны, возврат назад затруднён.
- Agile — итеративная разработка короткими циклами с быстрой обратной связью и гибкостью к изменениям.
9. Типы приложений¶
По способу взаимодействия и развёртывания приложения делятся на:
- Консольные — работают в терминале через текстовый ввод/вывод.
- Оконные (GUI) — desktop-программы с графическим интерфейсом.
- Web — выполняются в браузере, доступны по сети.
- Мобильные — приложения для смартфонов и планшетов.
- Сервисы / демоны — фоновые процессы без интерфейса, обслуживающие запросы.
10. Основные свойства языков программирования¶
Ключевые характеристики, по которым сравнивают языки:
- Типизация: статическая (типы проверяются при компиляции) или динамическая (во время выполнения); сильная (нет неявных приведений) или слабая.
- Парадигма — поддерживаемые стили программирования.
- Управление памятью — ручное (C) или автоматическое через сборщик мусора (GC) (Go, Java, Python).
- Компилируемость — компилируется язык, интерпретируется или использует JIT.
11. Структура программ¶
Программа структурируется из модулей (отдельные файлы с кодом) и пакетов (группы модулей). Выполнение начинается с точки входа — специальной функции или блока. В Go и C это функция main, в Python — конструкция if __name__ == "__main__":, отделяющая запуск как скрипта от импорта как модуля.
12. Операторы языка¶
Операторы — символы или ключевые слова, выполняющие операции над значениями:
- Арифметические —
+,-,*,/,%(остаток). - Сравнения —
==,!=,<,>,<=,>=. - Логические —
and/&&,or/||,not/!. - Битовые —
&,|,^,~,<<,>>. - Присваивания —
=, а также составные+=,-=,*=и др.