Программный код (код программирования): что это, виды и примеры

Программный код (код программирования): что это, виды и примеры Полезное

Программный код (код программирования) — это запись программы: последовательность инструкций, по которой компьютер выполняет задачу. У одной и той же программы бывает несколько форм записи. Исходный код пишет и читает человек, машинный код исполняет процессор, байт-код исполняет программа-посредник — виртуальная машина.

Когда говорят «написать код», почти всегда имеют в виду исходный. Ниже — чем три формы отличаются, как одна превращается в другую и как одна и та же задача выглядит на четырех языках. Примеры проверены 30.09.2026 на Python 3.14.7, Node.js 24.21.0, OpenJDK 25.0.4 и Apple clang 21 (процессор arm64).

Исходный, машинный и байт-код: в чем разница

Форма Как выглядит Кто создает Кто исполняет
Исходный код текст на языке программирования программист напрямую никто: нужен транслятор
Машинный код числа — команды конкретного процессора компилятор процессор
Байт-код числа — команды условной, виртуальной машины компилятор языка виртуальная машина (JVM, интерпретатор Python)

Еще два слова, которые часто путают с этими тремя. Исполняемый файл — это упаковка: в нем лежит машинный код, данные и служебные заголовки для операционной системы. Язык ассемблера — это текстовая запись машинных команд, удобная человеку; сам по себе он тоже исходный код.

Один пример на четырех языках

Задача одна: функция складывает два числа, программа печатает результат для 2 и 3. Каждый файл запускается отдельно и выводит в консоль 5.

Python, файл add.py, запуск python add.py:

def add(a, b):
    return a + b

print(add(2, 3))

JavaScript, файл add.js, запуск node add.js:

function add(a, b) {
  return a + b;
}

console.log(add(2, 3));

C, файл add.c:

#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int main(void) {
    printf("%d\n", add(2, 3));
    return 0;
}

Java, файл Add.java:

public class Add {
    static int add(int a, int b) {
        return a + b;
    }

    public static void main(String[] args) {
        System.out.println(add(2, 3));
    }
}

Смысл у четырех текстов одинаковый, а правила записи разные. В C и Java нужно указать типы (int) и закончить инструкцию точкой с запятой. В Python типы писать не обязательно, инструкция заканчивается переводом строки, а тело функции выделяется отступом. В JavaScript точку с запятой принято ставить, но в большинстве случаев интерпретатор расставит ее сам.

Как исходный код становится работающей программой

Процессор не понимает ни def, ни function: ему нужны машинные команды. Перевод выполняет транслятор, и основных способов два.

Компиляция — программа переводится целиком до запуска, результат сохраняется в файл. Интерпретация — программа-интерпретатор читает код и сразу выполняет его, отдельного файла с машинным кодом не остается.

Это упрощенная схема: языки редко бывают «чисто» компилируемыми или интерпретируемыми. Способ исполнения — свойство конкретной реализации языка, а не самого языка, и многие реализации совмещают оба подхода.

C: компилятор выдает машинный код

clang -O1 add.c -o add
./add

Первая команда создает исполняемый файл add, вторая запускает его и печатает 5. Исходник для запуска уже не нужен. Если попросить компилятор показать, во что превратилась функция add (clang -O1 -c add.c -o add.o, затем objdump -d add.o), получится так:

       0: 0b000020      add w0, w1, w0
       4: d65f03c0      ret

Слева — машинный код: два числа по четыре байта. Справа — те же команды на языке ассемблера: сложить два регистра и вернуться. Этот вывод получен на процессоре arm64; на x86-64 числа и названия команд будут другими. Поэтому машинный код не переносится между типами процессоров, а готовый файл — еще и между операционными системами: программу собирают заново под каждую платформу.

