> For the complete documentation index, see [llms.txt](https://letas-organization.gitbook.io/letaats-lessons-online/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://letas-organization.gitbook.io/letaats-lessons-online/kolledzh-top/razdel-1/glava-1.-chto-takoe-programmirovanie.md).

# Глава 1. Что такое программирование

### 1.1. Зачем люди придумали программирование

Каждый день человек выполняет множество действий по определённому порядку. Например, чтобы приготовить чай, нужно:

1. Взять чайник.
2. Налить воду.
3. Включить чайник.
4. Дождаться кипения.
5. Положить чай в кружку.
6. Залить кипятком.
7. Подождать.
8. Выпить чай.

Если поменять порядок действий, результат будет странным. Например:

1. Выпить чай.
2. Включить чайник.
3. Налить воду.

Так не работает. Даже человек с утра после трёх часов сна это понимает, хотя и с трудом.

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

Компьютер не понимает:

* намёки;
* приблизительные формулировки;
* настроение программиста;
* “ну ты понял”;
* “сделай красиво”.

Компьютер выполняет только конкретные инструкции.

Программирование — это процесс составления таких инструкций.

***

### 1.2. Что такое программа

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

Пример задачи:

> Пользователь вводит число. Программа увеличивает его на 1 и выводит результат.

Сначала можно описать это обычным языком:

```
1. Попросить пользователя ввести число.
2. Считать число.
3. Увеличить число на 1.
4. Вывести результат.
```

На Java это может выглядеть так:

```java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Введите число: ");
        int number = scanner.nextInt();

        number = number + 1;

        System.out.println("Результат: " + number);
    }
}
```

Пока не нужно понимать каждую строку полностью. Важно увидеть главное: программа — это последовательность действий.

***

### 1.3. Что такое алгоритм

Алгоритм — это точное описание шагов, которые нужно выполнить для получения результата.

Алгоритм есть не только в программировании. Например:

* рецепт блюда;
* инструкция по сборке мебели;
* маршрут от дома до колледжа;
* порядок действий при оплате покупки;
* правила прохождения игры.

Пример алгоритма поиска большего числа из двух:

```
1. Взять первое число.
2. Взять второе число.
3. Сравнить их.
4. Если первое больше, вывести первое.
5. Иначе вывести второе.
```

На Java:

```java
int a = 10;
int b = 7;

if (a > b) {
    System.out.println(a);
} else {
    System.out.println(b);
}
```

***

### 1.4. Свойства хорошего алгоритма

#### Понятность

Каждый шаг должен быть однозначным.

Плохой шаг:

```
Сделать нормально.
```

Компьютер не знает, что такое “нормально”.

Хороший шаг:

```
Если число больше 0, вывести сообщение "Положительное".
```

#### Конечность

Алгоритм должен завершаться.

Плохой алгоритм:

```
Повторять действие всегда.
```

Если нет условия остановки, программа может работать бесконечно.

Пример бесконечного цикла:

```java
while (true) {
    System.out.println("Я никогда не остановлюсь");
}
```

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

```java
while (true) {
    System.out.println("1 — продолжить");
    System.out.println("2 — выйти");

    int command = scanner.nextInt();

    if (command == 2) {
        break;
    }
}
```

#### Результативность

После выполнения алгоритма должен появиться результат.

Если задача — найти максимум, результатом должно быть максимальное число.

Если задача — проверить пароль, результатом должно быть решение: подходит пароль или нет.

***

### 1.5. Почему компьютер не думает

Новички часто ожидают, что компьютер “сам поймёт”.

Например:

```java
int age;
System.out.println(age);
```

Человек может подумать:

> Ну если возраст не указан, пусть будет 0.

Java так не думает. Локальная переменная должна получить значение перед использованием. Иначе будет ошибка компиляции.

Компьютер не догадывается. Он не продолжает мысль за программиста. В программировании нужно явно указывать:

* какие данные есть;
* что с ними делать;
* в каком порядке выполнять команды;
* что делать при ошибках.

Это одна из самых важных идей для начинающего программиста.

***

### 1.6. Языки программирования

Компьютер физически работает с машинным кодом: набором низкоуровневых инструкций. Человеку писать такие инструкции неудобно.

Поэтому появились языки программирования.

Примеры языков:

* Java;
* Python;
* JavaScript;
* C#;
* Kotlin;
* C++;
* Go.

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

Например, вместо низкоуровневых инструкций можно написать:

```java
System.out.println("Hello");
```

Это уже ближе к человеческому пониманию.

***

### 1.7. Компилируемые и интерпретируемые языки

Существуют разные способы выполнения программ.

#### Интерпретируемые языки

В интерпретируемых языках программа обычно выполняется построчно специальной программой-интерпретатором.

Пример: Python.

Упрощённо:

```
код → интерпретатор → выполнение
```

#### Компилируемые языки

В компилируемых языках код сначала переводится в другой формат, а потом выполняется.

Пример: C++.

Упрощённо:

```
код → компилятор → исполняемый файл → выполнение
```

#### Java

Java занимает промежуточное положение.

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

```
.java → .class → JVM → выполнение
```

Это важная особенность Java.

***

### 1.8. Почему появилась Java

У разработчиков долго существовала проблема: программа могла работать на одном компьютере и не работать на другом.

Разные операционные системы, процессоры и настройки создавали сложности.

Одна из идей Java:

```
Write Once, Run Anywhere
```

То есть:

```
Написал один раз — запускай где угодно.
```

Полностью магии, конечно, не бывает. В разработке вообще магии нет, только сложность, которую кто-то спрятал под красивым названием. Но Java действительно сделала переносимость программ гораздо удобнее благодаря JVM.

***

### 1.9. Где используется Java

Java используется в разных сферах.

#### Корпоративные системы

Большие компании часто используют Java для внутренних систем: банков, страхования, логистики, складов.

#### Серверная разработка

Когда пользователь нажимает кнопку в приложении или на сайте, запрос часто уходит на сервер. На сервере может работать Java-код.

#### Android-разработка

Android-приложения можно писать на Java. Даже если в современных проектах часто используют Kotlin, понимание Java помогает разобраться в Android API и старом коде.

#### Учебные проекты

Java хорошо подходит для изучения строгой структуры программирования: классы, типы, методы, объекты, коллекции.

***

### 1.10. Как программирование связано с мобильной разработкой

Мобильное приложение — это не просто красивый экран. За экраном всегда есть логика.

Например, приложение “Калькулятор”:

* пользователь вводит число;
* нажимает кнопку;
* программа считывает ввод;
* выполняет вычисление;
* показывает результат.

То есть Android-приложение использует те же базовые идеи:

* переменные;
* условия;
* методы;
* классы;
* объекты;
* обработку событий.

Поэтому перед Android важно понимать Java Core.

***

### 1.11. Что нужно запомнить из главы

Программа — это набор команд.

Алгоритм — точное описание действий для решения задачи.

Компьютер не понимает намёков и не догадывается.

Java — язык программирования, который компилируется в байт-код и выполняется через JVM.

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

***

### 1.12. Типичные ошибки новичков

#### Ошибка 1. Думать, что компьютер сам догадается

Плохо:

```
Пусть программа поймёт, что я имел в виду.
```

Правильно:

```
Я должен явно описать все действия.
```

#### Ошибка 2. Учить команды без понимания

Можно выучить:

```java
for (int i = 0; i < 10; i++)
```

Но если не понимать, что такое счётчик, условие и повторение, код будет просто набором символов.

#### Ошибка 3. Сразу пытаться писать большое приложение

Новичку лучше идти так:

```
маленькая задача → понятная логика → проверка → усложнение
```

А не так:

```
сразу пишу маркетплейс, социальную сеть и личный кабинет
```

Так обычно рождаются проекты, которые “почти работают”, то есть не работают.

***

### 1.13. Как могут спросить на экзамене

#### Вопрос

Что такое программа?

#### Плохой ответ

> Это код.

#### Хороший ответ

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

#### Вопрос

Что такое алгоритм?

#### Хороший ответ

> Алгоритм — это точная последовательность действий, которая приводит к определённому результату. Например, алгоритм поиска максимального числа сравнивает элементы и запоминает наибольшее значение.

#### Вопрос

Почему компьютер не может “сам понять”, что хотел программист?

#### Хороший ответ

> Компьютер выполняет только те инструкции, которые явно написаны в программе. Он не понимает контекст и не исправляет мысли программиста, поэтому команды должны быть точными.

***

### 1.14. Практические задания

#### Задание 1. Алгоритм без кода

Опишите алгоритм приготовления бутерброда максимально подробно.

Не пишите:

```
Сделать бутерброд.
```

Пишите конкретно:

```
1. Взять хлеб.
2. Взять сыр.
3. Положить сыр на хлеб.
...
```

#### Задание 2. Алгоритм входа в аккаунт

Опишите алгоритм входа в личный кабинет:

* ввод логина;
* ввод пароля;
* проверка;
* сообщение об ошибке;
* успешный вход.

#### Задание 3. Алгоритм поиска максимума

Опишите словами алгоритм поиска максимального числа среди трёх чисел.

#### Задание 4. Алгоритм для мобильного приложения

Опишите алгоритм работы приложения “Проверка возраста”:

* пользователь вводит возраст;
* нажимает кнопку;
* приложение проверяет возраст;
* выводит результат.

***

### 1.15. Вопросы для самопроверки

1. Что такое программа?
2. Что такое алгоритм?
3. Почему компьютер не понимает намёки?
4. Что значит “последовательность команд”?
5. Какие свойства есть у хорошего алгоритма?
6. Чем язык программирования отличается от машинного кода?
7. Почему Java называют переносимым языком?
8. Где используется Java?
9. Как программирование связано с Android-разработкой?
10. Почему нельзя сразу начинать с большого приложения?
