Дорожная карта по становлению Python Backend разработчиком. Перед началом прочтения рекомендую посмотреть это видео.

Основы Computer Science

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

CS50 — курс Гарвардского университета о компьютерных технологиях. Курс читается на английском языке. Если вы не дружите с английским, для вас есть перевод на русском языке. К сожалению, перевод охватывает старую версию курса за 2016 год, однако он всё равно подойдёт для начинающих.

Что вы узнаете, прослушав этот курс:

  • Основы компьютерных наук и программирования;
  • Концепции алгоритмов и алгоритмичности мышления. Какие задачи можно решать с помощью программирования и каким образом;
  • Концепции абстракции, структуры данных, инкапсуляции, управления памятью. Основы компьютерной безопасности. Процесс разработки ПО и веб-разработка;
  • Основы языка программирования C и Scratch;
  • Основы баз данных и SQL;
  • Веб-разработка: основы CSS, HTML, JavaScript и PHP;
  • Основы подготовки презентации проектов по программированию.

Курс CS50 меняется каждый год. Актуальные лекции можно найти на официальном канале CS50 на английском языке.

Плейлисты с лекциями за 2020-2022 года:

Что почитать

  • Теоретический минимум по Computer Science. Все что нужно программисту и разработчику | Фило Владстон Феррейра

Python

Основы

  • Базовый синтаксис
  • Переменные и типы данных
  • Циклы и условные операторы
  • Булева алебра, логические операторы
  • Строки и форматирование
  • Списки, кортежи, словари, множества
  • Индексы и срезы
  • Функции, встроенные функции
  • Работа с файлами
  • Обработка ошибок и исключений
  • Виртуальное окружение
  • Менеджер пакетов pip

Курсы и туториалы

Что почитать

  • Изучаем Python: программирование игр, визуализация данных, веб-приложения. 3-е изд. | Мэтиз Эрик

Продвинутый уровень

  • ООП
    • Классы и объекты
    • Атрибуты и методы
    • Инкапсуляция, наследование, полиморфизм, абстракция
    • SOLID
  • Рекурсия
  • Лямбда функции
  • Позиционные и именованные аргументы функций (args, kwargs). * и / в сигнатуре функций.
  • Контекстные менеджеры
  • Итераторы и генераторы
  • Генераторы списков и словарей
  • Декораторы
  • Распаковка, упаковка через * и **
  • Поверхностное и глубокое копирование объектов
  • Регулярные выражения
  • Логирование
  • Функции map(), filter(), reduce()
  • Правила оформления кода: PEP 8

Курсы и туториалы

Что почитать

  • Python. Чистый код для продолжающих | Эл Свейгарт
  • Изучаем Python. Том 1-2. 5-е изд. | Марк Лутц

Углублённый уровень

  • Внутреннее устройство CPython
    • GIL
    • GC (garbage collector)
  • Библиотеки collections, functools, itertools
  • Интерфейсы, протоколы и ABC
  • Магические (dunder) методы
  • Конкурентность в Python
    • Многопоточность
    • Многопроцессорность
  • Асинхронность, asyncio, aiohttp
  • Метаклассы
  • Дескрипторы
  • Аннотации типов
  • Замыкания
  • dataclasses
  • classmethod/staticmethod
  • Тестирование
    • unittest
    • pytest
    • doctest

Курсы и туториалы

Что почитать


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

  • Базовые структуры
    • Ассоциативный массив
    • Стек (LIFO)
    • Очередь (FIFO)
    • Двусвязная очередь
    • Связный список
    • Линейный однонаправленный список
    • Двусвязный список (двунаправленный связный список)
    • Кольцевой связный список
  • Массивы
  • Хэш-таблицы
    • Хеш функция
    • Методы разрешения колизий
      • Метод цепочек
      • Последовательность проб
  • Деревья
    • Бинарное дерево поиска
    • Красно-чёрное дерево
    • Куча
    • B-дерево (а также B+‍‍, B*)
    • LSM Дерево
    • R-дерево
    • АВЛ дерево
    • Поворот дерева
  • Графы
    • Поиск в глубину
    • Поиск в ширину
    • Алгоритм Дейкстры
  • Алгоритмы сортировки
  • Алгоритмы поиска
  • Алгоритмы хеширования

Для прокачки алгоритмов регистрируемся на CodeWars и LeetCode, решаем по одной задаче на каждой из платформ ежедневно, как минимум.

Курсы и туториалы:

Что почитать

  • Теория по алгоритмам и структурам данных
  • Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих | Бхаргава Адитья
  • Алгоритмы. Руководство по разработке. 3-е изд. | Стивен Скиена
  • Алгоритмы. Построение и анализ | Клиффорд Штайн, Рональд Ривест