Любопытная деталь того же прогона: в main компилятор вообще не вызывает add, а сразу подставляет готовое число 5 (mov w8, #0x5). Это оптимизация: компилятор вправе переписать программу, если результат не изменится.

Java: компилятор выдает байт-код

javac Add.java
java Add

javac создает файл Add.class с байт-кодом, java запускает виртуальную машину (JVM), которая его исполняет и печатает 5. Команда javap -c Add показывает байт-код метода add:

  static int add(int, int);
    Code:
         0: iload_0
         1: iload_1
         2: iadd
         3: ireturn

Четыре команды: положить на стек первый аргумент, второй, сложить, вернуть. Процессор их не понимает, зато файл Add.class одинаков для Windows, Linux и macOS — различается только JVM под каждую систему. Во время работы JVM часто исполняемые участки сама переводит в машинный код; это называется JIT-компиляцией.

Python: байт-код внутри интерпретатора

Python принято называть интерпретируемым языком, но стандартный интерпретатор CPython сначала тоже компилирует исходник в байт-код и только потом исполняет его. Увидеть это можно модулем dis:

import dis

def add(a, b):
    return a + b

dis.dis(add)

Вывод на Python 3.14.7:

  3           RESUME                   0

  4           LOAD_FAST_BORROW_LOAD_FAST_BORROW 1 (a, b)
              BINARY_OP                0 (+)
              RETURN_VALUE

Логика та же, что в Java: загрузить a и b, применить +, вернуть значение. Набор команд байт-кода Python меняется от версии к версии, так что на другой версии названия будут отличаться. Это внутренняя кухня интерпретатора, а не формат для распространения программ.

JavaScript устроен похоже: движок V8 (Node.js, Chrome) переводит исходник в свой байт-код, а «горячие» функции дополнительно компилирует в машинный код.

Язык (реализация) Что получается из исходника Что нужно для запуска
C (clang, gcc) исполняемый файл с машинным кодом только сам файл и подходящая система
Java (JDK) файл .class с байт-кодом установленная JVM
Python (CPython) байт-код в памяти; кеш .pyc в __pycache__ — только для импортируемых модулей установленный Python и исходник
JavaScript (V8) байт-код и машинный код в памяти браузер или Node.js и исходник

Из чего состоит исходный код

Набор «кирпичиков» почти не зависит от языка:

  • инструкции — действия: вычислить, присвоить, вывести;
  • переменные и значения — именованные данные, с которыми работает программа;
  • операторы — знаки действий: +, =, ==;
  • управляющие конструкции — условия и циклы, которые меняют порядок выполнения;
  • функции — именованные блоки инструкций, которые можно вызывать многократно;
  • комментарии — пояснения для человека, транслятор их пропускает.

Настоящая программа — обычно не один файл, а проект: десятки и тысячи файлов с исходным кодом, подключенные библиотеки и файлы сборки, где описано, что и в каком порядке компилировать.

Код должен быть точным: пример ошибки

Человек поймет текст с опечаткой, транслятор — нет. Сохраним копию add.py под именем bad.py и уберем двоеточие в первой строке:

def add(a, b)
    return a + b

print(add(2, 3))

Результат запуска на Python 3.14.7:

  File "/w/bad.py", line 1
    def add(a, b)
                 ^
SyntaxError: expected ':'

Путь в первой строке у вас будет свой — там, где лежит файл. Программа не выполнила ни одной строки: 5 на экране нет. Интерпретатор указал файл, строку и место, где ожидал двоеточие. Исправление — вернуть : после def add(a, b). Сообщения об ошибках стоит читать дословно: чаще всего в них уже названа причина.

Где пишут и как запускают код

Исходный код — обычный текст, его можно набрать даже в «Блокноте». На практике используют редакторы кода (например, Visual Studio Code) и IDE — среды разработки вроде PyCharm или IntelliJ IDEA. Они подсвечивают синтаксис, подсказывают имена, показывают ошибки до запуска и позволяют выполнять программу по шагам.

Чтобы запустить свой первый код, нужны три шага: установить транслятор языка (Python, Node.js, JDK или компилятор C), сохранить текст в файл с нужным расширением (.py, .js, .java, .c) и выполнить команду запуска в терминале или кнопкой в IDE. JavaScript можно попробовать без установки — в консоли инструментов разработчика любого браузера.

Выводы

  • Программный код — это запись программы; у нее три основные формы: исходный код для человека, машинный для процессора, байт-код для виртуальной машины.
  • Исходный код сам не исполняется: его переводит компилятор (целиком, заранее) или выполняет интерпретатор (по ходу работы). Многие реализации совмещают оба способа.
  • Машинный код привязан к типу процессора и операционной системе, байт-код — к виртуальной машине, поэтому файл .class переносится между системами, а исполняемый файл C — нет.
  • Одна и та же задача на Python, JavaScript, C и Java записывается по разным правилам, но из одних и тех же элементов: инструкций, переменных, функций.
  • Транслятор не прощает неточностей: одна пропущенная : останавливает всю программу, а сообщение об ошибке указывает строку и причину.

Где применяется / связь с практикой

Любая программа — сайт, мобильное приложение, игра, прошивка стиральной машины — начинается с исходного кода, который затем проходит один из описанных путей до машинных команд. Понимание этого пути помогает в повседневной работе: становится ясно, почему программа «не видит» установленный интерпретатор, зачем нужна сборка и откуда берутся ошибки до запуска.

Освойте тему на практике

Начинать удобнее с языка, где мало служебных конструкций и результат виден сразу. На курсе «Python-разработчик. Базовый уровень» от синтаксиса и функций переходят к собственным проектам. Посмотреть, как преподаватели разбирают код вживую, можно на открытых уроках Otus.

FAQ

HTML — это программный код?
HTML — язык разметки: он описывает структуру страницы, а не последовательность действий. В быту его тоже называют кодом, но языком программирования он не считается.

Что такое открытый исходный код?
Это код, который опубликован под лицензией, разрешающей его читать, изменять и распространять. У закрытых программ пользователю доступен только исполняемый файл, без исходников.

Можно ли из исполняемого файла получить исходный код обратно?
Точно восстановить нельзя: при компиляции теряются имена переменных, комментарии и структура текста. Дизассемблеры и декомпиляторы дают приблизительную реконструкцию; для байт-кода Java она обычно ближе к оригиналу, чем для машинного кода.

Что такое чистый код?
Это не вид кода, а оценка его качества: понятные имена, короткие функции, отсутствие дублирования. Транслятору все равно, а людям, которые будут читать и менять программу, — нет.

OTUS Журнал
Бесплатные открытые уроки (поп-ап)