Гайд по бэкенду на Python (полный)
Мы создали этот гайд с целью дать вам понять что же нужно для становления крепким бэкенд-разрабом. И взяли за основу наш курс по бэку в Техниуме.
Конечно, уложить целый бэкенд в гайд не удастся, но разложить по полочкам, как мне кажется, у нас получилось.
Что делать чтобы стать бэкенд-разработчиком?
Для того чтобы стать уверенным backend-разработчиком на Python, необходимо освоить широкий набор технологий и практик, от изучения основ языка до работы с архитектурными решениями и DevOps инструментами.
Вот подробная дорожная карта по этапам:
Изучение основ Python
- Цель: Научиться писать код, работать с типами данных, структурой программы и использовать базовые библиотеки.
- Задачи:
Программирование — это способ общения с компьютером, который позволяет ему выполнять различные задачи.
Чтобы научиться программировать, нужно изучить язык программирования. Это как новый иностранный язык: сначала вы учите алфавит и основы грамматики, а потом начинаете писать простые предложения и тексты. Так же и в программировании: вы изучаете синтаксис языка, основные конструкции и правила, а затем можете создавать свои программы.
Основы языка программирования помогут вам:
- Писать код. Вы сможете создавать программы, которые будут решать разные задачи: от простых вычислений до сложных алгоритмов.
- Работать с типами данных. Это значит, что вы будете знать, как хранить информацию в компьютере: числа, строки, логические значения и т. д.
- Понимать структуру программы. Вы узнаете, из каких частей состоит программа: переменные, функции, циклы, условия и др.
- Использовать базовые библиотеки. Библиотеки — это готовые модули кода, которые можно использовать в своих программах. Они упрощают работу и экономят время.
Изучение основ языка программирования поможет вам начать свой путь в мире разработки и создавать полезные и интересные проекты. Вы сможете решать задачи, автоматизировать процессы и даже зарабатывать на этом.
Но не стоит бояться, если вы совсем ничего не знаете о программировании. Изучение основ языка программирования — это увлекательный процесс, который откроет перед вами новые горизонты и возможности. Главное — быть готовым к тому, что это потребует времени и усилий. Но результат того стоит!
- Ресурсы:
- Хендбук от Яндекса https://education.yandex.ru/handbook/python
- Документация Python.
- Онлайн-курсы на Степике и миллиарде других платформ: https://stepik.org/course/67/info, https://stepik.org/course/58852/info
ООП (Объектно-Ориентированное Программирование)
- Цель: Понимание и применение принципов ООП в Python для написания масштабируемого и поддерживаемого кода.
- Задачи:
Объектно-ориентированное программирование (ООП) — это подход к написанию кода, при котором программа представляется в виде взаимодействующих друг с другом объектов.
Объекты содержат данные (свойства) и код (методы), который работает с этими данными. Объекты могут наследовать свойства и методы от других объектов, что позволяет создавать более сложные программы.
ООП позволяет разбивать программу на отдельные объекты, каждый из которых выполняет свою задачу. Это упрощает добавление новых функций и изменение существующих без изменения всего кода.
Алгоритмы и структуры данных
- Цель: Развитие навыков решения сложных задач с помощью эффективных алгоритмов и структур данных для оптимизации производительности приложений и работы с большими объёмами данных.
- Задачи:
- Основные структуры данных:
- Массивы (arrays): Понимание операций над массивами (доступ к элементам, добавление, удаление).
- Связные списки (linked lists): Односвязные и двусвязные списки.
- Стек (stack) и очередь (queue): Принципы работы с FIFO (first in, first out) и LIFO (last in, first out).
- Хэш-таблицы (hash maps): Принципы хэширования и работы с хэш-таблицами.
- Деревья и графы:
- Кучи (heaps): Максимальные и минимальные кучи, использование для работы с приоритетами.
- Основные алгоритмы:
- Поиск:
- Сортировка:
- Пузырьковая сортировка, сортировка вставками.
- Быстрая сортировка (Quick Sort), сортировка слиянием (Merge Sort).
- Понимание временной сложности различных сортировок.
- Жадные алгоритмы: Примеры задач и их решения (например, задача о рюкзаке).
- Динамическое программирование: Оптимизация задач с помощью сохранения промежуточных решений (задача о рюкзаке, задачи на разбиение чисел и т.д.).
- Алгоритмы работы с графами:
- Анализ сложности алгоритмов:
Алгоритмы и структуры данных — это основа программирования. Алгоритмы представляют собой последовательность действий, которые необходимо выполнить для решения задачи, а структуры данных — способ организации и хранения данных в памяти компьютера.
Изучение алгоритмов и структур данных помогает будущим программистам:
- Решать сложные задачи. Алгоритмы позволяют разбить задачу на более простые шаги и найти эффективное решение.
- Оптимизировать код. Выбор правильной структуры данных может ускорить выполнение программы.
- Понимать принципы работы программ. Зная, как работают алгоритмы и структуры данных, можно лучше понять, что происходит внутри программы.
- Справляться с нестандартными задачами. Алгоритмы и структуры данных помогают находить нестандартные решения и выходить за рамки привычных подходов.
- Готовиться к собеседованиям. Вопросы об алгоритмах и структурах данных часто встречаются на собеседованиях в крупные компании.
- Почему это важно для backend-разработчика:
- Производительность: Понимание алгоритмов помогает разрабатывать решения, которые работают быстрее и более эффективно обрабатывают данные, что особенно важно для высоконагруженных приложений.
- Работа с большими данными: Взаимодействие с большими базами данных или сложными системами часто требует знания эффективных алгоритмов и структур данных.
- Подготовка к собеседованиям: Компании часто проверяют знания алгоритмов и структур данных на технических интервью, особенно для middle и senior позиций.
- Ресурсы:
- Книги:
- Онлайн-ресурсы и курсы:
- LeetCode, HackerRank, Codeforces — платформы для практики решения задач на алгоритмы.
- https://education.yandex.ru/handbook/algorithms
Работа с базами данных
Базы данных — это организованные структуры для хранения, обработки и управления данными. Они используются в различных областях, таких как бизнес, наука, медицина и другие.
Существует два основных типа баз данных: реляционные и нереляционные (NoSQL).
Реляционные базы данных основаны на табличной структуре, где данные организованы в виде строк и столбцов. Они используют язык запросов SQL для работы с данными. Реляционные базы данных подходят для задач, требующих строгой структуры данных и соблюдения целостности данных.
Нереляционные базы данных, или NoSQL, не имеют фиксированной схемы и позволяют хранить данные в любом формате. Они обеспечивают высокую производительность и масштабируемость, но могут потребовать больше усилий при разработке и управлении. NoSQL базы данных подходят для проектов, где требуется гибкость и масштабируемость.
- Начать нужно с самых основ, тут хорошо подойдет бесплатный курс от Карпова https://karpov.courses/simulator-sql
- Документация PostgreSQL и MySQL.
- https://postgrespro.ru/education/courses/DBA1
- https://www.youtube.com/watch?v=59xLm12RkFc&list=PLt0vzWoDuwcTdFnp-QWtx2yEvKMDlPw7l
Основы работы интернета
Интернет — это глобальная сеть, которая объединяет компьютеры и другие устройства по всему миру. С помощью интернета люди могут обмениваться информацией, общаться, работать и развлекаться.
HTTP (HyperText Transfer Protocol) — это протокол передачи данных, который используется для обмена информацией в интернете. HTTP определяет формат запросов и ответов между клиентом (например, браузером) и сервером.
Клиент-серверная архитектура — это модель взаимодействия между компьютерами в сети, при которой один компьютер (клиент) отправляет запрос другому компьютеру (серверу), а сервер обрабатывает этот запрос и возвращает ответ клиенту.
Изучение работы интернета, HTTP и клиент-серверной архитектуры поможет начинающим разработчикам:
- Понимать, как работает интернет. Это позволит им создавать более надёжные и эффективные приложения.
- Разрабатывать веб-приложения. Веб-приложения — это программы, которые работают в браузере и взаимодействуют с сервером через HTTP. Изучение HTTP и клиент-серверной архитектуры необходимо для разработки таких приложений.
- Работать с API. API (Application Programming Interface) — это набор функций и процедур, которые позволяют программам взаимодействовать друг с другом. Многие сервисы предоставляют свои API, чтобы разработчики могли создавать приложения, использующие их данные и функции. Для работы с API необходимо понимать, как происходит обмен данными между клиентом и сервером.
Вот список ключевых тем, которые нужно изучить начинающему разработчику о работе интернета, HTTP и клиент-серверной архитектуре:
- Принципы работы сети (LAN, WAN).
- IP-адресация (IPv4 и IPv6).
- DNS (Domain Name System) и его роль в интернета.
- Протоколы TCP/IP и UDP.
- Работа маршрутизаторов и свитчей.
- Что такое HTTP и его основные характеристики.
- Разница между HTTP и HTTPS (шифрование, SSL/TLS).
- Структура HTTP-запроса:
- Методы HTTP (GET, POST, PUT, DELETE и т.д.).
- Заголовки HTTP (что они делают и как используются).
- Тело запроса (форматы данных, например, JSON, XML).
- Структура HTTP-ответа:
3. Клиент-серверная архитектура
- Основные принципы клиент-серверной модели.
- Как клиент взаимодействует с сервером (запросы и ответы).
- Различия между тонким и толстым клиентом.
- Архитектура RESTful API.
- Микросервисы и их особенности.
- Как работают DNS-серверы и процесс разрешения доменных имен.
- Принципы маршрутизации в интернете.
- CDN (Content Delivery Network) и его роль.
- Принципы работы WebSockets.
- Различия между WebSocket и HTTP.
- Применение WebSockets для обмена данными в реальном времени.
- Как браузеры обрабатывают и отображают HTTP-запросы.
- Рендеринг веб-страниц.
- Кэширование браузера и его важность.
- Инструменты разработчика (DevTools) для отладки.
- Понятие API (Application Programming Interface) и его назначение.
- Разница между веб-приложением и API.
- Как веб-приложения используют API для обмена данными.
- Клиент-серверная архитектура в картинках https://habr.com/ru/articles/495698/
- https://ru.hexlet.io/courses/internet-fundamentals/lessons/client-server/theory_unit
- Курс по сетям https://youtube.com/playlist?list=PLtPJ9lKvJ4ojPWFLuUz6g8c73Ta45bUN8&si=20sFvOly8MqGxNSY
Фреймворки для веб-разработки
Цель: Изучение популярных фреймворков для разработки веб-приложений на Python.
Фреймворк — это набор готовых инструментов, библиотек и функций, которые упрощают разработку веб-приложений. Фреймворки помогают разработчикам быстрее создавать сайты и приложения, не тратя время на написание кода с нуля.
Вот несколько популярных фреймворков для разработки веб-приложений на Python:
- Цель: Изучение легкого и гибкого микрофреймворка для разработки веб-приложений.
- Особенности:
- Легковесный и гибкий.
- Подходит для создания небольших и средних приложений.
- Требует больше работы по настройке, но даёт гибкость в выборе инструментов и архитектуры.
- Плюсы:
- Легкость изучения, минимум "магии".
- Большое сообщество и обширная документация.
- Легкость интеграции сторонних библиотек и модулей.
- Минусы:
- Для больших приложений требуется больше ручной работы по настройке (ORM, миграции, авторизация).
- Нет административной панели "из коробки".
- Примеры применения:
- Ресурсы:
- Официальная документация Flask.
- https://www.youtube.com/playlist?list=PLA0M1Bcd0w8yrxtwgqBvT6OM4HkOU3xYn
- Цель: Изучение мощного фреймворка для построения полнофункциональных веб-приложений.
- Особенности:
- "Батарейки включены" — много возможностей "из коробки".
- Полная экосистема для создания больших приложений с минимальными усилиями по настройке.
- Плюсы:
- Встроенная административная панель.
- Django ORM — мощный инструмент для работы с БД.
- Структурированный подход (MVC архитектура).
- Подходит для создания больших веб-приложений и корпоративных систем.
- Минусы:
- Сложнее освоить из-за большего объёма функционала.
- Меньшая гибкость по сравнению с Flask — сложнее отойти от предложенных стандартов.
- Примеры применения:
- Интернет-магазины.
- Социальные сети.
- Внутренние корпоративные системы.
- Проекты, где требуется быстрая разработка за счёт встроенных возможностей.
- Ресурсы:
- Официальная документация Django.
- https://www.youtube.com/playlist?list=PLA0M1Bcd0w8xZA3Kl1fYmOH_MfLpiYMRs
- Цель: Изучение современного высокопроизводительного фреймворка для создания RESTful API.
- Особенности:
- Основан на асинхронности и высокой производительности.
- Интуитивно понятный и мощный интерфейс для создания API.
- Поддержка автодокументации через OpenAPI.
- Плюсы:
- Высокая скорость и производительность (идеален для API).
- Автоматическая валидация данных.
- Простой и чистый синтаксис.
- Интеграция с асинхронными операциями (поддержка async/await).
- Минусы:
- Молодой фреймворк с менее развитыми экосистемами по сравнению с Django.
- Более сложный для начинающих, чем Flask.
- Примеры применения:
- Высоконагруженные API.
- Микросервисы с требованием к производительности.
- Проекты, требующие интеграции с асинхронными сервисами.
- Ресурсы:
- Официальная документация FastAPI.
- https://www.youtube.com/playlist?list=PLYnH8mpFQ4akzzS1D9IHkMuXacb-bD4Cl
- Django. Это мощный фреймворк, который подходит для создания сложных приложений. Он имеет множество готовых функций и модулей, таких как система аутентификации пользователей, ORM (Object-Relational Mapping) для работы с базами данных и шаблонизатор для генерации HTML-страниц. Django также известен своей безопасностью и надёжностью.
- Flask. Это более лёгкий и гибкий фреймворк, чем Django. Он предоставляет базовые инструменты для создания веб-приложения, такие как маршрутизация запросов, работа с шаблонами и базами данных. Flask позволяет разработчику самостоятельно выбирать нужные ему библиотеки и модули, что делает его более гибким и настраиваемым.
- FastAPI. Этот фреймворк основан на библиотеке Starlette и предназначен для создания высокопроизводительных API. FastAPI использует Python-тип данных async/await для асинхронной обработки запросов, что позволяет ускорить работу приложения.
Выбор фреймворка зависит от ваших целей и задач:
- Flask подойдет, если:
- Вы хотите максимальной гибкости в разработке.
- Проект небольшой или средний по размеру, и вам не нужны сложные встроенные механизмы.
- Важно быстро создать минимальное работоспособное приложение (MVP).
- Django подойдет, если:
- Вам нужна полноценная система для быстрого запуска сложного веб-приложения с минимумом дополнительных настроек.
- Важны такие вещи, как административная панель, встроенные механизмы авторизации и аутентификации, работа с ORM.
- Вы создаете большой сайт с корпоративными требованиями.
- FastAPI подойдет, если:
Каждый из фреймворков имеет свои сильные стороны и предназначен для решения конкретных задач, поэтому важно выбирать их с учетом специфики вашего проекта.
Разработка RESTful
API (Application Programming Interface) — это набор функций и процедур, которые позволяют программам взаимодействовать друг с другом. С помощью API можно создавать приложения, использующие данные и функции других сервисов.
Создание API — это процесс разработки программного интерфейса, который будет предоставлять доступ к определённым функциям или данным сервера. Это позволяет другим приложениям получать доступ к этим данным и использовать их в своих целях.
- Цель: Научиться создавать API для обмена данными между клиентом и сервером.
- Задачи:
- Принципы REST API: маршрутизация, запросы и ответы, методы HTTP.
- Авторизация и аутентификация
- Валидация данных.
- Ресурсы:
- Документация по Django REST Framework, Flask-Restful.
- https://habr.com/ru/articles/464261
Тестирование и отладка кода
- Цель: Научиться писать тесты для обеспечения стабильности кода и обнаружения ошибок.
- Задачи:
- Юнит-тестирование с помощью unittest или pytest.
- Модульные, интеграционные тесты.
- Принципы TDD (разработка через тестирование).
- Использование инструмента отладки (pdb).
- Ресурсы:
- Документация pytest.
- https://habr.com/ru/companies/otus/articles/755460
Git и GitHub
Система контроля версий — это инструмент, который позволяет отслеживать изменения в коде и возвращаться к предыдущим версиям при необходимости. Это особенно полезно для командной работы над проектами, когда несколько разработчиков работают над одним и тем же кодом одновременно.
GitHub — это один из самых популярных сервисов для хостинга проектов на основе системы контроля версий Git. Он предоставляет инструменты для совместной работы над кодом, отслеживания ошибок и управления версиями.
- Цель: Освоить систему контроля версий для командной работы над проектами и развертывания кода.
- Задачи:
- Основы Git:
- Команды git init, git add, git commit, git push, git pull.
- Ветвление и слияние (команды git branch, git merge).
- Разрешение конфликтов при слиянии.
- Работа с удалёнными репозиториями.
- GitHub:
- Создание и клонирование репозиториев.
- Работа с pull-request и code review.
- Использование GitHub Issues для отслеживания задач.
- Настройка GitHub Actions для автоматизации процессов CI/CD.
- Командная работа:
- Ресурсы:
- Официальная документация Git и GitHub.
- https://practicum.yandex.ru/git-basics/?utm_source=telegram&utm_medium=performance&utm_campaign=Telegram_performance_promo_git-basics-bookflow
Рекомендуемая практика: - Создать проект на GitHub, добавить в него код, практиковаться в создании Pull Requests. - Присоединиться к open-source проектам на GitHub, участвовать в разработке и ревью чужого кода.
Основы фронтенда и вёрстки для backend-разработчика
- Цель: Понимание основ работы клиентской части веб-приложений для более эффективного взаимодействия с фронтенд-разработчиками и создания полноценного взаимодействия между клиентом и сервером.
- Задачи:
- HTML:
- Структура HTML-документа.
- Основные теги и их использование (заголовки, параграфы, списки, ссылки, формы).
- Семантическая вёрстка для улучшения читаемости кода и SEO.
- CSS:
- Основные свойства CSS: отступы, размеры, цвета, шрифты.
- Работа с Flexbox и Grid для создания гибкой компоновки элементов.
- Медиа-запросы и адаптивная вёрстка (Responsive Web Design).
- JavaScript (базовый уровень):
- Основы работы с DOM (Document Object Model).
- Обработка событий (например, клик, ввод данных).
- Взаимодействие с API.
- Frontend-фреймворки:
- Понимание основ работы с популярными фреймворками (React, Vue.js, Angular) для того, чтобы лучше интегрировать backend с frontend.
- Работа с API:
- Почему это важно:
- Понимание полной картины: Backend-разработчик, знающий, как работает фронтенд, может лучше организовать API, учитывая потребности и особенности клиентской части.
- Лучшая коммуникация с фронтенд-разработчиками: Обсуждение интеграционных моментов станет эффективнее.
- Создание фуллстек приложений: Понимание фронтенда позволяет разработчику создавать полные приложения без необходимости привлекать отдельного специалиста для простой вёрстки или взаимодействия с API.
- Инструменты для отладки: Возможность тестировать взаимодействие API через браузер или инструменты разработчика напрямую.
- Ресурсы:
Освоение базовых навыков фронтенда и вёрстки позволит вам, как backend-разработчику, лучше понимать, как данные и интерфейсы взаимодействуют, а также легче создавать конечные продукты с гармоничным взаимодействием между серверной и клиентской частью.
Многопоточность и мультипроцессинг
Многопоточность и мультипроцессинг — это два подхода к параллельному выполнению задач в программировании. Они позволяют ускорить работу программы за счёт одновременного выполнения нескольких операций.
- Цель: Научиться эффективно управлять параллельными и конкурентными задачами для повышения производительности Python-приложений.
- Задачи:
- Документация Python: библиотеки threading, multiprocessing
- https://www.udemy.com/share/105NYy3@S4YBxLAiBPtVO3YSUqDpDVIWtPnywH8Qs6suHF6HCN8lW03Xd-tcl2mEN7vVCnXe3Q==
Асинхронное программирование
- Цель: Освоить асинхронные возможности Python для создания высокопроизводительных приложений.
- Задачи:
- Основы асинхронного программирования: async/await.
- Работа с библиотеками asyncio и aiohttp.
- Асинхронные запросы к базам данных.
- Ресурсы:
- Документация asyncio.
- https://metaclass.kts.studio/aiohttp
Docker и контейнеризация
Docker — это инструмент, который позволяет упаковать приложение со всем окружением и зависимостями в контейнер. Контейнер можно легко перенести на другую машину и запустить без дополнительной настройки.
- Цель: Научиться использовать Docker для разработки, тестирования и деплоя приложений.
- Задачи:
- Создание Docker-контейнеров для Python приложений.
- Работа с Docker Compose для создания многокомпонентных систем.
- Понимание основ оркестрации контейнеров с помощью Kubernetes (опционально).
- Ресурсы:
- Документация Docker и Docker Compose.
- https://stepik.org/course/74010/info
Портфолио и пет-проекты
Вот несколько идей для пет-проектов, которые помогут начинающему бэкенд-разработчику поэтапно прокачивать навыки из предложенного roadmap и создать впечатляющее портфолио:
1. RESTful API для блога
- Описание: Разработайте API для создания, редактирования и удаления постов в блоге.
- Технологии:
- Flask или Django для API.
- PostgreSQL или SQLite для хранения данных.
- JWT для аутентификации пользователей.
- Flask-RESTful для организации архитектуры API.
- SQLAlchemy для работы с БД.
- Чему научитесь:
2. Микросервис для обработки изображений
- Описание: Создайте сервис, который принимает изображения, применяет фильтры (черно-белый, размытие, обрезка) и возвращает измененные изображения.
- Технологии:
- FastAPI для создания API.
- Pillow или OpenCV для обработки изображений.
- Redis для кеширования результатов.
- Docker для контейнеризации.
- MongoDB для хранения информации об обработанных изображениях.
- Чему научитесь:
3. Приложение TODO с веб-интерфейсом
- Описание: Простое веб-приложение для управления списками задач с возможностью создания, редактирования и удаления задач, с авторизацией пользователей.
- Технологии:
- Django для бэкенда.
- Django ORM для работы с БД.
- HTML/CSS/JavaScript для фронтенда.
- Bootstrap для быстрой вёрстки.
- SQLite или PostgreSQL для хранения данных.
- Чему научитесь:
4. API для погодного сервиса
- Описание: Разработка API, которое подключается к внешнему сервису погоды и возвращает пользователю прогноз по городу с возможностью кеширования запросов.
- Технологии:
- Flask или FastAPI для создания API.
- Requests для взаимодействия с внешним API.
- Redis для кеширования запросов.
- SQLAlchemy для работы с базой данных (если хотите хранить историю запросов).
- Чему научитесь:
Резюме и отклики
Еще примеры: https://drive.google.com/drive/folders/1yFv1O53-n5OrzsEobQohvUsvEofH-V6s?usp=share_link
Обратите внимание, что в фолдере загружен пример резюме и на зарубежный рынок. Оно должно умещаться в лист бумаги.
- что за проект был
- какой стек технологий на проекте
- что вы конкретно делали
- что было результатом вашей работы
Сопроводительное письмо, пример: https://docs.google.com/document/d/1Dlw4cTZj4pOp18VgKz1iCzgHPVJcwcIc9EpiAT75DPA/edit
Собеседования
Как всегда, лучше чем первые три страницы Гугла я не уверен, что что-то есть.