October 10

Гайд по бэкенду на Python

Ребята, привет!

Мы создали этот гайд с целью дать вам понять что же нужно для становления крепким бэкенд-разрабом. И взяли за основу наш курс по бэку в Техниуме.

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

Дерзайте!

Что делать чтобы стать бэкендером?

Для того чтобы стать уверенным backend-разработчиком на Python, необходимо освоить широкий набор технологий и практик, от изучения основ языка до работы с архитектурными решениями и DevOps инструментами. Вот подробная дорожная карта по этапам:

Изучение основ Python

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

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

Основы языка программирования помогут вам:

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

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

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

Ресурсы:

ООП (Объектно-Ориентированное Программирование)

Цель: научиться использовать принципы объектно-ориентированного программирования (ООП) в Python для создания масштабируемого и поддерживаемого кода.

Задачи:

  • изучить понятия классов и объектов;
  • освоить принципы инкапсуляции, наследования и полиморфизма;
  • разобраться в работе модулей и пакетов;
  • познакомиться с основными паттернами проектирования

Объектно-ориентированное программирование — это подход к написанию кода, при котором программа представляется в виде взаимодействующих друг с другом объектов. Каждый объект содержит данные (свойства) и код (методы), который работает с этими данными. Объекты могут наследовать свойства и методы от других объектов, что позволяет создавать более сложные программы.

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

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

Ресурсы:

Алгоритмы и структуры данных

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

Основная цель:

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

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

Ресурсы:

  • Книги:
    • "Грокаем алгоритмы" Адитьи Бхаргава — для понимания алгоритмов на простых примерах.
  • Онлайн-ресурсы и курсы:

Работа с базами данных

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

Существует два основных типа баз данных: реляционные и нереляционные (NoSQL).

Реляционные базы данных основаны на табличной структуре, где данные организованы в виде строк и столбцов. Они используют язык запросов SQL для работы с данными. Реляционные базы данных подходят для задач, требующих строгой структуры данных и соблюдения целостности данных.

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

Ресурсы:

Основы работы интернета

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

HTTP (HyperText Transfer Protocol) — это протокол передачи данных, который используется для обмена информацией в интернете. HTTP определяет формат запросов и ответов между клиентом (например, браузером) и сервером.

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

Изучение работы интернета, HTTP и клиент-серверной архитектуры поможет начинающим разработчикам:

  • Понимать, как работает интернет. Это позволит им создавать более надёжные и эффективные приложения.
  • Разрабатывать веб-приложения. Веб-приложения — это программы, которые работают в браузере и взаимодействуют с сервером через HTTP. Изучение HTTP и клиент-серверной архитектуры необходимо для разработки таких приложений.
  • Работать с API. API (Application Programming Interface) — это набор функций и процедур, которые позволяют программам взаимодействовать друг с другом. Многие сервисы предоставляют свои API, чтобы разработчики могли создавать приложения, использующие их данные и функции. Для работы с API необходимо понимать, как происходит обмен данными между клиентом и сервером.

ССЫЛКИ НА РЕСУРСЫ:

Фреймворки для веб-разработки

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

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

Какой фреймворк выбрать?

  • Django. Это мощный фреймворк, который подходит для создания сложных приложений. Он имеет множество готовых функций и модулей, таких как система аутентификации пользователей, ORM (Object-Relational Mapping) для работы с базами данных и шаблонизатор для генерации HTML-страниц. Django также известен своей безопасностью и надёжностью.
  • Flask. Это более лёгкий и гибкий фреймворк, чем Django. Он предоставляет базовые инструменты для создания веб-приложения, такие как маршрутизация запросов, работа с шаблонами и базами данных. Flask позволяет разработчику самостоятельно выбирать нужные ему библиотеки и модули, что делает его более гибким и настраиваемым.
  • FastAPI. Этот фреймворк основан на библиотеке Starlette и предназначен для создания высокопроизводительных API. FastAPI использует Python-тип данных async/await для асинхронной обработки запросов, что позволяет ускорить работу приложения.

Выбор фреймворка зависит от ваших целей и задач:

  • Flask подойдет, если:
    • Вы хотите максимальной гибкости в разработке.
    • Проект небольшой или средний по размеру, и вам не нужны сложные встроенные механизмы.
    • Важно быстро создать минимальное работоспособное приложение (MVP).
  • Django подойдет, если:
    • Вам нужна полноценная система для быстрого запуска сложного веб-приложения с минимумом дополнительных настроек.
    • Важны такие вещи, как административная панель, встроенные механизмы авторизации и аутентификации, работа с ORM.
    • Вы создаете большой сайт с корпоративными требованиями.
  • FastAPI подойдет, если:
    • Важна высокая производительность, особенно для асинхронных операций.
    • Вы работаете над проектом, который будет активно взаимодействовать с API.
    • Вам важна поддержка современного стека технологий (OpenAPI, асинхронные запросы).

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

