Roadmap Python Backend Developer
Привет! Меня зовут Антон Щербак, я Senior Python-разработик. Этот роадмап является частью программы моего менторства. Тут полностью расписано с чего нужно начать свое обучение, в какой последовательности изучать теорию, а также приложены ссылки, которые помогут вам в изучении той или иной темы.
В роадмапе есть много различных ссылок, но это не означает что каждую из них нужно выучить на зубок. Проходите материалы до тех пор, пока не почувствуете свою уверенность в теме. Наличие альтернативных источников поможет вам если какой-то из них придется не по душе:)
Если вам нужна помощь в освоении программы, то вы можете ознакомиться с моим предложением по ссылке.
Содержание
- Начало обучения
- База по Computer Science
- Linux
- Основы Python
- Git
- Python ООП
- Конкурентность в Python
- Базы данных
- Тестирование программ
- Алгоритмы и структуры данных
- Сеть и интернет
- HTML & CSS + Jinja2 + Markdown
- Python Web Frameworks: Django, Flask, FastAPI
- WSGI & UWSGI
- Docker + Docker-compose
- Брокеры сообщений: RabbitMQ/Kafka
- Ручной и автоматизированный деплой приложений: Gitlab CI/CD
- K8s base
- Архитектура ПО
- Логирование
- Сбор и мониторинг метрик
- Мониторинг ошибок
- Софт-скиллы и работа в команде
- Выход на рынок
- Альтернативные роадмапы
Начало обучения
Итак, вы решили стать Python-разработчиком. Есть несколько важных шагов, которые нужно сделать перед обучением, в самом-самом начале:
1) Вы должны поставить себе четкую и осязаемую цель.
Нужно понимать для чего вообще вам нужно обучение. Что вы хотите получить в финале? Какая ваша мотивация? Если ваша цель – это заработок, то в этом нет ничего криминального. Я бы даже сказал, что это правильно и важно. Обозначьте себе цифру, к которой хотите прийти в результате обучения, обговорите с ментором или человеком, который уже работает в ИТ, насколько это реально и какие усилия нужно к этому приложить. Пусть итоговая цифра служит для вас мотиватором, который поможет не терять веру в себя и надежду на успех.
Очень классная книжка о том как работать с целью – Элияху Голдратт «Цель. Процесс непрерывного совершенствования»
2) Вы должны ограничить время своего обучения.
Было ли у вас такое, что после очередного пройденного курса на степике вы начинаете новый, думая что знаний все еще не достаточно?
ИТ – это не та область, где есть ограниченное число знаний, необходимое для работы. Можно учиться бесконечно, долго, упорно и в конечном итоге так и не достигнуть своей начальной цели – устроиться на работу и получать зарплату.
В роликах на ютубе часто можно услышать подобную пропаганду о том, что нужно бесконечно впитывать поток информации и возможно в будущем вас возьмут на работу. На самом деле это не так. Есть ограниченное число навыков, которые вы должны усвоить для достижения цели, ни больше. Именно они и представлены в этом родмапе.
Хоть навыков и конечное число, что уже сокращает время на распыление, даже их можно изучать очень долгое время. Подумайте, зачем вам растягивать обучение без зарплаты? Лимитируйте свое время на обучение, уделяйте обучению несколько часов ежедневно. Если не можете контролировать себя сами, то пусть вас мотивирует учиться ментор.
Почитайте, какие требования в своих вакансиях описывает работодатель. Совпадают ли они с роадмапом? Посмотрите вилки, которые предлагает работодатель, совпадают ли они с вашими ожиданиями? Вакансии – это некий маяк того, к чему вам нужно прийти после вашего обучения. Как результат вы не должны пугаться незнакомых слов и быть уверенными в себе и своих силах. Уверенность помогает достигать целей.
4) Найдите себе сообщество единомышленников, в котором можно найти поддержку
Люди – социальные существа, нам намного проще добиваться результатов вместе с другими. Может быть вы вместе с другом мечтали устроиться в ИТ? Или у вас есть на примете сообщества таких же людей. Так же ментор может помочь с поддержкой и мотивацией.
Если ничего не нашли, то можно, к примеру, вступить в это сообщество.
5) Поймите, что без практики ничего не получится
Просто прочитать книжки и посмотреть видео на ютубе не выйдет. Вы должны практиковаться, много практиковаться. Начните с того, что повторяйте за автором видео, записывайтесь на приложенные бесплатные курсы и нарешивайте задачи или попросите вашего ментора о практике.
База по Computer Science
В этом блоке вам нужно разобраться с тем, что находится внутри вашего компьютера, какие есть единицы информации, как устроен процессор внутри и прочие базовые вещи, на которых строятся основы информатики.
Для чего вам это знать: Базовые знания помогут вам в понимании многих вещей в программировании в дальнейшем. Это некая синхронизация между вами и другими разработчиками. В частности знания о устройстве процессора помогут понять почему дробные числа не точные, а знания о единицах информации поможет вам в будущем настраивать типы колонок в базе данных.
1) Основы Computer Science. Можно смотреть все, кроме Accembler и C#.
2) Книжка Чарльз Петцольд. "Код. Тайный язык информатики"
Linux
Тут мы с вами должны научиться работать с основной операционной разработчиков. Мы должны разобраться с ОС на базовом уровне, то есть мы должны:
- работать с файловой системой из консоли: читать, создавать файлы и папки, удалять папки, перемещаться по папкам
- уметь установить модуль и использовать пакетные менеджеры
- знать что такое chmod, chgrp
- работать с процессами: посмотреть список, убить процесс, запустить процесс в фоне
- знать что такое демоны и демонизация
- уметь пользоваться grep. Смотреть логи, фильтровать их
- смочь написать простой shell-скрипт
Для чего вам это знать: Linux-образы, в частности Ubuntu, Debian, CentOS и другие дистрибутивы, используются в виртуальных серверах, в Docker-образах. В них нам с вами нужно поднимать свои проекты, создавать папки, удалять файлы и настраивать права доступа.
1) Уроки Linux для начинающих. С#/C++ смотреть не надо.
2) Основы Linux.
3) Введение в Linux.
Основы Python
Только сейчас мы с вами дошли до языка. Это важный блок, и именно тут мы заложим вам основные кирпичики знаний языка программирования.
Для чего вам это знать: без основ языка не получится написать ни одной программы. Иными словами, это база.
1) Мой курс по Python. Ой, это что, интеграция!? Да-да, именно она. По-хорошему стоит пройти вместе с платными DLC (1,2). Полная программа со скидкой в 20% тут: Полный Python-разработчик.
3) Поколение Python": курс для начинающих
5) Python: основы и применение
6) "Поколение Python": курс для продвинутых
6) Книжка: Простой Python. Современный стиль программирования
1) Pythontutor. Тут можно решить все задачи, это поможет вам настроить мозг на лад разработки.
Дополнительная теория, которую нужно знать, если не нашли в курсах:
3) Практика по декораторам: 1, 2
Git
Стандарт де-факто в мире разработки для контроля версий. Проще говоря Git помогает вам сохранять результаты вашей работы, прямо как в компьютерных играх.
Для чего вам это знать: Git – это один из основных, важнейших навыков разработчика. Результат вашей работы за день "коммитится" и "пушится" в удаленный репозиторий. Так же Git помогает вести совместную разработку с другими разработчиками, откатываться с одной версии на другую, переключаться с одной задачи на другую и многое другое.
3) Git за 4 часа
4) Интерактивный тренажер по Git
Python ООП
Объектно-ориентированное программирование позволяет делать наши программы расширяемыми удобными и более понятными.
Для чего вам это знать: ООП активно используется в промышленном программировании. Конструкции из этой парадигмы точно встретятся вам в рабочем коде.
1) Курс о ООП
2) Курс ООП от Сергея Балакирева
Еще предлагаю вам тут познакомиться с модулем typing. Он пригодится вам в будущем.
Конкурентность в Python
Эта тема считается самой сложной в Python. Сложнее уже не будет:) Если осилите это, значит и остальное вам по плечу.
Для чего вам это знать: Если говорить коротко, то все это нужно, чтобы ускорять время выполнения определенных функций. Мультипоточность помогает для IO-bound задач: запрос в интернет, запрос в БД, чтение файла и другие. Мультипроцессорность позволяет ускорять CPU-bound задачи: рендеринг картинок, формирование PDF-отчетов и другие вычисления на процессоре. А асинхронность в целом делает работу API быстрее за счет сокращения времени простоя системы.
1) 3 видео из курса Яндекса: 1, 2, 3
2) 3 статьи о асинхронном программировании: 1, 2, 3
5) Практика по многопоточности и многопроцессорности
6) Еще практика по многопоточности
1) Многопоточный и асинхронный Python
Базы данных
Добрались до уклона в Backend-разработку. Базы данных – это то из-за чего вообще появилась ветка бэкенда. В этом блоке вам нужно выучить что такое реляционные и нереляционные базы данных на конкретных примерах.
Для чего вам это знать: в базах данных хранятся данные пользователей наших сервисов. Они нужны для оптимизации работы с данными и еще систематизации этих данных
Реляционные базы данных
Мы с вами будем учить PostgreSQL. Сейчас это основная БД для Python-разработчка.
1) Интерактивный тренажер по SQL
3) Базовый курс от PostgresPRO
4) Расширенный курс от PostgresPRO
5) Оптимизация запросов PostgresPRO
6) Идем решать задачки на leetcode по SQL
1) LearnDB курс. Качественный курс + учебник с упражнениями по SQL. Доступен по недорогой подписке
1) Практический курс по PostgreSQL
Дополнительная информация, которую спрашивают на собеседованиях:
1) Транзакции
4) select for update, select for share
5) Индексы
7) Шардирование и партицирование
8) Шардинг и репликация за 9 минут
10) Денормализация
Нереляционные базы данных
Нереляционные БД имеют несколько подвидов:
- Документные – MongoDB
- Столбцовые – Cassandra, Clickhouse
- Ключ-значение – Redis
- Графовые – Neo4j, OrientDB
- Хранилища временных рядов – Prometheus
- Объектные хранилища (S3)
- Поисковые БД – ElasticSearch, Sphinx
Знать каждую из них не нужно. Достаточно выучить разные подвиды этих БД, знать что и для чего используется и уметь выбрать нужную БД для своих задач. К тому же PostgreSQL умеет почти все, что умеют все эти БД....
Из этого широкого списка я предлагаю вам познакомиться подробнее с Redis. Эта БД стала стандартом для кеширования в промышленных проектах, поэтому было бы неплохо уметь с ней работать.
1) Какую СУБД выбрать и почему в двух частях: 1 и 2
3) Плейлист о Redis на английском
Тестирование программ
Для чего вам это знать: качество программного обеспечения зависит его тестирования. Тесты помогают поддерживать и разрабатывать долго-живущие проекты, делают разработку удобнее. Может показаться, что тесты должны писать только тестировщики, но на самом деле бекенд-разработчики сами пишут и тестируют свой код.
1) Курс от кавычек. Можно проходить все, кроме планеты смартфонов. Кстати, может показаться удивительным, но фронтенд часто приходится проверять самим бекенд разработчикам, поэтому базовые навыки тестирования фронта нужно иметь.
Алгоритмы и структуры данных
Для чего вам это знать: эта тема будет полезна вам только для собеседований в очень крупные компании. Если вы целитесь туда, то уделите этому блоку достаточно внимания. В работе алгоритмы встречаются крайне редко, возможно только на совсем маленьком количестве позиций.
Чтобы вам было морально легче учить этот блок знайте, что решение задач прокачивает вас как разработчика, формирует нужные и полезные нейронные связи, а от этого ваша нейросеть в голове становится круче.
1) Начните с книжки "Адитья Бхаргава. Грокаем алгоритмы".
2) Дальше идите решать leetcode. Рекомендую решать по этому сборнику. Тут можно выбрать удобную нагрузку для себя. Если задача совсем не получается не стесняйтесь заглядывать в блок discussion. Там обычно есть решения задачек.
3) Мой репозиторий с реализацией и объяснением некоторых алгоритмов на русском
4) Сборник всех алгоритмов на Python
5) Курс лекций Алгоритмы и структуры данных от Тимофея Хирьянова
Сеть и интернет
Для чего вам это знать: базовое понимание того, как устроена сеть поможет вам в освоении последующих тем + спрашивают на собеседованиях.
1) Эта информация есть в моем курсе Python-разработчик. Там же прилинкованы ссылки на другие источники.
2) Информация по REST: 1, 2, 3
HTML & CSS + Jinja2 + Markdown
Для чего вам это знать: бекенд-разработчикам частенько приходится заниматься простой версткой – сделать шаблон проекта, создать шаблон электронного письма, написать документацию к проекту и так далее.
Python Web Frameworks: Django, Flask, FastAPI
Для чего вам это знать: это то, ради чего мы тут все собрались. Фреймворк нужен для создания API. Основное, что делает Backend-разработчик.
Немножко разъяснений, о том почему в этом пункте 3 фреймворка. Если смотреть по рынку, то на нем больше всего вакансий связанных с Django, но я бы не сказал что это самый приятный фреймворк для написания программ. Он просто плотно занял нишу и на нем в свое время написали очень большое число проектов.
Flask можно встретить в средних и крупных компаниях, в частности разработчики с высоким грейдом предпочитают легковесные фреймворки, которые легко конфигурировать. Его недостаток в том, что он синхронный, поэтому постепенно он отходит на второй план.
FastAPI – асинхронный фреймворк и именно на нем сейчас все стараются писать новые проекты. Если глядеть в будущее то нужно брать FastAPI.
Так какой же фреймворк учить? Правильный ответ – вам вообще должно быть не важно на каком фреймворке вы пишете свой код, сказали что команда пишет на Django – значит будем писать на Django. Если смотреть по факту, то фреймворки сильно не отличаются друг от друга. Везде одно и то же – делаешь эндпоинт, делаешь сервисную функцию и готово.
Мой совет – начать к примеру с Django, выучить его на неплохом уровне, написать парочку пет-проектов и только потом разобраться с Flask и FastAPI. Возможно даже не придется, потому что вы найдете работу на Django:)
Учить конечно лучше всего по документации, как минимум Django и FastAPI обладают шикарной документацией. Почему так? Фреймворки довольно быстро развиваются и все материалы по ним очень быстро устаревают, а вот документация нет.
Я предполагаю, что на старте может быть сложно учиться по докуметации, поэтому прилагаю ссылочки.
Для тестирования своих API первым делом поставьте себе Postman. Он позволяет делать запросы к вашему серверу как-будто бы их отправляет браузер, очень полезно в работе и обучении. Небольшое обучающее видео.
Django
Django не существует сам по себе, у него даже концепция "batteries include", что означает наличие множества как внутренних, так и внешних "батареек" (модулей). Вам обязательно нужно изучать фреймворк в связке с DRF. Фронтовая часть Django (все, что касается templates), на мой взгляд, устарела и в вакансиях встречается крайне редко. Поэтому если встретите где-то в теории этот блок, то его можно спокойно пропустить.
1) Видеокурс
1) Курс на степике (со скидкой в 30%)
После получения навыков обязательно отработайте их на практике:
1) Напишите Pet-проект себе или своим друзьям. К примеру телеграм бота.
2) Попробуйте порешать тестовые задания из открытых источников или попросите у ментора полноценное реальное тестовое задание, наверняка они у него есть
3) Посмотрите что предлагают на рынке в качестве тестовых заданий для Python-backend и порешайте эти задания. Они тоже помогут вам прокачать навыки.
Flask
Flask – это уже фреймворк без батареек. Внутри ничего нет, ни структуры проекта, ни ORM, ни миграций. Все нужно ставить самому.
Обычно этот фреймворк используют в связке с SQLAlchemy и Alembic.
1) Видеокурс
FastAPI
FastAPI так же нуждается в дополнительных либах. Все они есть в документации. Рекомендую так же использовать SQLAlchemy (асинхронную).
2) Видеокурс
WSGI & ASGI
Начинается DevOps часть нашего роадмапа.
Для чего вам это знать: wsgi/asgi сервера используются для наших API, написанных на разных фреймворках. С ними придется столкнуться при деплое своего проекта на боевой сервер.
В этой теме нужно разобраться со следующими технологиями:
Как сейчас могут быть задеплоены проекты: есть машина, либо физическая, либо виртуальный сервер, купленный у хостинга. На него устанавливается сервер nginx, в который будет входить весь траффик на этот сервер. Сам nginx по сути будет являться гейтвеем в ваши сервисы, которые вы на этом сервере запустите. Ваше приложение поднято через uWSGI или Gunicorn в нескольких экземплярах (воркерах). Этот вариант деплоя используется если у компании нет желания/ресурсов/потребности в своем кубернетес кластере.
На этом шаге предлагаю вам узнать что такое uwsgi, gunicorn, uvicorn и nginx и попробовать поднять свой проект с несколькими воркерами. К Nginx вернемся на ручном деплое.
1) Статья зачем нужен Gunicorn
2) Python wsgi
Docker + Docker-compose
Для чего вам это знать: технология контейнеризации очень удобна для быстрой настройки и деплоя своих приложений на разных средах. Docker сейчас используется абсолютно везде.
0) Как и для чего использовать Docker?
Брокеры сообщений: RabbitMQ/Kafka
Для чего вам это знать: брокеры сообщений часто используются в нагруженных API. Базовые знания о них требуются на собеседованиях и работе.
Вам не обязательно глубоко знать внутреннее устройство брокеров, достаточно понимать что это такое, в чем отличия между rabbitmq и kafka, и где нужно их применять. Уже на работе вы отточите навыки работы с ними.
Ручной и автоматизированный деплой приложений: Gitlab CI/CD
Для чего вам это знать: сейчас все написанные нами API хостятся на виртуальных серверах. Мы должны уметь донести наш код до виртуального сервера и запустить его в работу.
1) Деплой Django & Gunicorn & Nginx
Kubernetes base
Для чего вам это знать: может показаться что этим должны заниматься только DevOps инженеры, однако бекед разработчикам тоже приходится лезть в конфигурацию кубера. Как минимум чтобы отрегулировать ресурсы сервера или добавить новый воркер в кластер. Плюсом сюда – часто приходится использовать kubectl для просмотра реалтайм логов наших приложений.
2) Разворачиваем приложение в кубере
Архитектура ПО
Это самый бездонный и эфемерный блок в этом роадмапе. Постарался оставить только самое понятное и часто встречающееся.
Для чего вам это знать: знания об архитектуре помогают в проектировании кода. Как минимум если вы знаете определенный паттерн, то когда вы увидите его в коде, то будет намного проще понять что происходит. Еще часто бывает так, что задачи по архитектуре шарятся между членами команды, и вам придется проектировать свое решение и защищать его. Если оно будет построено на определенном базисе, то сделать это будет намного проще.
Я примерно разделил архитектуру на 3 больших блока:
1) Паттерны проектирования – какие-то локальные места в коде
2) Архитектура сервиса – архитектура всего вашего проекта
3) Микросервисная архитектура – архитектура группы ваших сервисов
Паттерны проектирования
1) Refactoring guru и книга А. Швеца "Погружение в паттерны проектирования"
2) Классика – Чистый код Роберта Мартина
Архитектура сервиса
1) Книга «Паттерны разработки на Python: TDD, DDD и событийно-ориентированная архитектура»
2) Классика – Чистая архитектура Роберта Мартина
3) Устаревшая архитектура MVC, нужно знать т.к. до сих пор спрашивают на собесах.
Микросервисная архитектура
3) 26 основных паттернов микросервисной архитектуры
5) Микросервисы vs монолит vs serverless
6) Паттерны отказоустойчивости
Логирование
Для чего вам это знать: когда ваши приложения задеплоены и работают, они постоянно генерируют текстовые логи о своей работе. Нужно знать как грамотно организовать логирование, так как оно поможет вам в случае возникновения багов и ошибок.
2) loguru
Сбор и мониторинг метрик
Для чего вам это знать: в процессе работы приложения могут случаться различные события, на которые важно оперативно реагировать:
- пришло много пользователей в сервис и сильно выросла нагрузка
- используемая память дошла до верхних границ
- ресурсы процессора заполнены почти на максимум
Если вовремя не предпринять действия в этих ситуациях, то приложение может упасть или зависнуть. Это создаст проблемы бизнесу, которые мы не хотели бы допускать.
Стандарт в мониторинге это Prometheus + Grafana. Есть и другие решения, но в основном используются именно эти.
2) Prometheus + Grafana + Python + Docker
3) Мониторинг FastAPI приложения
Мониторинг ошибок
Для чего вам это знать: правильный мониторинг ошибок в сервисах позволяет на них оперативно реагировать. Классно когда реакция на проблему у разработчика происходит быстрее, чем у пользователей.
1) Sentry
2) Интегрируем Sentry в Python за 60 секунд
Софт-скиллы и работа в команде
Для чего вам это знать: внутреннее устройство команды и знание процессов позволит вам не потеряться когда начнете. Софт скиллы же в свою очередь влияют на ваше устройство в большей степени чем технические навыки.
3) Курс про разработку ПО. Тут не будет кода, но это не делает курс менее интересным.
4) Kanban
5) Scrum
7) Код-ревью
Выход на рынок
Поздравляю, вы добрались до выхода на рынок! Тут важно отработать полный цикл вашего поиска работы, каждый шаг должен быть отточен: резюме -> отклик -> собеседование -> торги.
Для чего вам это знать: от навыков самопрезентации зависит вероятность приглашения вас в именно ту компанию, в которую вы хотите. Классно если каждый из шагов озвученных выше отработан вами на максимум.
Если вы ощущаете, что какой-то из этапов вам дается психологически тяжело или что-то не получается, даже после прочтения всех ссылок, то обратитесь к ментору.
1) Полезные материалы по устройству на работу
2) Цикл статей про продажу себя
3) Вопросы для подготовки к Python Developer интервью
6) Собеседования Python (Junior)
7) Собеседования Python (Middle/Senior)
8) Мок-собеседование Django-разработчика
Альтернативные роадмапы
Будет полезно если вы посмотрите, что предлагают изучать другие люди. Классно, когда вы используете в обучении несколько источников правды.
2) https://takentui.notion.site/Roadmap-Python-Developer-a9636b2702544fde84dc0c71d38a731b
3) https://telegra.ph/Python-Backend-Roadmap-11-29
4) https://tropical-tabletop-df5.notion.site/Roadmap-timeline-98fe6649d3be41a78a3bb20fd3cd9a32