Основы программирования — базовые понятия

Alexsey Maslennikov
4 min readAug 26, 2021

--

Данной статьей начнем краткое разъяснения курса основ программирования в легкой и удобной форме. Рассмотрим основные понятия в упрощенном представлении, не отнимая много времени.

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

Photo by Kaleidico on Unsplash

Когда пишется программа на языке высокого уровня, то вычислительная машина рассматривается как набор компонентов, число которых и их сложность определяется текущей задачей.

Например, когда программа вычисляет некоторые значения, без использования устройств ввода-вывода (работа с файлами, работа с консолью) в программе создается представление о некотором порядке данных в оперативной памяти. Да, да, та самая история . . . ;-)

Photo by Markus Spiske on Unsplash

Причем не рассматривается, как устроена эта память, а она представляет собой вполне материальный объект.

Photo by Michael Dziedzic on Unsplash

В итоге мы получаем определенный уровень АБСТРАКЦИИ.

Это понятие будет сопровождать нас на протяжении всего процесса изучения языков программирования.

Работая с оперативной памятью с помощью команд (инструкций) языка программирования, нет необходимости представлять, как физически устроена оперативная память и как она функционирует, важно лишь то, что мы ее видим как некую модель пространства, которым мы можем управлять.

Например, если использовать язык программирования C и объявить две переменные (целого типа):

То в процессе работы программы получим следующий уровень абстракции

Представляя оперативную память, как некое облако, мы видим, что в этом пространстве выделены две области, у которых появились наименования — наши переменные.

Переменные в языках программирования по сути являются синонимами адресов в памяти или некими метками, позволяющими простым способом поместить значение в область памяти и получить значение из области памяти.

Если же мы проинициализируем наши переменные некоторыми значениями

Позднее мы узнаем, что есть два основных типа переменных — типы ссылок и типы-значений. И тип int в языке программирования C— является типом значений. И на самом деле, если вернуться к предыдущему коду, где переменные просто объявлялись, то в памяти уже были для них значения (так называемые значения по умолчанию , дли типа int — это “0”). Зачем это сейчас ? Поверьте, пригодится!

Photo by Tingey Injury Law Firm on Unsplash

Мы рассмотрели один уровень абстракции для конкретной ситуации и конкретного примера кода.

На самом деле, если разделить языки программирования по уровням абстракции, которые они привносили, то получим два уровня:

  • Абстракции вычислительных машин
  • Абстракции ассемблеров

Если рассказать о первых программах для ЭВМ кратко — это были наборы единиц и нулей, прекрасные, обожаемые всеми. И представьте, что было бы, если в программе в 1000 строк, случайно где-то в одной из строчек перепутать местами 0 или 1.

Photo by Alexander Sinn on Unsplash

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

Примерно в 1950-м году появляется язык — assembly (язык ассемблера). Как раз он и вводит абстракцию вычислительной машины, сопоставляя длинным машинным кодам короткие и понятные для программиста слова. Пример простой программы на языке ассемблера представлен ниже. Здесь мы просто выводить фразу “Hello world”.

Конечно это помогло сделать огромный шаг вперед.

Но прогресс не стоит на месте и требовался более высокий уровень абстракции для ускорения восприятия кода и упрощения процесса разработки.

В середины 50х годов ХХ-го века для решения такой проблемы разрабатываются новые языки программирования, которые реализуют абстракции ассемблера.

Появление языков, реализующих абстракции ассемблера, привело к развитию концепции “структурного императивного программирования”.

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

Примерами таких языков могут выступать Fortran, Pascal и позднее C.

Подобные языки еще называют языками высокого уровня.

Потому что уровень абстракции позволяет отделиться от конкретной архитектуры вычислительной машины, отдав процесс преобразования кода программы на языке программирования (в нашем случае на языке “C”) в машинный код специальной программе — транслятору.

Чтобы программа, написанная, на языке программирования C могла выполняться, следует выполнить ее компиляцию. Компилятор — это один из видов трансляторов, в результате работа компилятора получается исполняемый файл (как правило .exe файл, реже .dll — файл библиотек).

Исполняемый файл запускается операционной системой (в нашем случае из семейства Windows) и уже операционная система выполняет машинные команды, управляя работой вычислительной машины.

Давайте еще раз выделим основные рассмотренные элементы:

  • Язык программирования
  • Машинный код
  • Абстракции и уровни (Абстракции вычислительных машин и абстракции ассемблеров)
  • Языки структурного императивного программирования
  • Транслятор
  • Компилятор
  • Исполняемый файл

--

--