Сеть

  • HTTP
    • Разница между HTTP и HTTPS
    • Типы HTTP запросов
    • Статус коды
    • Поля и заголовки HTTP запросов
  • Порты
  • Cookies
  • SSL/TLS
  • DNS
  • IP: IPv4 и IPv6
  • Сетевые протоколы
    • OSI
    • TCP и UDP
    • TCP/IP
    • FTP, SMPT, POP3, IMAP
  • WebSockets
  • Reverse proxy

Что почитать


Базы данных

  • Нормальные формы, нормализация и денормализация БД
  • Ключи: первичные, внешние, составные
  • Функции, представления, процедуры
  • Индексы
  • Оконные функции
  • Транзакции
  • Базовый синтаксис SQL: SELECT, UPDATE, INSERT, DELETE
  • Объединение таблиц и агрегаторные функции: JOIN, HAVING, GROUP BY
  • ACID
  • Репликация и шардинг
  • Работа с PostgreSQL и SQLite в Python с помощью библиотек psycopg2 или sqlite3
  • Инструменты администрирования: pgAdmin или SQLiteStudio

СУБД

  • SQL:

    • SQLite
    • PostgreSQL
    • MySQL
  • NoSQL:

    • Redis
    • Memcached
    • Tarantool
    • MongoDB

Курсы и туториалы

Что почитать


HTML/CSS/Bootstrap

Все бэкендеры должны знать хотя бы азы фронтенд технологий. HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) — база, позволяющая оформлять веб-страницы. Вы должны уметь минимально верстать страницы. Нет, вы не должны делать это профессионально, но вы должны знать о семантической разметке, о настройке шрифтов, местоположений блоков на странице, margins и paddings, уметь использовать flex-боксы, флоаты, таблицы и т.д. Кстати, про адаптивную верстку тоже хорошо бы знать и уметь.

Курсы и туториалы

Что почитать


Django

  • Создание проекта и приложений
  • Модели
  • Миграции
  • ORM
  • Роуты (Urls)
  • Views (FBV и CBV)
  • Templates
  • Django Admin
  • Static files
  • Формы (Model Forms)
  • Сигналы
  • Middleware
  • Кэширование
  • Контекстные менеджеры
  • Авторизация и аутентификация
  • User model: roles, permissions
  • Сессии
  • Management команды
  • OAuth
  • Тестирование в Django

Проекты для изучения Django на практике

  • To Do App Одно из самых простых приложений для знакомства с Django. Вы научитесь настраивать приложение, работать с базой данных, выполнять базовые CRUD-операции. Попробуйте сделать приложение дважды: с использованием function based views (FBV) и class based views (CBV).
  • Интернет-магазин Вместе с основами CRUD и аутентификацией, которые нужны большинству интернет-магазинов, вы изучите более сложные отношения между сущностями базы данных. Добавьте также поиск, пагинацию и роли пользователей к вашему магазину.
  • Социальная сеть Проект для тренировки проектирования базы данных. Подумайте, как вы реализуете функции "друзья" или "подписки". Как насчет лайков и определения того, какой пост увидит пользователь в своей ленте?
  • Личный блог Создайте собственный блог, в котором, например, будете делиться этапами изчения Python и Django. Начните с базовых CRUD-операций для добавления и редактирования постов блога. Научитесь работать с авторизацией и аутентификацией пользователей. Расширьте функциональность приложения, добавив комментарии, подписки на авторов. Сделайте поиск и пагинацию, чтобы обеспечить удобный интерфейс для пользователей.

Курсы и туториалы

Что почитать


DRF - Django REST Framework

  • Сериалайзеры
  • Авторизация: токены, OAuth2
  • View функции и классы
  • Viewsets
  • Роутеры
  • Rate Limiting
  • CORS

Курсы и туториалы

Что почитать


Больше веб фреймворков

Django — не единственный питоновский веб-фреймворк, но он — мейнстрим. Если знать только что-то одно, то это Django (ну и Django REST Framework как-никак). Помимо Django есть другие фреймворки, например:

  • Flask
  • FastAPI
  • aiohttp
  • Sanic
  • Quart
  • Tornado
  • Pyramind

Все их учить не надо, но знать о существовании стоит. Если вы хотите стать супер-пупер крутым разработчиком, познакомтесь с Flask и FastAPI. Это два микрофреймворка, маленькие и простые, изучить их несложно. Сделайте парочку pet-проектов на них, будет вам плюсом в портфолио и резюме. FastAPI, кстати, с каждым днём становится всё более и более популярным, так что не обходите его стороной.


