Урок №1. Введение в программирование

Компьютеры способны понимать лишь ограниченный набор инструкций, поэтому необходимо ясно и точно сформулировать задание, используя доступные инструкции. Программа (также известная как "приложение" или "программное обеспечение", или "софт") представляет собой набор инструкций, которые указывают компьютеру, что ему следует делать. Физическая часть компьютера, которая выполняет эти инструкции, называется "железом" или аппаратной частью (например, процессор, материнская плата и т.д.). Данный урок является началом серии уроков по программированию на языке С++ для новичков.
Машинный язык
Процессор компьютера не способен напрямую интерпретировать языки программирования, такие как C++, Java, Python и другие. Его возможности ограничены набором инструкций, которые изначально понимает процессор, и называются машинным кодом (или "машинным языком"). Организация этих инструкций выходит за рамки данного введения, однако стоит отметить два важных момента.
Во-первых, каждая команда (инструкция) представлена только определенной последовательностью (набором) цифр: 0 и 1. Эти цифры известны как биты (сокращение от "binary digit") или двоичный код.
К примеру, так выглядит одна команда машинного кода архитектуры ×86:
10110000 01100001
- Этот текст представляет собой последовательность двоичных чисел.Во-первых, каждый набор битов преобразуется процессором в инструкции для выполнения определенной задачи (например, сравнение двух чисел или перемещение числа в определенную ячейку памяти). Различные виды процессоров обычно имеют разные наборы инструкций, поэтому инструкции, которые подходят для процессоров Intel (используемых в персональных компьютерах), скорее всего, не будут работать на процессорах Xenon (используемых в игровых приставках Xbox). В прошлом, когда компьютеры только начинали активно распространяться, программистам приходилось писать программы на машинном языке, что было неудобно, сложно и занимало гораздо больше времени, чем в настоящее время.
Язык ассемблера
Поскольку программирование на машинном языке является довольно специфическим занятием, разработчики придумали язык ассемблера. В этом языке каждая команда обозначается коротким именем (а не набором нулей и единиц), а переменные могут быть управляемы через их имена. Это значительно упрощает процесс написания и чтения кода. Тем не менее, процессор не может понимать язык ассемблера напрямую, поэтому его необходимо перевести в машинный код с помощью ассемблера. Ассемблер - это инструмент, который выполняет перевод кода, написанного на языке ассемблера, в машинный язык. В сети часто используется термин "Ассемблер" для обозначения языка ассемблера.
Одним из преимуществ Ассемблера является его высокая производительность, особенно скорость выполнения, и поэтому он все еще используется в случаях, когда это критически важно. Однако это преимущество обусловлено тем, что программирование на этом языке требует адаптации к конкретному процессору. Программы, написанные для одного процессора, не будут работать на другом. Кроме того, для программирования на Ассемблере необходимо знание большого количества мало читаемых инструкций, даже для выполнения простых задач.
Для иллюстрации, представим ту же команду, но уже в виде ассемблерного кода:
mov al, 061h
Высокоуровневые языки программирования
Для улучшения читаемости кода и уменьшения его сложности были созданы высокоуровневые языки программирования. C, C++, Pascal, Java, JavaScript и Perl - все они относятся к языкам высокого уровня. Они позволяют разрабатывать и запускать программы, не беспокоясь о совместимости кода с различными архитектурами процессоров. Программы, написанные на высокоуровневых языках, должны быть скомпилированы в машинный код перед выполнением. Существует два варианта:
Процесс компиляции, осуществляемый компилятором;
Интерпретация, осуществляемая программным интерпретатором.
Компилятор - это специальная программа, которая анализирует исходный код и преобразует его в самостоятельную исполняемую программу, способную работать независимо от других программ и оборудования. При запуске программы весь код компилируется однократно, после чего создается исполняемый файл. При последующих запусках программы компиляция не требуется, что ускоряет процесс выполнения.
Проще говоря, процесс компиляции можно описать так:

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

Все языки программирования могут быть либо скомпилированными, либо интерпретируемыми. Например, C, C++ и Pascal являются компилируемыми языками, в то время как Perl и JavaScript - интерпретируемыми. Однако некоторые языки, такие как Java, могут быть как скомпилированными, так и интерпретируемыми.
Преимущества высокоуровневых языков программирования
Первое преимущество: Упрощение написания и чтения кода. Вот пример той же команды, но уже на языке программирования C++:
переменная "а" равна 97;
Второе преимущество: Для выполнения определенной задачи требуется меньше инструкций. Например, в C++ можно написать a = b * 2 + 5; всего лишь в одной строке, в то время как в ассемблере потребовалось бы 5 или 6 инструкций.
Третье преимущество: Вам не нужно беспокоиться о том, как загружать переменные в регистры процессора. Этим занимается компилятор или интерпретатор.
Плюс №4: Программирование на высокоуровневых языках более удобно адаптируется под различные архитектуры (однако имеется одно важное условие).

Важно отметить, что различные платформы, включая Microsoft Windows, обладают уникальными функциями, которые значительно упрощают процесс написания кода. Однако это может привести к ограничениям в переносимости, поскольку функции, специфичные для определенной платформы, скорее всего, не будут работать на других платформах. Эти вопросы будут подробно рассмотрены в следующих уроках.
Comments