Что такое программа: данные, инструкции, выполнение🔗
Программа как рецепт: данные и инструкции🔗
Кулинарный рецепт требует ингредиентов (данных) и пошаговых инструкций (алгоритма). Компьютерная программа действует по тому же принципу: получает входные данные, последовательно обрабатывает их и выдаёт результат.
| Кулинария |
Программирование |
| Рецепт |
Исходный код программы |
| Ингредиенты |
Входные данные (input) |
| Шаги приготовления |
Инструкции (операторы) |
| Повар/кухонный комбайн |
Процессор (CPU) |
| Готовое блюдо |
Выходные данные (output) |
Программа — это алгоритм преобразования входных данных в выходные. Каждая инструкция изменяет состояние данных: вычисляет, сравнивает, форматирует. Процессор выполняет команды одну за другой, строго в порядке следования, без пропусков.
Диаграмма загружается…
# Пример: расчёт стоимости покупки
price = 150
quantity = 3
total = price * quantity
print(total)
В этом примере price и quantity — входные данные, операторы = и * — инструкции по преобразованию, а 450 — результат выполнения. Как компьютер хранит эти значения в памяти и управляет разными типами данных, мы разберём в следующей лекции.
От текста к железу: как код становится инструкциями🔗
От текста к сигналам🔗
Если программа — это рецепт для процессора, CPU не читает текст: он реагирует только на электрические импульсы — двоичные сигналы 0 и 1. Команда вроде print("Hello") трансформируется в машинные инструкции, управляющие транзисторами кристалла. Между исходным кодом и сигналами на контактах CPU лежат уровни абстракции. Разберём два способа преодолеть этот разрыв.
Компиляция и интерпретация🔗
Компиляция (C, Go): транслятор один раз переводит исходный текст в исполняемый файл с машинным кодом конкретной архитектуры (x86, ARM). Бинарник работает автономно и даёт максимальную скорость.
Интерпретация (Python, JavaScript): интерпретатор читает текст построчно, сразу выполняя команды. Машинный код генерируется на лету.
| Критерий |
Компиляция |
Интерпретация |
| Выходной файл |
Исполняемый бинарный |
Нет отдельного файла |
| Скорость выполнения |
Максимальная |
Ниже (затраты на анализ) |
| Портативность |
Привязка к платформе |
Работает везде, где есть интерпретатор |
| Отладка |
Сложнее |
Проще (ошибки сразу видны) |
Диаграмма загружается…
В обоих случаях процессор получает одинаковые двоичные команды — разница лишь во времени и способе их подготовки.
Байткод: промежуточный слой🔗
Многие языки используют гибридный подход: код компилируется не в машинный, а в байткод — платформонезависимое промежуточное представление. Python преобразует .py в байткод (файлы .pyc), который выполняет виртуальная машина CPython. Это сочетает переносимость интерпретатора со скоростью, близкой к скомпилированным языкам.
Соотношение между строками высокоуровневого кода и машинными инструкциями достигает 1:103 — одна строка порождает тысячи операций:
price = 100
tax_rate = 0.2
total = price * (1 + tax_rate)
print(total)
Эти четыре строки превращаются в цепочку операций: выделение памяти, загрузка констант с плавающей точкой, арифметика (+ и ×), системный вызов вывода.
Далее разберём, как запускается файл программы и что происходит при старте выполнения.
От файла к процессу: жизненный цикл программы🔗
Программа рождается в текстовом файле — статичном хранилище инструкций. Откройте редактор (VS Code, PyCharm или даже «Блокнот»), создайте документ, введите код и сохраните с расширением .py. Назовём его hello.py:
print("Привет, мир!")
Файл на диске — это последовательность байтов в кодировке UTF-8, пассивная и неизменная. Он не выполняется сам по себе, а ждёт исполнителя. Чтобы оживить инструкции, необходим запуск. Когда вы нажимаете «Run» или вводите python hello.py в терминале, операционная система создаёт процесс: выделяет страницы в оперативной памяти (RAM), загружает туда код и передаёт управление интерпретатору Python — программе-переводчику с человеческого языка на машинный.
Диаграмма загружается…
Интерпретатор — это среда выполнения (runtime), посредник между человеком и железом. Внутри него разворачивается превращение: текстовые символы становятся байт-кодом, который процессор исполняет так же быстро, как и машинный. Результат возвращается через runtime в консоль. Когда команда print завершит работу, процесс умирает, память освобождается, а исходный файл остаётся нетронутым на диске, готовым к следующему запуску.
Сравните статику и динамику с нотным листом (файл) и живым исполнением симфонии (процесс). Ноты застыли на бумаге, но звук появляется только при интерпретации дирижёром в конкретный момент времени. Программа существует одновременно в двух ипостасях: как неактивный рецепт на жёстком диске и как активное действие в оперативной памяти.
Это было первое знакомство. Детали синтаксиса Python — зачем нужны кавычки вокруг текста, как устроена функция print внутри, что такое переменные и арифметические операторы — разберём в лекциях 2 и 3.