Основы программирования
Что такое программирование?
**Парадокс программиста:** Компьютер - самая тупая машина на планете. Буквально понимает только 0 и 1. Но эта «тупая» машина обыгрывает чемпионов мира в шахматы, водит автомобили и генерирует изображения, неотличимые от реальных фотографий. Как это возможно?
Ответ: **программирование**. Искусство перевода человеческих идей на язык, который понимает машина. Программист - переводчик между мирами.
Цели урока
- Понять, что такое программа и алгоритм
- Узнать, как компьютер выполняет инструкции
- Написать свой первый псевдокод
- Понять разницу между языками программирования
- Избавиться от мифа, что "программирование - это сложно"
Предварительные знания
- Базовое понимание математики (сложение, сравнение чисел)
- Умение следовать пошаговым инструкциям
GitHub - 100 миллионов репозиториев. npm - 2 миллиона пакетов. Grace Hopper в 1947 нашла первый баг - буквально жука в реле компьютера Mark II. Слово "bug" с тех пор не ушло из языка программистов. Это не магия избранных - это ремесло с 80-летней историей, и оно доступно каждому.
- **Spotify Discover Weekly**: алгоритм анализирует миллиарды прослушиваний - пользователь получает плейлист, который кажется личным подбором
- **Instagram Feed**: код ранжирует какие посты показать - алгоритм решает что увидят 2 миллиарда пользователей
- **Uber**: программа за миллисекунды находит ближайшего водителя из тысяч и рассчитывает оптимальный маршрут
- **ChatGPT**: нейросеть с 175 миллиардами параметров - всё это код, написанный программистами
- **GitHub**: 100 миллионов репозиториев - весь открытый код мира в одном месте, сделан на том же Python/JS, что изучают новички
Первый программист - женщина
За 100 лет до появления компьютеров Ада Лавлейс написала первый в истории алгоритм - программу для вычисления чисел Бернулли. Она работала с "Аналитической машиной" Чарльза Бэббиджа - механическим устройством размером с комнату, которое так и не было построено при её жизни. Ада первой поняла, что машины могут не только считать числа, но и обрабатывать любые символы - музыку, текст, изображения. Она предвидела будущее за 150 лет до его наступления.
Что такое программа?
Инопланетянин получает задание: сделать бутерброд. Он исполнит в точности то, что написано. Но абсолютно буквально - если написано «положи сыр на хлеб», а хлеб в пакете, он положит сыр на пакет.
Инструкция для "инопланетянина"
Так выглядит "программа" бутерброда
1. Открой пакет с хлебом 2. Достань один кусок хлеба 3. Положи хлеб на тарелку 4. Открой упаковку сыра 5. Достань один кусок сыра 6. Положи сыр на хлеб 7. Готово! Пропустил шаг 1? Инопланетянин будет пытаться достать хлеб через закрытый пакет. Вот так и компьютер - он делает **ровно то, что написано**, не больше и не меньше.
**Программа** - это последовательность инструкций, которые компьютер выполняет одну за другой. Каждая инструкция - простое действие: сложить числа, сравнить значения, сохранить результат.
Компьютер не понимает контекст. Он не знает, что «хлеб» - это еда, а «сыр» должен лежать сверху. Он просто выполняет команды. **Программист** - тот, кто умеет разбить сложную задачу на простые шаги и записать их на языке, понятном машине. Conway's law гласит: структура программы отражает структуру команды. Cunningham's law: лучший способ получить правильный ответ в интернете - опубликовать неправильный. Программирование пропитано такими закономерностями.
Почему важно давать компьютеру ТОЧНЫЕ инструкции?
Алгоритм - рецепт решения
Программа состоит из **алгоритмов**. Алгоритм - это как рецепт в кулинарии: пошаговая инструкция, как из исходных ингредиентов получить результат.
**Алгоритм** - конечная последовательность чётких инструкций для решения задачи. Ключевые свойства: • **Конечность** - алгоритм должен завершиться за конечное время • **Определённость** - каждый шаг должен быть понятен однозначно • **Вход** - алгоритм получает исходные данные • **Выход** - алгоритм выдаёт результат
Алгоритм: найти максимум в списке
Как найти самое большое число?
**Задача:** Дан список чисел [3, 7, 2, 9, 5]. Найти максимальное. **Алгоритм:** 1. Запомни первое число как "текущий максимум" (3) 2. Возьми следующее число (7) 3. Если оно больше текущего максимума → запомни его как новый максимум 4. Повторяй шаги 2-3, пока не кончатся числа 5. Верни текущий максимум **Трассировка:** • Шаг 1: максимум = 3 • Шаг 2-3: 7 > 3? Да → максимум = 7 • Шаг 2-3: 2 > 7? Нет → максимум = 7 • Шаг 2-3: 9 > 7? Да → максимум = 9 • Шаг 2-3: 5 > 9? Нет → максимум = 9 • Шаг 5: Ответ = **9**
Этот алгоритм работает одинаково для 5 чисел и для 5 миллиардов. Компьютер выполнит его за долю секунды. В этом и смысл алгоритмов - один раз продумал, дальше масштабируется само.
Алгоритм - это код на каком-то языке программирования
Алгоритм - это идея, последовательность шагов. Код - лишь один способ его записать
Алгоритм сортировки можно записать по-русски, нарисовать блок-схемой или реализовать на Python/C++/Rust - суть не изменится. QuickSort, придуманный Тони Хоаром в 1959, работает в stdlib любого современного языка. Алгоритм - это «что делать», код - это «как записать на конкретной машине».
Какое свойство алгоритма нарушено в инструкции: "Повторяй шаг 1 вечно"?
Переменные - память программы
В алгоритме поиска максимума мы говорили "запомни число". Но как компьютер "помнит"? Для этого есть **переменные** - именованные ячейки памяти.
Переменные - как коробки с этикетками
Простая аналогия
Представь склад с коробками. На каждой коробке - этикетка: 📦 `имя` → "Алиса" 📦 `возраст` → 25 📦 `рост` → 165.5 📦 `студент` → true Ты можешь: • **Положить** значение в коробку: `возраст = 25` • **Посмотреть** что внутри: `print(возраст)` → выведет 25 • **Изменить** содержимое: `возраст = 26` Имя коробки (переменной) не меняется, а содержимое - может!
В программировании `=` - это НЕ "равно", а "присвоить". Запись `x = x + 1` означает: "возьми текущее значение x, добавь 1 и положи результат обратно в x". Математически это бессмыслица, но в программировании - обычная операция!
Что выведет этот код? ``` x = 5 y = x x = 10 print(y) ```
Языки программирования
Компьютер понимает только **машинный код** - последовательность нулей и единиц. Писать программы в нулях и единицах - это как писать роман, используя только азбуку Морзе. Технически возможно, но мучительно.
Поэтому люди придумали **языки программирования** - способ писать код на языке, похожем на человеческий. Специальная программа (**компилятор** или **интерпретатор**) переводит его в машинный код.
Одна задача - разные языки
"Привет, мир!" на разных языках
**Python** - простой и читаемый: ```python print("Привет, мир!") ``` **JavaScript** - язык веба: ```javascript console.log("Привет, мир!"); ``` **C++** - быстрый, но многословный: ```cpp #include <iostream> int main() { std::cout << "Привет, мир!" << std::endl; return 0; } ``` **Java** - популярный в корпорациях: ```java public class Hello { public static void main(String[] args) { System.out.println("Привет, мир!"); } } ``` Все делают одно и то же - но по-разному!
| Язык | Где используется | Сложность |
|---|---|---|
| Python | ML, автоматизация, наука | Низкая |
| JavaScript | Веб-сайты, приложения | Средняя |
| C++ | Игры, системы, драйверы | Высокая |
| Swift | iOS приложения | Средняя |
| Go | Серверы, облака | Средняя |
Для начинающих рекомендуем **Python** - он читается почти как английский, прощает ошибки и позволяет быстро увидеть результат. Это "ворота" в мир программирования.
Зачем нужны разные языки программирования?
Твой первый код
Хватит теории - пора писать код. Ниже - **настоящая песочница Python**. Код можно редактировать и запускать прямо в браузере.
Код выполняется в изолированной среде (WebAssembly). Ты не сломаешь компьютер, даже если напишешь что-то странное. Экспериментируй!
Первая программа готова. Теперь задача посложнее:
Не бойся ошибок! Каждый программист видит их сотни раз в день. Ошибка - это не провал, а **подсказка**, что нужно исправить.
Что делает функция print() в Python?
Ключевые идеи
- **Программа** - это последовательность точных инструкций; компьютер выполняет их буквально, без «домысливания» контекста
- **Алгоритм** - идея решения, а не код; один алгоритм можно записать на Python, C++ или русском языке - суть не меняется
- **Переменная** - именованная ячейка памяти; `y = x` копирует значение, а не создаёт ссылку
- Языки программирования оптимизированы под задачи: Python - ML и автоматизация, C++ - игры и системы, JavaScript - веб
- Первый программист в истории - Ада Лавлейс (1843), первый баг - мотылёк в реле компьютера Mark II (Grace Hopper, 1947)
- Не нужно знать все языки - важно понять принципы: алгоритм, переменные, управляющие конструкции
Где этот урок в курсе
Программирование - стопка простых идей. Этот урок - фундамент. Следующие четыре переводят его в практику:
- Среда разработки — Установить Python, выбрать редактор, запустить первый файл с диска
- Переменные и типы — Как значения живут в памяти: int, float, str, bool и оператор присваивания
- Операторы — Арифметика, сравнения и логика превращают переменные в вычисления
- Строки — Текст как полноценный тип данных: конкатенация, срезы, форматирование
Вопросы для размышления
- Вспомни любой повседневный процесс, который ты выполняешь регулярно - приготовление кофе, утренний ритуал, дорога на работу. Попробуй записать его как алгоритм: что будет входными данными, какие шаги, где условия и циклы, что будет результатом?
Связанные уроки
- alg-01-big-o — После освоения понятия алгоритма логично узнать, как измерять их эффективность
- ds-01-arrays — Переменные - атомы хранения; структуры данных - молекулы
- prog-02-setup — Следующий урок: настройка среды разработки
- ar-01-natural — Математические вычисления - прямая аналогия алгоритмической последовательности шагов
- arch-04-cpu