JavaScript

Пусть вы и бэкенд разработчик, вы должны знать хотя бы азы JavaScript, от вас не требуется глубокого понимания языка. Надо знать нативный JavaScript и JavaScript API браузера. Document.querySelector, работа с CSS стилями из JavaScript, переменные, циклы, функции, работа с AJAX запросами, модель асинхронности JavaScript. Если знаете еще какой-то JS фреймворк (React или Vue), будете вообще красавчиком.

Курсы и туториалы

Что почитать


Linux

Если вы бэкенд разработчик, вы должны знать Linux. Что значит знать Linux? Это значит, что вы можете решать все свои рабочие вопросы в терминале, вам должно быть комфортно работать в консоли. Вы можете использовать терминальные команды и утилиты, такие как cat, less, head/tail, grep и ripgrep, awk, xargs, htop, git и прочие. Если вы бэкендер, то линукс это ваша среда, на которой будет работать ваш код, вы должны быть с ней на ТЫ.

Вы должны уметь полностью настроить для себя сервер. Установка и конфигурация nginx, gunicorn/uwsgi, django, celery, postgresql, redis — всё это не должно быть для вас проблемой.

Курсы и туториалы

Что почитать


Инфрастуктура и деплой

  • Docker + Docker Compose
  • Kubernetes
  • Ansible
  • CI/CD инструменты и пайплайны
  • Хостинги: AWS, Microsoft Azure, Google Cloud, YandexCloud, Selectel

Курсы и туториалы

Что почитать


Дополнительные технологии

  • Git
  • ORM: SQLAlchemy, Tortoise
  • Alembic
  • NGINX
  • WSGI/ASGI
  • Gunicorn/Uvicorn
  • Celery
  • RabbitMQ
  • Kafka

Курсы и туториалы


Side навыки

  • Паттерны программирования
  • Архитектурные паттерны: REST, RESTful, SOAP, RPC, GraphQL
  • Процессы разработки
  • Понимание бизнес-логики
  • Умение писать чистый, читаемый, поддерживаемый код:
    • Соблюдение конвенций стиля написания кода
    • Грамотный нейминг
    • YAGNI: You Aren’t Gonna Need It
    • DRY: Don’t Repeat Yourself
    • KISS: Keep It Simple, Stupid
    • GRASP: General Responsibility Assignment Software Patterns
    • SOLID
      • S: Single-responsibility principle
      • O: Open–closed principle
      • L: Liskov substitution principle
      • I: Interface segregation principle
      • D: Dependency inversion principle
  • Основы информационной безопасности:
    • SQL-инъекции
    • XSS
    • CSRF

Что почитать

  • Чистый код: создание, анализ и рефакторинг | Роберт Мартин
  • Совершенный код | Стив Макконнелл
  • Рефакторинг. Улучшение проекта существующего кода | Мартин Фаулер
  • Чистая архитектура. Искусство разработки программного обеспечения | Роберт Мартин
  • Паттерны разработки на Python: TDD, DDD и событийно-ориентированная архитектура | Персиваль Гарри, Грегори Боб
  • Высоконагруженные приложения. Программирование, масштабирование, поддержка | Клеппман Мартин
  • System Design. Подготовка к сложному интервью | Алекс Сюй
  • Чистый Agile. Основы гибкости | Роберт Мартин
  • Идеальный программист. Как стать профессионалом разработки ПО | Роберт Мартин
  • Идеальная работа. Программирование без прикрас | Роберт Мартин
  • System design primer
  • Арихтектура ПО
  • Информационная безопасность

Soft skills

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

Английский язык и умение гуглить

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

Умение гуглить — ещё один необходимый программисту навык. Умение гуглить позволяет вам самостоятельно и быстро находить ответы на любые свои вопросы в сети, это способность к быстрому и эффктивному самообучению, что критично важно. Можно пол дня пытаться обойти какую-то проблему, а можно за 5 минут, правильно сформулировав вопрос к Google, найти 3 решения, разобраться с ними и найти лучшее. Поэтому да, английский и умение гуглить (на английском языке тоже) это очень важно.

Pet-проекты

Отсутствие опыта — проблема всех начинающих разработчиков. Для устройства на работу нужен опыт, а без работы этот опыт не получить — замкнутый круг. Pet-проекты могут помочь набраться опыта. Сделайте 3-5 нестыдных production ready проектов и добавьте их в своё резюме. Принимайте участие в проектах с открытым исходным кодом.

Полезные ссылки