Что такое программирование

Предпосылки: нет.

Ассемблер

Каждый день вы запускаете десятки программ: открываете браузер, отправляете сообщение, переводите деньги. За каждым действием — тысячи шагов, которые кто-то записал заранее. Но почему компьютер не может разобраться сам?

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

Набор таких шагов называется программой. Человек, который записывает эти шаги, — программист. А сам процесс записи — программирование.

Из чего состоит компьютер (упрощённо)

Чтобы понять, как записывать инструкции для компьютера, нужно знать, из чего он состоит. Полная картина сложна, но для начала достаточно трёх частей:

Память хранит данные и инструкции. Можно представить её как длинный ряд пронумерованных ячеек, в каждой из которых лежит число. В одних ячейках — данные (оклады сотрудников, ставка налога), в других — сами инструкции программы.

Процессор читает инструкции из памяти одну за другой и выполняет их. Он умеет складывать, вычитать, сравнивать числа и решать, какую инструкцию выполнить следующей. Процессор — единственная часть компьютера, которая что-то вычисляет. Всё остальное — хранение и передача данных.

Ввод и вывод — это способ общения компьютера с внешним миром. Клавиатура, файл на диске, сетевое соединение — способы ввода: через них данные попадают в память. Экран, принтер, тот же файл — способы вывода: через них результат попадает к человеку.

flowchart LR
    I["Ввод<br>(клавиатура, файл)"] --> M["Память<br>данные + инструкции"]
    M --> CPU["Процессор<br>(выполняет инструкции)"]
    CPU --> M
    CPU --> O["Вывод<br>(экран, файл)"]

Этих трёх частей достаточно, чтобы объяснить любую программу: данные приходят через ввод, ложатся в память, процессор обрабатывает их по инструкциям, результат уходит на вывод. Полная картина устройства процессора — в Computer.

Первая программа

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

1. Возьми число из ячейки памяти №1
2. Возьми число из ячейки памяти №2
3. Сложи эти два числа
4. Положи результат в ячейку памяти №3
5. Покажи содержимое ячейки №3 на экране

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

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

От проводов к инструкциям в памяти

У первых электронных компьютеров программы жили не в памяти, а в проводах. ENIAC (1945) занимал целую комнату, и чтобы задать ему новую последовательность операций, операторы вручную переключали провода и тумблеры — каждая новая задача требовала физической перенастройки машины. В том же 1945 году Джон фон Нейман (John von Neumann) описал другой принцип: хранить инструкции в той же памяти, что и данные. Процессор читает инструкции из памяти, и чтобы сменить задачу, достаточно загрузить другой набор — именно эта схема лежит в основе всех современных компьютеров. Но сами инструкции по-прежнему записывались в том единственном формате, который понимает процессор, — в виде чисел: 0010 0001, 0100 0010, 0001 0011. Человеку такая запись не говорит ничего, и отладка превращается в мучительную сверку с таблицами кодов. Отсюда — следующий шаг: дать каждому числовому коду читаемое имя. С этого начинается ассемблер.

Sources

  • Dasgupta, S., 2014, It Began with Babbage: The Genesis of Computer Science. Oxford University Press.
  • Campbell-Kelly, M. et al., 2013, Computer: A History of the Information Machine. Westview Press.

Ассемблер