Разработка RESTful

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

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

Ресурсы:

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

Цель: Научиться писать тесты, чтобы находить ошибки и поддерживать стабильность кода.

Основные задачи: освоить юнит-тестирование, интеграционные тесты, подход TDD (тесты перед кодом), и использовать отладчик для поиска ошибок.

Ресурсы:

Git и GitHub

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

Цель: Научиться использовать систему контроля версий для командной работы. Задачи: освоить команды Git, работу с ветками, разрешение конфликтов, pull-requests на GitHub и автоматизацию процессов.

Ресурсы:

Рекомендуемая практика: - Создать проект на 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 через браузер или инструменты разработчика напрямую.

Ресурсы:

Освоение базовых навыков фронтенда и вёрстки позволит вам, как backend-разработчику, лучше понимать, как данные и интерфейсы взаимодействуют, а также легче создавать конечные продукты с гармоничным взаимодействием между серверной и клиентской частью.

Дополнительные темы

Многопоточность и мультипроцессинг

Многопоточность и мультипроцессинг — это два подхода к параллельному выполнению задач в программировании. Они позволяют ускорить работу программы за счёт одновременного выполнения нескольких операций.

Ресурсы:

  • Документация Python: библиотеки threading, multiprocessing
  • https://www.udemy.com/share/105NYy3@S4YBxLAiBPtVO3YSUqDpDVIWtPnywH8Qs6suHF6HCN8lW03Xd-tcl2mEN7vVCnXe3Q==/

Docker и контейнеризация

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

Ресурсы:

Пет-проекты

Вот несколько идей для пет-проектов, которые помогут начинающему бэкенд-разработчику поэтапно прокачивать навыки из предложенного roadmap и создать впечатляющее портфолио:

1. RESTful API для блога

  • Описание: Разработайте API для создания, редактирования и удаления постов в блоге.
  • Технологии:
    • Flask или Django для API.
    • PostgreSQL или SQLite для хранения данных.
    • JWT для аутентификации пользователей.
    • Flask-RESTful для организации архитектуры API.
    • SQLAlchemy для работы с БД.
  • Чему научитесь:
    • Основы создания RESTful API.
    • Работа с базами данных и ORM.
    • Авторизация и аутентификация.
    • Валидация данных.

2. Микросервис для обработки изображений

  • Описание: Создайте сервис, который принимает изображения, применяет фильтры (черно-белый, размытие, обрезка) и возвращает измененные изображения.
  • Технологии:
    • FastAPI для создания API.
    • Pillow или OpenCV для обработки изображений.
    • Redis для кеширования результатов.
    • Docker для контейнеризации.
    • MongoDB для хранения информации об обработанных изображениях.
  • Чему научитесь:
    • Асинхронное программирование с FastAPI.
    • Обработка медиафайлов.
    • Кеширование с Redis.
    • Работа с Docker и контейнерами.

3. Приложение TODO с веб-интерфейсом

  • Описание: Простое веб-приложение для управления списками задач с возможностью создания, редактирования и удаления задач, с авторизацией пользователей.
  • Технологии:
    • Django для бэкенда.
    • Django ORM для работы с БД.
    • HTML/CSS/JavaScript для фронтенда.
    • Bootstrap для быстрой вёрстки.
    • SQLite или PostgreSQL для хранения данных.
  • Чему научитесь:
    • Полноценная интеграция бэкенда и фронтенда.
    • Авторизация и аутентификация пользователей.
    • CRUD-операции.
    • Основы фронтенда (HTML, CSS, JS).

4. API для погодного сервиса

  • Описание: Разработка API, которое подключается к внешнему сервису погоды и возвращает пользователю прогноз по городу с возможностью кеширования запросов.
  • Технологии:
    • Flask или FastAPI для создания API.
    • Requests для взаимодействия с внешним API.
    • Redis для кеширования запросов.
    • SQLAlchemy для работы с базой данных (если хотите хранить историю запросов).
  • Чему научитесь:
    • Взаимодействие с внешними API.
    • Асинхронное программирование для оптимизации запросов.
    • Кеширование с Redis.

Резюме и отклики

Пример контента:

Еще примеры: https://drive.google.com/drive/folders/1yFv1O53-n5OrzsEobQohvUsvEofH-V6s?usp=share_link

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

Кратко об опыте. Пишем:

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

Сопроводительное письмо, пример: https://docs.google.com/document/d/1Dlw4cTZj4pOp18VgKz1iCzgHPVJcwcIc9EpiAT75DPA/edit

Собеседования

Как всегда, лучше чем первые три страницы Гугла я не уверен, что что-то есть.

Пишите свое мнение в комментах!