Python-разработчик к 2026: план обучения от основ до трудоустройства

Курс помогает освоить Python с нуля до уровня, достаточного для работы разработчиком в 2026 году. Вы изучите основы языка, инструменты разработки, работу с данными и веб-разработку, а также подготовите портфолио и пройдёте этапы подготовки к собеседованиям.

1. Введение в Python и настройка окружения разработчика

Введение в Python и настройка окружения разработчика

Зачем начинать с окружения

Окружение разработчика — это набор инструментов, который позволяет стабильно запускать код, устанавливать зависимости и повторять результаты на любом компьютере. В этом курсе мы будем строить привычку работать так, как работают в индустрии: отдельный проект, отдельные зависимости, воспроизводимость.

К концу статьи у вас будет:

  • установленный Python
  • редактор кода
  • проект с виртуальным окружением
  • понимание, как запускать скрипты и ставить библиотеки
  • Что такое Python

    Python — язык программирования общего назначения. Он популярен в:

  • веб-разработке (бекенд)
  • автоматизации и скриптах
  • анализе данных и машинном обучении
  • тестировании
  • DevOps и инструментах для инфраструктуры
  • Python ценят за читаемость, огромную экосистему библиотек и скорость разработки.

    Версии Python: что ставить в 2026

    Рекомендуемая стратегия для обучения и первых проектов:

  • используйте последнюю стабильную версию Python 3
  • не используйте Python 2 (он давно не поддерживается)
  • Официальные релизы и загрузки:

  • Python Downloads
  • Установка Python

    Windows

    Рекомендуемый способ — установщик с официального сайта:

  • Скачайте установщик с Python Downloads
  • Запустите установку
  • Важно: поставьте галочку Add Python to PATH (чтобы команда python работала в терминале)
  • macOS

    Обычно удобнее ставить Python через пакетный менеджер, но для старта достаточно официального установщика:

  • Python Downloads
  • Linux

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

    Официальная документация по установке:

  • Python Setup and Usage
  • Проверка установки

    Откройте терминал (PowerShell/Terminal) и выполните команды.

    Таблица ниже показывает самые частые варианты:

    | Что проверить | Команда | Что должно получиться | |---|---|---| | Версия Python | python --version | Например, Python 3.12.x | | Если python не найден (часто на macOS/Linux) | python3 --version | Например, Python 3.12.x | | Менеджер пакетов | pip --version | Версия pip и путь установки |

    Если pip не работает, попробуйте:

    Выбор редактора: VS Code или PyCharm

    Вам нужен редактор с подсветкой синтаксиса, автодополнением и встроенным терминалом.

  • VS Code (легкий, гибкий, де-факто стандарт во многих командах): Visual Studio Code
  • PyCharm (мощная IDE, особенно удобна для чисто Python-проектов): PyCharm
  • Для старта подойдет любой вариант. Важно не IDE, а то, что вы умеете:

  • открывать папку проекта
  • запускать файл
  • видеть ошибки и читать трассировку
  • работать с виртуальным окружением
  • Терминал: ваш главный инструмент

    Терминал нужен для:

  • запуска программ
  • установки библиотек
  • работы с виртуальными окружениями
  • запуска тестов и линтеров
  • Если терминал пугает — это нормально. Привычка формируется быстро, если использовать его каждый день хотя бы на 5–10 минут.

    !Схема показывает, как связаны проект, виртуальное окружение, терминал и редактор кода

    Первый проект: создаем папку и файл

    Создайте папку проекта, например python-start.

    Внутри создайте файл main.py:

    Запуск из терминала (находясь в папке проекта):

    Если у вас работает python3 вместо python, используйте:

    Интерактивный режим Python (REPL)

    Python можно запускать в интерактивном режиме: вы вводите команды, и Python выполняет их сразу. Это удобно для экспериментов.

    Запуск:

    Пример:

    Выход:

  • Windows: Ctrl+Z, затем Enter
  • macOS/Linux: Ctrl+D
  • Виртуальное окружение: зачем оно нужно

    Виртуальное окружение — это изолированное пространство для библиотек конкретного проекта.

    Почему это важно:

  • разные проекты могут требовать разные версии библиотек
  • вы избегаете «загрязнения» системы пакетами
  • проще повторять установку на другом компьютере и на сервере
  • Python включает модуль venv для создания виртуальных окружений:

  • venv — Creation of virtual environments
  • Создание виртуального окружения

    В папке проекта выполните:

    Активация виртуального окружения

    Windows (PowerShell):

    Windows (cmd):

    macOS/Linux:

    После активации в терминале обычно появляется префикс вида (.venv).

    Деактивация

    Установка библиотек: pip

    pip — стандартный инструмент для установки пакетов из Python Package Index.

  • pip documentation
  • Пример установки пакета:

    Проверка, что пакет установился:

    Фиксация зависимостей

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

    Сгенерировать список установленных пакетов:

    Установить зависимости из файла:

    Базовая структура проекта для обучения

    Для первых шагов подойдет минимальная структура:

  • python-start/
  • main.py
  • requirements.txt (когда появятся зависимости)
  • .venv/ (виртуальное окружение, обычно не добавляют в репозиторий)
  • Позже, когда начнем писать более крупные программы, структура станет более «пакетной», появятся тесты и инструменты качества кода.

    PEP 8: первый стандарт оформления

    PEP 8 — руководство по стилю кода на Python. На старте важно хотя бы знать, что стандарт существует: он помогает писать читаемо и одинаково в команде.

  • PEP 8 — Style Guide for Python Code
  • На практике стиль обычно контролируется инструментами (линтерами и форматтерами), к ним мы придем в следующих статьях.

    Типовые проблемы и быстрые решения

  • Команда python не находится
  • - Переустановите Python и включите Add Python to PATH (Windows) - Попробуйте python3 (часто на macOS/Linux)
  • pip ставит пакеты «не туда»
  • - Убедитесь, что виртуальное окружение активировано - Используйте python -m pip ..., чтобы pip точно соответствовал текущему Python
  • Редактор не видит виртуальное окружение
  • - Выберите интерпретатор проекта в настройках IDE (обычно можно выбрать .venv)

    Что дальше по курсу

    Дальше мы будем писать базовые программы и разбирать фундамент:

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

    2. Основы языка: типы данных, условия, циклы, функции

    Основы языка: типы данных, условия, циклы, функции

    Как эта тема связана с предыдущей

    В прошлой статье вы настроили Python, редактор и виртуальное окружение. Теперь пора научиться писать программы, которые:

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

    Переменные и выражения

    Переменная — это имя, которое ссылается на значение. В Python переменные создаются присваиванием.

    Выражение — это то, что вычисляется в значение.

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

    Базовые типы данных

    Тип данных определяет, какие значения возможны и какие операции над ними допустимы.

    Числа: int и float

  • int — целые числа: -2, 0, 42
  • float — числа с дробной частью: 3.14, -0.5
  • Строки: str

    Строка — текст.

    Частая операция — форматирование строк через f"...":

    Логический тип: bool

    bool бывает только двух значений: True и False.

    None

    None означает “значение отсутствует”. Часто используется как “пока неизвестно” или “не найдено”.

    Коллекции: list, tuple, dict, set

    Коллекции хранят несколько значений.

  • list — список (изменяемый): [1, 2, 3]
  • tuple — кортеж (обычно не изменяют): (1, 2, 3)
  • dict — словарь “ключ → значение”: { "name": "Аня", "age": 20 }
  • set — множество уникальных значений: {1, 2, 3}
  • Примеры:

    Официальная справка по встроенным типам: Built-in Types.

    Приведение типов и ввод пользователя

    Иногда нужно преобразовать тип.

    Ввод с клавиатуры возвращает строку, поэтому числа обычно приводят явно:

    Если пользователь введет не число, будет ошибка. Позже в курсе вы научитесь обрабатывать такие ситуации через исключения.

    Операторы сравнения и логика

    Операторы сравнения возвращают bool.

  • == равно
  • != не равно
  • > больше
  • < меньше
  • >= больше или равно
  • <= меньше или равно
  • Логические операторы:

  • and — “и”
  • or — “или”
  • not — “не”
  • Условия: if, elif, else

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

    Важные правила:

  • блоки кода в Python определяются отступами (обычно 4 пробела)
  • после условия ставится двоеточие :
  • Официальная документация: if Statements.

    !Блок-схема показывает, как выбирается одна из веток в конструкции if/elif/else

    Циклы: for и while

    Циклы нужны, чтобы повторять действия.

    Цикл for

    Чаще всего for используют для прохода по коллекции.

    Частый инструмент — range для последовательности чисел:

    Цикл while

    while повторяется, пока условие истинно.

    break и continue

  • break — досрочно завершает цикл
  • continue — пропускает текущую итерацию и переходит к следующей
  • Официальная документация: for Statements и while Statements.

    Функции: как не писать “простыню” кода

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

  • переиспользовать логику
  • делить программу на понятные части
  • проще тестировать код
  • Определение и вызов

    Термины, которые важно различать:

  • параметр — имя в определении функции (например, name)
  • аргумент — конкретное значение при вызове (например, "Аня")
  • return

    return возвращает результат и завершает функцию.

    Если в функции нет return, она возвращает None.

    Значения по умолчанию

    Область видимости (простыми словами)

    Переменные, созданные внутри функции, обычно не видны снаружи.

    Официальная документация: Defining Functions.

    !Схема помогает понять разницу между переменными внутри функции и снаружи

    Мини-практика: собрать все вместе

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

    Здесь вы потренировали:

  • типы int и str
  • ввод через input и приведение через int
  • цикл for и range
  • условие if
  • функцию с return
  • Типичные ошибки новичка и как их читать

    Ошибка отступов

    Если видите IndentationError, значит нарушены отступы. Проверьте, что в блоке if/for/def одинаковые отступы и вы не смешали табы и пробелы.

    Ошибка имени

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

    Ошибка типа

    TypeError часто возникает, когда пытаются сложить строку и число:

    Правильно:

    Что дальше по курсу

    Следующий шаг — научиться работать с данными “вне программы”: читать и записывать файлы, разбирать текст, аккуратно организовывать проект. На этом фундаменте вы сможете уверенно переходить к более практичным задачам: автоматизация, парсинг, веб-бэкенд и тестирование.

    3. Структуры данных и алгоритмическое мышление

    Структуры данных и алгоритмическое мышление

    Связь с предыдущими темами

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

    В Python часто можно решить одну и ту же задачу разными структурами данных. Алгоритмическое мышление — это привычка задавать себе вопросы:

  • какие данные у меня есть и в каком виде они приходят
  • какие операции я делаю чаще всего (поиск, добавление, удаление, подсчет)
  • как сделать решение читаемым и масштабируемым
  • Что такое структура данных

    Структура данных — это способ организовать значения так, чтобы выполнять нужные операции удобно и быстро.

    В базовом Python у вас уже есть главные структуры:

  • list (список)
  • tuple (кортеж)
  • dict (словарь)
  • set (множество)
  • Официальная справка по основным типам: Встроенные типы Python

    !Схема помогает быстро запомнить отличия list, tuple, dict и set

    Быстрота операций: полезная интуиция

    Часто важна не только корректность, но и то, как растет время выполнения, когда данных становится больше.

    В программировании используют обозначение , чтобы описывать рост времени:

  • означает, что операция занимает примерно одинаковое время независимо от размера данных
  • означает, что время растет примерно пропорционально количеству элементов
  • Здесь:

  • читают как порядок роста
  • — количество элементов в структуре данных
  • Вам не нужно “считать” строго. Важно уметь видеть разницу между “ищем перебором” и “ищем через быстрый доступ по ключу”.

    Список list: когда важен порядок и индексы

    Список — упорядоченная изменяемая коллекция.

    Ключевые операции

  • доступ по индексу items[i] обычно быстрый
  • добавление в конец append обычно быстро
  • проверка наличия x in items обычно идет перебором
  • Пример: находим максимум вручную (алгоритм “один проход”):

    Частая ошибка: изменение списка во время обхода

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

    Надежные варианты:

  • строить новый список
  • проходить по копии
  • Пример через построение нового списка:

    Списковые включения

    Это компактный способ построить новый список.

    Подробнее по структурам данных в учебном разделе: Структуры данных в руководстве Python

    Кортеж tuple: когда нужна неизменяемость

    Кортеж похож на список, но его обычно не меняют. Это удобно для:

  • фиксированных наборов значений
  • возврата нескольких значений из функции
  • хранения ключей в dict, если ключ должен быть “составным”
  • Пример: функция возвращает пару значений:

    Почему это важно: если объект неизменяемый, его безопаснее использовать как ключ.

    Словарь dict: быстрый доступ по ключу

    Словарь хранит пары ключ → значение. Главная идея: вы находите значение не перебором, а по ключу.

    Когда выбирать dict

  • нужен быстрый поиск “по идентификатору”
  • нужно сопоставление “имя → объект”, “код → описание”, “слово → количество”
  • Доступ: [] и get

  • data[key] удобно, но если ключа нет — будет KeyError
  • data.get(key) возвращает None (или значение по умолчанию), не падая с ошибкой
  • Официальная справка: Тип dict

    Базовый алгоритм подсчета частоты

    Задача: посчитать, сколько раз встречается каждое слово.

    Это базовый шаблон, который потом встретится в логах, парсинге, аналитике, вебе.

    Множество set: уникальность и быстрые проверки

    set хранит уникальные элементы и отлично подходит для:

  • удаления дублей
  • проверки “входит ли элемент в множество”
  • операций над наборами
  • Официальная справка: Тип set

    Операции над множествами

    Как выбирать структуру данных

    Ниже практичная “шпаргалка” выбора.

    | Задача | Обычно подходит | Почему | |---|---|---| | хранить значения в порядке добавления | list | порядок и индексы | | хранить фиксированный набор значений | tuple | неизменяемость и ясный смысл | | сопоставлять ключи и значения | dict | быстрый доступ по ключу | | убрать дубли и быстро проверять принадлежность | set | уникальность и быстрые проверки |

    Алгоритмические шаблоны, которые стоит запомнить

    Алгоритм — это “рецепт” решения. В Python особенно важно уметь выражать рецепты через циклы и функции.

    Шаблон накопления

    Сумма, произведение, склейка строк, сбор результатов.

    Шаблон поиска лучшего

    Минимум, максимум, “самый частый”, “самый длинный”.

    Шаблон “таблица быстрых ответов”

    Если нужно много раз отвечать на вопрос “есть ли такой элемент?”, выгодно заранее построить set.

    Сортировка как отдельный шаг

    Частая стратегия: сначала собрать данные, затем отсортировать.

    Документация: Функция sorted

    Важно: сортировка меняет взгляд на задачу. Иногда проще отсортировать один раз, чем много раз искать “лучшее” в несортированных данных.

    Как это связано с будущими темами курса

    Дальше вы будете читать файлы, обрабатывать текст, собирать данные из внешних источников и строить небольшие проекты. Почти везде вам понадобятся:

  • list для последовательной обработки и накопления результатов
  • dict для индексов, конфигураций, подсчетов и “быстрых ответов”
  • set для уникальности и фильтрации
  • простые алгоритмы “один проход”, подсчет, поиск, сортировка
  • Чем раньше вы начнете осознанно выбирать структуру данных, тем быстрее перейдете от “код работает” к уровню “код работает, читается и масштабируется”.

    4. ООП, модули, пакеты и управление зависимостями

    ООП, модули, пакеты и управление зависимостями

    Как эта тема продолжает курс

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

    К концу статьи вы будете понимать:

  • что такое объект и класс и зачем они нужны
  • как разносить код по модулям и пакетам
  • как работает import и точка входа программы
  • как в проектах управляют зависимостями через виртуальные окружения и файлы зависимостей
  • ООП в Python: зачем и когда

    Объектно-ориентированное программирование помогает описывать программу через сущности предметной области: пользователь, заказ, задача, корзина. Это особенно полезно, когда проект растет и функций становится слишком много.

    В Python ООП обычно применяют для:

  • моделирования данных и поведения вместе
  • создания удобных API внутри проекта
  • изоляции ответственности между частями кода
  • Важно: ООП не обязательно использовать всегда. Иногда проще и чище решить задачу функциями и словарями. Цель — уметь выбрать подход.

    Официальный учебный раздел: Классы в руководстве Python.

    Класс и объект: базовые термины

  • Класс — это шаблон для создания объектов.
  • Объект — это экземпляр класса.
  • Атрибут — данные объекта.
  • Метод — функция, привязанная к объекту.
  • Пример: сущность задачи

    Что здесь происходит:

  • class Task: объявляет класс
  • __init__ — специальный метод, который вызывается при создании объекта
  • self — ссылка на конкретный объект, с которым сейчас работаем
  • Инкапсуляция простыми словами

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

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

    Соглашение:

  • атрибут с именем вида _value считается внутренним и его не трогают снаружи без причины
  • Наследование и композиция

    Наследование

    Наследование — когда один класс расширяет другой.

    Наследование полезно, но новичкам легко начать использовать его там, где оно не нужно.

    Композиция

    Композиция — когда объект содержит другие объекты. Во многих прикладных проектах это проще и гибче.

    Пример: TodoService использует хранилище.

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

    !Диаграмма показывает разницу между сущностью данных (Task) и сервисом, который использует хранилище

    Модули: как разносить код по файлам

    Модуль в Python — это обычный файл .py. Разносить код по модулям нужно, чтобы:

  • уменьшать размер файлов
  • разделять ответственность
  • переиспользовать код через import
  • Официальный учебный раздел: Модули в руководстве Python.

    Пример структуры на модулях

    tasks.py:

    main.py:

    Как работает import на практике

    Полезные правила для старта:

  • Python ищет модуль сначала в текущей папке проекта, затем в установленных пакетах
  • имя файла и имя модуля совпадают
  • старайтесь не называть свои файлы как стандартные модули, например json.py или random.py
  • Пакеты: структура папок для больших проектов

    Пакет — это папка с Python-кодом, из которой можно импортировать модули как единое целое.

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

    Официальный раздел: Пакеты в руководстве Python.

    Пример структуры пакета

    app/models.py:

    app/storage.py:

    main.py:

    Точка входа и __name__ == "__main__"

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

    Смысл:

  • при запуске python main.py Python ставит __name__ в значение "__main__"
  • при импорте import main код внутри if __name__ == "__main__" не выполняется
  • Это одна из базовых привычек, которая делает модули безопасными для импорта.

    Управление зависимостями: что считается зависимостью

    Зависимость — это внешняя библиотека, без которой ваш проект не работает, например requests.

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

    Виртуальное окружение

    Виртуальное окружение изолирует зависимости проекта.

  • документация: venv
  • Команды:

    Активация:

  • Windows PowerShell: \.venv\Scripts\Activate.ps1
  • macOS и Linux: source .venv/bin/activate
  • Установка пакетов через pip

    Официальная документация: pip.

    Проверить установку:

    Как фиксировать зависимости

    requirements.txt

    Самый распространенный базовый формат фиксации зависимостей в учебных и многих рабочих проектах.

    Пример файла requirements.txt:

    Установка:

    Почему часто фиксируют версию через ==:

  • чтобы воспроизводимо получить те же версии
  • чтобы неожиданное обновление не сломало проект
  • Важно: слепо делать pip freeze > requirements.txt в учебных проектах удобно, но в реальных проектах это может зафиксировать лишние транзитивные зависимости. Обычно команда договаривается о подходе: что фиксируем явно, а что фиксирует инструмент.

    Когда появляется pyproject.toml

    По мере роста проектов вы встретите формат pyproject.toml.

    Он используется, чтобы:

  • описывать сборку и метаданные проекта
  • настраивать инструменты разработки
  • управлять зависимостями в более современном стиле
  • Учебный источник по упаковке проектов: Packaging Python Projects.

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

    Рекомендованная структура учебного проекта после этой темы

    Один из удобных вариантов для небольших приложений:

    Роли файлов:

  • models.py — классы данных
  • services.py — бизнес-логика
  • storage.py — доступ к данным
  • main.py — точка входа
  • Частые ошибки и как их диагностировать

  • Ошибка ModuleNotFoundError
  • Причины обычно такие: модуль не установлен, не активировано окружение, неправильный путь импорта
  • Решения: проверьте активность .venv, проверьте имя пакета, запустите python -m pip install ...
  • Ошибка циклических импортов
  • Причина: два модуля импортируют друг друга
  • Решения: вынести общие типы в отдельный модуль, перенести импорт внутрь функции, пересобрать архитектуру
  • Файл назван как стандартный модуль
  • Пример: random.py ломает import random
  • Решение: переименовать файл и удалить созданный __pycache__
  • Что дальше по курсу

    Дальше вам будет проще переходить к практическим проектам: обработке файлов, работе с сетью и веб-разработке. Вы уже умеете:

  • описывать сущности через классы
  • разделять код на модули и пакеты
  • делать безопасную точку входа
  • управлять библиотеками через виртуальное окружение и файл зависимостей
  • 5. Тестирование, Git, отладка и качество кода

    Тестирование, Git, отладка и качество кода

    Зачем эта тема нужна именно сейчас

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

  • проверяемым (тесты)
  • воспроизводимым в команде (Git)
  • понятным при ошибках (отладка)
  • стабильным и единообразным (качество кода)
  • Эти навыки напрямую влияют на трудоустройство: почти в любой вакансии Python-разработчика встречаются Git, тестирование и требования к качеству кода.

    !Общий цикл разработки: изменения → проверки качества → коммиты → автоматическая проверка в CI

    Git: основа командной работы

    Git — система контроля версий. Она хранит историю изменений и позволяет безопасно работать в команде: откатываться, сравнивать версии, делать ветки и объединять изменения.

    Официальный сайт и документация:

  • Git
  • Документация Git
  • Репозиторий, коммит, ветка простыми словами

  • Репозиторий — папка проекта с историей изменений.
  • Коммит — сохраненный “снимок” изменений с сообщением.
  • Ветка — отдельная линия разработки, чтобы не ломать основную.
  • Минимальный набор команд для старта

  • Создать репозиторий в папке проекта:
  • Посмотреть состояние:
  • Добавить изменения в индекс (подготовить к коммиту):
  • Создать коммит:
  • Посмотреть историю:
  • Сообщения коммитов: как писать полезно

    Хорошее сообщение коммита отвечает на вопрос: что изменилось и зачем.

  • Плохо: fix, updates, work
  • Хорошо: Исправил расчет скидки для пустой корзины, Добавил валидацию email при регистрации
  • .gitignore: что не нужно коммитить

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

    Обычно игнорируют:

  • .venv/
  • __pycache__/
  • .pytest_cache/
  • .idea/ или .vscode/ (в зависимости от команды)
  • .env (секреты и переменные окружения)
  • Официальная справка по игнорированию файлов:

  • gitignore Documentation
  • Тестирование: как убедиться, что код работает и не ломается

    Тест — это код, который проверяет другой код. Главная цель тестов: быстро находить ошибки и защищать от “сломалось после изменений”.

    Чаще всего в Python встречаются:

  • юнит-тесты: проверяют маленькую часть логики (обычно функцию или метод)
  • интеграционные тесты: проверяют связку компонентов (например, сервис + база)
  • Что такое pytest и почему его любят

    pytest — популярный фреймворк для тестирования в Python: тесты пишутся компактно, а вывод ошибок обычно понятный.

  • pytest Documentation
  • Установка в виртуальном окружении:

    Запуск тестов:

    Структура проекта с тестами

    Один из удобных минимальных вариантов:

    Пример: тестируем функцию

    app/services.py:

    tests/test_services.py:

    Что важно заметить:

  • assert — простая проверка ожидания
  • pytest.raises(...) проверяет, что действительно выбрасывается нужная ошибка
  • Паттерн Arrange-Act-Assert

    Чтобы тесты было легче читать, часто мысленно делят на три части:

  • Arrange: подготовить данные
  • Act: выполнить действие
  • Assert: проверить результат
  • Даже если вы не пишете эти слова в коде, полезно держать структуру в голове.

    unittest: встроенный вариант

    В Python есть стандартный модуль тестирования unittest. Его часто можно встретить в старых проектах или в компаниях, где любят стандартную библиотеку.

  • unittest — Unit testing framework
  • Отладка: как быстро находить причину ошибки

    Отладка — это процесс, когда вы не просто “чините наугад”, а выясняете почему код ведет себя неправильно.

    Трассировка и чтение ошибок

    Когда Python падает, он показывает traceback: цепочку вызовов, где произошла ошибка.

    Полезные привычки:

  • читать последнюю строку: там тип ошибки (TypeError, ValueError) и сообщение
  • смотреть на строку вашего кода, где ошибка возникла
  • подниматься вверх по стеку, если причина не в этой строке
  • pdb: встроенный отладчик

    pdb позволяет остановить программу и пошагово смотреть значения переменных.

  • pdb — The Python Debugger
  • Пример: поставить “точку останова”:

    Полезные команды внутри pdb:

  • n выполнить следующую строку
  • s зайти внутрь вызова функции
  • p variable вывести значение
  • c продолжить выполнение
  • q выйти
  • Логирование вместо print

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

  • logging — Logging facility for Python
  • Минимальный пример:

    Качество кода: форматирование, линтинг, типы

    “Качество кода” в практике — это набор правил и инструментов, которые помогают:

  • быстрее читать чужой код
  • снижать количество ошибок
  • держать проект единообразным
  • Форматтер: Black

    Форматтер автоматически приводит код к единому стилю. Это снимает споры “как красиво”, потому что формат делает инструмент.

  • Black
  • Установка:

    Запуск:

    Линтер: Ruff

    Линтер находит подозрительные места: неиспользуемые импорты, потенциальные ошибки, нарушение правил стиля.

  • Ruff
  • Установка и запуск:

    Типы и mypy

    Аннотации типов в Python помогают сделать код понятнее и позволяют инструментам находить ошибки до запуска.

    Пример аннотаций:

    mypy — популярный статический анализатор типов.

  • mypy
  • Важно понимать ограничение: типизация в Python не заставляет интерпретатор “строже исполнять код”, она работает как проверка на этапе разработки.

    pre-commit: автоматические проверки перед коммитом

    pre-commit — инструмент, который запускает проверки (например, форматирование и линтинг) автоматически перед git commit.

  • pre-commit
  • Это сильно экономит время команды: меньше “мусорных” коммитов, меньше замечаний на ревью.

    Минимальный “индустриальный” набор для учебного проекта

    Если вы хотите быстро приблизить учебный проект к реальности, используйте такой минимум:

  • Git-репозиторий и понятные коммиты
  • pytest для тестов
  • black для форматирования
  • ruff для линтинга
  • логирование через logging вместо постоянных print
  • CI: автоматическая проверка на сервере

    CI (continuous integration) — это когда тесты и проверки качества запускаются автоматически на сервере при пуше в репозиторий или при открытии pull request.

    Самый популярный стартовый вариант для пет-проектов — GitHub Actions:

  • GitHub Actions Documentation
  • На собеседованиях часто достаточно понимания идеи: проверки должны запускаться автоматически, а не “на честном слове”.

    Что дальше по курсу

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

    6. Работа с данными и API: файлы, базы данных, HTTP

    Работа с данными и API: файлы, базы данных, HTTP

    Как эта тема продолжает курс

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

    Теперь вы переходите к тому, чем Python-разработчик занимается каждый день: получать данные, сохранять данные и обмениваться данными по сети.

    В этой статье вы разберете три базовых канала работы с данными:

  • Файлы: чтение и запись, форматы JSON и CSV
  • Базы данных: SQLite как стартовый способ понять SQL и транзакции
  • HTTP и API: как устроены запросы и ответы, как писать клиент к API
  • !Карта того, откуда приходят данные и куда они уходят в типичном приложении

    Работа с файлами

    Файл в Python чаще всего используется в двух сценариях:

  • хранение результатов работы программы
  • обмен данными между программами
  • Пути и файловая система: pathlib

    pathlib дает удобный и кроссплатформенный способ работать с путями.

  • документация: pathlib — Object-oriented filesystem paths
  • Пример: собираем путь к файлу внутри проекта.

    Открытие файлов: режимы, кодировки и контекстный менеджер

    Открытие файла делают через open(...). Главное правило промышленного кода: открывайте файл через with, чтобы он гарантированно закрылся.

  • документация: open
  • Пример чтения текста в кодировке UTF-8:

    Таблица самых частых режимов:

    | Режим | Что делает | Когда использовать | |---|---|---| | "r" | чтение | читаем существующий файл | | "w" | запись с очисткой | перезаписываем результат | | "a" | запись в конец | дописываем лог или историю | | "rb" | чтение байтов | изображения, архивы | | "wb" | запись байтов | сохраняем бинарные данные |

    Построчное чтение и большие файлы

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

    Частые ошибки при работе с файлами

  • FileNotFoundError возникает, если путь неправильный или файла нет
  • UnicodeDecodeError часто означает неверную кодировку
  • потеря данных возможна, если случайно открыть файл в "w" вместо "a"
  • Форматы данных: JSON и CSV

    В реальных проектах вы почти всегда будете конвертировать данные между объектами Python и форматами хранения или передачи.

    JSON: стандарт для API и конфигов

    JSON удобно хранит простые структуры: числа, строки, списки, словари.

  • документация: json — JSON encoder and decoder
  • Запись JSON:

    Чтение JSON:

    Полезные параметры:

  • ensure_ascii=False сохраняет читаемый русский текст
  • indent=2 делает файл удобным для просмотра и Git-диффов
  • Ограничение: JSON не умеет нативно хранить, например, datetime. Для таких случаев используют соглашения, например хранить дату строкой.

    CSV: табличные данные

    CSV удобен для обмена с Excel и выгрузок.

  • документация: csv — CSV File Reading and Writing
  • Запись CSV:

    Чтение CSV:

    Параметр newline="" важен для корректной работы CSV на Windows.

    Базы данных: SQLite как первый шаг к SQL

    Файлы хороши для простых задач, но когда вам нужно:

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

    Для обучения и небольших проектов удобно начать с SQLite: это база данных, которая хранится в одном файле.

  • документация: sqlite3 — DB-API 2.0 interface for SQLite databases
  • Базовые понятия SQL

    Минимальный набор терминов:

  • таблица хранит строки одного типа сущности
  • строка это один объект, например один пользователь
  • столбец это поле, например name
  • первичный ключ обычно уникальный идентификатор
  • Подключение и создание таблицы

    Здесь:

  • connect("app.db") создаст файл базы, если его нет
  • INTEGER PRIMARY KEY в SQLite обычно означает автоинкрементный идентификатор
  • Вставка данных и защита от SQL-инъекций

    Главное правило: не склеивайте SQL строками. Используйте параметры.

    Почему так правильно:

  • драйвер сам корректно экранирует данные
  • вы защищаетесь от ошибок и от SQL-инъекций
  • Чтение данных

    Транзакции: зачем with con:

    Когда вы используете with con:, SQLite делает транзакцию:

  • если внутри блока все успешно, изменения фиксируются
  • если внутри блока ошибка, изменения откатываются
  • Это базовый механизм надежного обновления данных.

    Когда SQLite становится тесно

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

    HTTP и API: как приложения общаются по сети

    HTTP это протокол, по которому клиент запрашивает ресурс у сервера.

    Ключевые слова:

  • клиент делает запрос
  • сервер отвечает
  • endpoint это адрес ресурса на сервере
  • API это набор правил и endpoint-ов
  • !Схема запроса и ответа в HTTP

    Методы HTTP

    Часто встречается такой набор:

  • GET получить данные
  • POST создать ресурс
  • PUT заменить ресурс целиком
  • PATCH частично обновить ресурс
  • DELETE удалить ресурс
  • Официальная справка по семантике методов: HTTP request methods

    Статусы ответов

    Статус кода показывает результат обработки запроса.

    | Диапазон | Смысл | Пример | |---|---|---| | 2xx | успех | 200 OK | | 3xx | перенаправление | 301 Moved Permanently | | 4xx | ошибка клиента | 404 Not Found | | 5xx | ошибка сервера | 500 Internal Server Error |

    Справочник статусов: HTTP response status codes

    Запросы из Python: библиотека requests

    Для обучения и большинства скриптов самый популярный вариант это requests.

  • документация: Requests: HTTP for Humans
  • Установка:

    Пример GET с параметрами и таймаутом:

    Почему важно:

  • timeout=10 защищает программу от зависания
  • raise_for_status() превращает ответы 4xx и 5xx в исключение, которое проще отлавливать
  • response.json() декодирует JSON в структуры Python
  • Отправка JSON в POST

    Сервис httpbin удобен для тренировок: он возвращает вам то, что вы отправили.

  • описание сервиса: httpbin
  • Заголовки и авторизация

    Заголовки это метаданные запроса. Например, API часто требует токен.

    Практика безопасности:

  • не храните токены прямо в коде
  • используйте переменные окружения и файлы конфигурации, которые не коммитятся в Git
  • Как собрать это в маленький, но взрослый модуль

    Ниже схема ответственности, которая хорошо сочетается с темами про модули, тестирование и качество кода.

  • clients/ содержит код для HTTP
  • storage/ содержит код для БД
  • services/ содержит бизнес-логику
  • Пример каркаса:

    Пример: клиент + сохранение в SQLite

    app/clients.py:

    app/storage.py:

    main.py:

    Здесь вы применили сразу несколько привычек из прошлых тем:

  • разделение по модулям
  • безопасная точка входа __name__ == "__main__"
  • транзакция через with con:
  • сетевой таймаут
  • Как тестировать код с файлами, БД и HTTP

    Связь с темой тестирования важна: данные и сеть делают код более хрупким.

    Практичные правила:

  • бизнес-логику выносите в функции, которые легко тестировать
  • для тестов не трогайте реальную базу и реальный интернет без необходимости
  • сетевые вызовы обычно мокают, чтобы тесты были быстрыми и стабильными
  • Документация pytest: pytest Documentation

    Что дальше по курсу

    Следующий шаг после файлов, SQLite и HTTP обычно такой:

  • полноценный веб-бэкенд (например, REST API)
  • работа с PostgreSQL и миграциями
  • асинхронные запросы и фоновые задачи
  • Но фундамент уже заложен: вы умеете читать, преобразовывать и сохранять данные, а также общаться с внешними сервисами через HTTP.

    7. Веб-разработка и портфолио: FastAPI или Django, деплой, собеседования

    Веб-разработка и портфолио: FastAPI или Django, деплой, собеседования

    Как эта тема продолжает курс

    В предыдущих темах вы научились работать с файлами, базой данных (SQLite) и HTTP-запросами как клиент. Веб-разработка добавляет ключевую роль Python-разработчика: писать сервер, который:

  • принимает HTTP-запросы
  • валидирует входные данные
  • выполняет бизнес-логику
  • читает и пишет данные в базу
  • возвращает корректные ответы и ошибки
  • Параллельно вы начнете собирать портфолио: репозиторий, деплой, документация, тесты и демонстрация того, что вы умеете делать продукт, а не только решать задачи.

    FastAPI и Django: что это и в чем разница

    Django и FastAPI решают одну и ту же задачу: позволяют быстро создавать веб-приложения на Python. Разница в подходе.

  • Django это полноценный фреймворк с большим количеством встроенных возможностей: админка, ORM, миграции, шаблоны, авторизация, формы.
  • FastAPI это легковесный веб-фреймворк для API, который делает ставку на типы, быструю разработку REST, автоматическую документацию и ASGI.
  • Полезные официальные источники:

  • Документация FastAPI
  • Документация Django
  • !Быстрая карта выбора между Django и FastAPI

    Критерии выбора

    Выбирайте не по моде, а по задаче и по тому, что покажет вас работодателю.

    Django чаще выбирают, если:

  • нужен быстрый старт продукта с админкой
  • нужен монолит: сайт + админка + API
  • важны готовые решения из коробки
  • команда привыкла к Django
  • FastAPI чаще выбирают, если:

  • вы делаете чистый API для фронтенда или мобильного приложения
  • хотите сильную связку с типами и валидацией
  • нужен ASGI и удобная асинхронность
  • проект предполагает сервисный подход
  • Главное, что важно понимать про WSGI и ASGI

    Это два стандарта, через которые Python-приложение общается с веб-сервером.

  • WSGI чаще ассоциируется с классическим Django-приложением.
  • ASGI это современный стандарт для асинхронности (в том числе WebSocket) и часто используется с FastAPI.
  • Практически:

  • Django традиционно запускают через Gunicorn (WSGI), хотя современные версии Django поддерживают и ASGI-сценарии.
  • FastAPI обычно запускают через Uvicorn (ASGI) или через Gunicorn c ASGI-воркерами.
  • Что должно быть в портфолио Python веб-разработчика

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

    Минимальный набор, который хорошо читается на собеседованиях:

  • API с CRUD (создать, прочитать, обновить, удалить)
  • база данных и миграции
  • валидация входных данных
  • обработка ошибок и корректные HTTP-статусы
  • тесты (хотя бы базовые)
  • линтинг и форматирование
  • README с инструкцией запуска
  • деплой с публичным URL
  • Идеи проектов, которые выглядят по-взрослому

    Выбирайте тему, где есть данные, роли и ограничения.

  • Трекер задач с пользователями и тегами
  • Мини-CRM: клиенты, сделки, статусы
  • Бюджет: транзакции, категории, отчеты
  • Каталог: товары, остатки, фильтры, поиск
  • Интеграция: сбор данных из внешнего API + хранение + свой API
  • FastAPI: каркас API-проекта

    FastAPI хорош тем, что заставляет вас делать привычки, полезные в индустрии: явные модели данных, разделение слоев, тестируемость.

    Минимальная структура

    Пример структуры, в которую легко добавлять тесты и модули:

    Пример простого API

    app/schemas.py:

    Документация по моделям и валидации:

  • Документация Pydantic
  • app/routers/tasks.py:

    app/main.py:

    Запуск:

    После запуска у вас появится автодокументация:

  • http://127.0.0.1:8000/docs
  • Что важно не перепутать в FastAPI

  • FastAPI не заменяет базу данных: хранить в списке можно только для демо.
  • В реальном проекте добавляют слой хранения (например, PostgreSQL через SQLAlchemy) и тесты.
  • Django: быстрый продукт и сильная база для работы

    Django часто выбирают в компаниях, где ценят скорость сборки продукта и готовую экосистему.

    Что Django дает из коробки

  • ORM и миграции
  • админка
  • система пользователей и прав
  • настройки проекта, структура приложений
  • Официальная документация:

  • Руководство Django
  • Django REST Framework для API

    Если ваша цель именно API, то для Django обычно берут Django REST Framework.

  • Документация Django REST Framework
  • Типичный путь:

  • модели в Django ORM
  • сериализаторы для преобразования данных в JSON
  • viewset-ы и роутер
  • База данных для веба: почему почти всегда PostgreSQL

    SQLite полезен для обучения, но для веб-проектов в портфолио лучше сразу закладывать PostgreSQL, потому что это самый частый выбор в вакансиях.

  • Официальный сайт PostgreSQL
  • Что вы обязаны понимать на уровне джуна:

  • что такое миграции и зачем они нужны
  • что такое транзакции
  • что такое индексы и почему поиск по индексам быстрее
  • что такое уникальные ограничения
  • Если вы делаете FastAPI-проект, часто используют:

  • Документация SQLAlchemy
  • Если вы делаете Django-проект, ORM и миграции уже встроены.

    Безопасность и конфигурация: минимум, который ждут на собеседованиях

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

    Что стоит сделать сразу:

  • хранить секреты в переменных окружения
  • добавить .env в .gitignore
  • не логировать токены и пароли
  • использовать хэширование паролей (не хранить пароль как строку)
  • Как ориентир по типам уязвимостей:

  • OWASP Top 10
  • Деплой: как довести проект до публичной ссылки

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

    !Понимание, какие компоненты участвуют в деплое

    Минимальный чеклист перед деплоем

  • проект запускается одной командой локально
  • есть файл зависимостей (requirements.txt или pyproject.toml)
  • конфигурация через переменные окружения
  • приложение слушает 0.0.0.0 и порт из переменной окружения
  • есть миграции и понятный шаг их применения
  • Где деплоить пет-проекты

    Выбирайте платформу, где удобно поднять веб-приложение и базу данных.

  • Документация Render
  • Документация Fly.io
  • Документация Railway
  • Подход у всех похож:

  • Подключаете репозиторий.
  • Указываете команду запуска.
  • Добавляете переменные окружения.
  • Подключаете базу данных.
  • Проверяете логи и healthcheck.
  • Чем запуск отличается для Django и FastAPI

    FastAPI обычно запускают как ASGI-приложение:

    Django часто запускают через WSGI-сервер (пример с Gunicorn):

    Важно: конкретная команда зависит от структуры проекта и платформы деплоя.

    Docker: полезно, но не обязательно в самом начале

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

  • Документация Docker
  • Для первого деплоя можно обойтись без Docker, если платформа деплоя умеет ставить зависимости и запускать команды. Но если вы хотите усилить портфолио, Dockerfile и docker-compose (приложение + PostgreSQL) выглядят очень убедительно.

    Как оформить GitHub-репозиторий, чтобы он работал на вас

    README это ваша короткая презентация как разработчика.

    Что стоит добавить в README:

  • описание проекта и его функциональности
  • стек (Python, FastAPI или Django, PostgreSQL)
  • инструкция локального запуска
  • пример переменных окружения (без секретов)
  • ссылка на деплой
  • как запустить тесты
  • Если у вас подключен CI, это плюс. Например, GitHub Actions:

  • Документация GitHub Actions
  • Собеседования: что учить и как отвечать через свой проект

    Собеседование на джуна обычно проверяет не только синтаксис Python, но и способность мыслить как разработчик продукта.

    Что часто спрашивают по вебу

  • как устроен HTTP (методы, статусы, заголовки)
  • что такое REST и чем отличается PUT от PATCH
  • как валидировать входные данные
  • что такое ORM и миграции
  • как вы обрабатываете ошибки
  • как вы пишете и запускаете тесты
  • Хороший справочник по HTTP:

  • HTTP на MDN
  • Как использовать проект как основу ответов

    Вместо абстрактных фраз лучше рассказывать так:

  • какая была задача
  • какие сущности и таблицы вы выбрали и почему
  • какие endpoints сделали и какие статусы возвращаете
  • как храните конфигурацию и секреты
  • как деплоили и какие проблемы поймали логами
  • Частая ошибка кандидата

    Показывать только код без продукта. Для работодателя ценнее, когда вы можете:

  • объяснить архитектуру простыми словами
  • показать работающий URL
  • продемонстрировать качество: тесты, линтер, понятные коммиты
  • Рекомендуемый маршрут до трудоустройства

    Один практичный план, если вы хотите выйти на уровень уверенного джуна:

  • Выберите один фреймворк как основной (FastAPI или Django).
  • Сделайте один проект с PostgreSQL и миграциями.
  • Добавьте авторизацию или хотя бы регистрацию и хранение пользователей.
  • Покройте ключевую бизнес-логику тестами.
  • Подключите линтер и форматтер.
  • Задеплойте и доведите README до состояния, когда проект можно запустить по инструкции.
  • Если вы пройдете этот маршрут, у вас будет не просто “код на Python”, а портфолио, которое реально помогает получить оффер.