---
# System prepended metadata

title: Fundamentals of Programming
tags: [Computer Science]

---

## <ins>Что такое программирование?</ins>

*"Программирование — процесс создания **компьютерных программ**."* \- **Wiki**

Нужно узнать что мы создаем, чтобы знать как оно устроено и уметь это создавать.

- [Программирование](https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%87%D0%B0%D0%BD%D0%B8%D1%8F) / [Computer programming](https://en.wikipedia.org/wiki/Computer_programming)

* * *

## <ins>Что такое программа и компьютерная программа?</ins>

***Программа*** — термин, в переводе означающий «предписание», то есть заданную последовательность действий. Данное понятие непосредственно связано с понятием *алгоритм*. (Здесь я затрагиваю понятие "программа" вне компьютера.)

**Компьютерная программа** \- это последовательность или набор инструкций на языке программирования, предназначенных для выполнения компьютером.

Пример программы **"Заварки чая"**, который мы используем в повседневной жизни:

1.  Возьмите чайник и налейте в него нужное количество воды.
2.  Включите плиту и поставьте чайник на нее.
3.  Дождитесь, пока вода закипит.
4.  Возьмите кружку и в нее положите чайный пакетик или чайную ложку с чаем.
5.  Если вы хотите заварить чай с молоком или сахаром, добавьте их в кружку.
6.  Когда вода закипит, выключите плиту и снимите чайник с плиты.
7.  Налейте горячую воду из чайника в кружку с чаем.
8.  Подождите несколько минут, чтобы чай заварился.
9.  Если вы используете чайный пакетик, удалите его из кружки с помощью ложки или щипцов для чая.
10. Перемешайте чай, если добавляли молоко или сахар, и подайте на стол.

Для описания какой-либо программы в повседневной жизни нам хватает родного языка, на котором мы говорим и выражаем свои мысли. Если мы захотим объяснить нашу программу иностранцу, то нам придётся изучить слова и грамматические правила родного языка этого иностранца, чтобы уметь описать ему нашу программу. Так же с компьютером. Компьютер для нас в роли иностранца, которому мы должны объяснить нашу программу.

Тот же самый пример, но уже на понятном компьютеру языке (обратите внимание, что это лишь примерный перевод программы на языке программирования):

```
function brewTea() {
    // Step 1
    takeKettle();
    fillWater(kettle, desiredAmountOfWater);
    turnOnStove();
    placeKettleOnStove(stove, kettle);
    waitForBoiling(kettle);

    // Step 2
    takeCup();
    putTea(cup, teaBagOrTeaSpoon);
    if (needMilkOrSugar) {
        addMilkOrSugar(cup);
    }

    // Step 3
    turnOffStove();
    removeKettleFromStove(stove, kettle);
    pourHotWater(kettle, cup);

    // Step 4
    waitMinutes(3);
    if (usingTeaBag) {
        removeTeaBag(cup);
    }

    // Step 5
    stirTea(cup);
    serveTea(cup);
}

brewTea();
```

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

- [Computer program](https://en.wikipedia.org/wiki/Computer_program)

Значит для создания компьютерной программы нам нужно понять что это за ***последовательность или набор инструкция на языке программирования***.

* * *

## <ins>Алгоритм</ins>

**Алгоритм** \- это совокупность точно заданных набор инструкций, которые описывают порядок действий исполнителя для решения определённой задачи.

![Image](https://www.c-programming-simple-steps.com/images/go-to-work-algorithm.png)

Пример **алгоритма**. Можно увидеть, что всё выполняется последовательно.

Как тогда реализовать алгоритм? Для этого нам нужно понять основной принцип работы программирования. Основной принцип работы программирования называется "**Алгоритмизация**".

***Алгоритмизация*** \- У нас есть задача, которую нужно решить. Сначала описываем задачу, это у нас в программировании будет **input** (входные данные). Сам процесс решения задачи назовём **алгоритм** (Процесс решения). Полученное решение задачи в идеале будет называться **output** (Выходные данные).

==**Input → Algorithm → Output**==