Гайд по бэкенду на 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 для создания масштабируемого и поддерживаемого кода.
- изучить понятия классов и объектов;
- освоить принципы инкапсуляции, наследования и полиморфизма;
- разобраться в работе модулей и пакетов;
- познакомиться с основными паттернами проектирования
Объектно-ориентированное программирование — это подход к написанию кода, при котором программа представляется в виде взаимодействующих друг с другом объектов. Каждый объект содержит данные (свойства) и код (методы), который работает с этими данными. Объекты могут наследовать свойства и методы от других объектов, что позволяет создавать более сложные программы.
В ООП программа разбивается на отдельные объекты, каждый из которых выполняет свою задачу. Это упрощает добавление новых функций и изменение существующих без изменения всего кода. Такой подход делает программу более гибкой и удобной в поддержке.
Применение принципов ООП в Python помогает создавать масштабируемый и поддерживаемый код. Это особенно важно при разработке крупных проектов, где необходимо обеспечить гибкость и возможность расширения функциональности в будущем.
Алгоритмы и структуры данных
Чтобы разобраться в том, как эффективно решать сложные задачи, нужно освоить несколько основных понятий, которые помогают обрабатывать данные и ускорять работу программ. Здесь не нужны глубокие знания математики или программирования — достаточно понять логику.
Научиться находить решения задач так, чтобы программа работала быстро и правильно, даже если данных очень много.
Почему важно понимать, сколько времени и ресурсов тратится на работу программы: Это как планирование поездки: иногда быстрее взять такси, а иногда выгоднее на автобусе, даже если это дольше. Программисты учатся рассчитывать, какой способ будет лучше для разных задач.
- Книги:
- Онлайн-ресурсы и курсы:
- LeetCode, HackerRank, Codeforces — платформы для практики решения задач на алгоритмы.
- https://education.yandex.ru/handbook/algorithms
Работа с базами данных
Базы данных — это организованные структуры для хранения, обработки и управления данными. Они используются в различных областях, таких как бизнес, наука, медицина и другие.
Существует два основных типа баз данных: реляционные и нереляционные (NoSQL).
Реляционные базы данных основаны на табличной структуре, где данные организованы в виде строк и столбцов. Они используют язык запросов SQL для работы с данными. Реляционные базы данных подходят для задач, требующих строгой структуры данных и соблюдения целостности данных.
Нереляционные базы данных, или NoSQL, не имеют фиксированной схемы и позволяют хранить данные в любом формате. Они обеспечивают высокую производительность и масштабируемость, но могут потребовать больше усилий при разработке и управлении. NoSQL базы данных подходят для проектов, где требуется гибкость и масштабируемость.
- Начать нужно с самых основ, тут хорошо подойдет бесплатный курс от Карпова https://karpov.courses/simulator-sql
- Документация PostgreSQL и MySQL.
- 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 необходимо понимать, как происходит обмен данными между клиентом и сервером.
- Клиент-серверная архитектура в картинках 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.
Фреймворк — это набор готовых инструментов, библиотек и функций, которые упрощают разработку веб-приложений. Фреймворки помогают разработчикам быстрее создавать сайты и приложения, не тратя время на написание кода с нуля.
- Django. Это мощный фреймворк, который подходит для создания сложных приложений. Он имеет множество готовых функций и модулей, таких как система аутентификации пользователей, ORM (Object-Relational Mapping) для работы с базами данных и шаблонизатор для генерации HTML-страниц. Django также известен своей безопасностью и надёжностью.
- Flask. Это более лёгкий и гибкий фреймворк, чем Django. Он предоставляет базовые инструменты для создания веб-приложения, такие как маршрутизация запросов, работа с шаблонами и базами данных. Flask позволяет разработчику самостоятельно выбирать нужные ему библиотеки и модули, что делает его более гибким и настраиваемым.
- FastAPI. Этот фреймворк основан на библиотеке Starlette и предназначен для создания высокопроизводительных API. FastAPI использует Python-тип данных async/await для асинхронной обработки запросов, что позволяет ускорить работу приложения.
Выбор фреймворка зависит от ваших целей и задач:
- Flask подойдет, если:
- Вы хотите максимальной гибкости в разработке.
- Проект небольшой или средний по размеру, и вам не нужны сложные встроенные механизмы.
- Важно быстро создать минимальное работоспособное приложение (MVP).
- Ресурсы:
- Официальная документация Flask.
- https://www.youtube.com/playlist?list=PLA0M1Bcd0w8yrxtwgqBvT6OM4HkOU3xYn
- Django подойдет, если:
- Вам нужна полноценная система для быстрого запуска сложного веб-приложения с минимумом дополнительных настроек.
- Важны такие вещи, как административная панель, встроенные механизмы авторизации и аутентификации, работа с ORM.
- Вы создаете большой сайт с корпоративными требованиями.
- Ресурсы:
- Официальная документация Django.
- https://www.youtube.com/playlist?list=PLA0M1Bcd0w8xZA3Kl1fYmOH_MfLpiYMRs
- FastAPI подойдет, если:
- Важна высокая производительность, особенно для асинхронных операций.
- Вы работаете над проектом, который будет активно взаимодействовать с API.
- Вам важна поддержка современного стека технологий (OpenAPI, асинхронные запросы).
- Ресурсы:
- Официальная документация FastAPI.
- https://www.youtube.com/playlist?list=PLYnH8mpFQ4akzzS1D9IHkMuXacb-bD4Cl
Каждый из фреймворков имеет свои сильные стороны и предназначен для решения конкретных задач, поэтому важно выбирать их с учетом специфики вашего проекта.
Разработка RESTful
API — это способ, которым программы обмениваются данными. Создание API помогает настроить взаимодействие между клиентом и сервером для передачи данных.
Цель: Научиться создавать API для обмена данными. Основные задачи: понимание REST API, настройка авторизации и проверка данных.
- Документация по Django REST Framework, Flask-Restful.
- https://habr.com/ru/articles/464261
Тестирование и отладка кода
Цель: Научиться писать тесты, чтобы находить ошибки и поддерживать стабильность кода.
Основные задачи: освоить юнит-тестирование, интеграционные тесты, подход TDD (тесты перед кодом), и использовать отладчик для поиска ошибок.
- Документация pytest.
- https://habr.com/ru/companies/otus/articles/755460
Git и GitHub
Система контроля версий помогает отслеживать изменения в коде и возвращаться к предыдущим версиям, что важно для совместной работы. GitHub — это популярный сервис для хранения кода и совместной работы над проектами.
Цель: Научиться использовать систему контроля версий для командной работы. Задачи: освоить команды Git, работу с ветками, разрешение конфликтов, pull-requests на GitHub и автоматизацию процессов.
- Официальная документация 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: структуру документа, основные теги и их использование;
- освоить семантическую вёрстку для улучшения читаемости кода и SEO;
- познакомиться с CSS: отступы, размеры, цвета, шрифты, Flexbox и Grid для создания гибкой компоновки элементов;
- научиться делать адаптивную вёрстку (Responsive Web Design) с помощью медиазапросов;
- узнать основы JavaScript: работа с DOM, обработка событий, взаимодействие с API;
- понять принципы работы популярных frontend-фреймворков (React, Vue.js, Angular), чтобы лучше интегрировать backend с frontend.
- Почему это важно:
- Понимание полной картины: Backend-разработчик, знающий, как работает фронтенд, может лучше организовать API, учитывая потребности и особенности клиентской части.
- Лучшая коммуникация с фронтенд-разработчиками: Обсуждение интеграционных моментов станет эффективнее.
- Создание фуллстек приложений: Понимание фронтенда позволяет разработчику создавать полные приложения без необходимости привлекать отдельного специалиста для простой вёрстки или взаимодействия с API.
- Инструменты для отладки: Возможность тестировать взаимодействие API через браузер или инструменты разработчика напрямую.
- https://htmlbook.ru/samhtml5
- https://htmlbook.ru/samcss
- https://learn.javascript.ru
- официальная документация фреймворков и библиотек
Освоение базовых навыков фронтенда и вёрстки позволит вам, как backend-разработчику, лучше понимать, как данные и интерфейсы взаимодействуют, а также легче создавать конечные продукты с гармоничным взаимодействием между серверной и клиентской частью.
Дополнительные темы
Многопоточность и мультипроцессинг
Многопоточность и мультипроцессинг — это два подхода к параллельному выполнению задач в программировании. Они позволяют ускорить работу программы за счёт одновременного выполнения нескольких операций.
- Документация Python: библиотеки threading, multiprocessing
- https://www.udemy.com/share/105NYy3@S4YBxLAiBPtVO3YSUqDpDVIWtPnywH8Qs6suHF6HCN8lW03Xd-tcl2mEN7vVCnXe3Q==/
Docker и контейнеризация
Docker — это инструмент, который позволяет упаковать приложение со всем окружением и зависимостями в контейнер. Контейнер можно легко перенести на другую машину и запустить без дополнительной настройки.
- Документация 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
Собеседования
Как всегда, лучше чем первые три страницы Гугла я не уверен, что что-то есть.