Information Technology (IT)
January 6

Дорожная карта бэкенда Python.

Картинка сгенерена нейруйхой. Не ругайтесь на "developmer", она ещё учится. И кружку на пол не ставьте — обязательно прольёте.

Этот роадмап доведёт вас из состояния «ничего не знаю» до «могу пройти собеседование на джуниора». Все ссылки внутри на бесплатные (или недорогие) ресурсы. В интернете вы можете встретить кучу роадмапов, но у этого есть одно преимущество: из него убрано то, что не надо изучать новичку. Например, так называемая «база программирования». Она важна, но изучать её нужно после того, как вы завершили испыталку на первой работе.

Ссылки, используемые в курсе:
1. Онлайн-интерпретатор: https://www.online-python.com/
2. Установка Python на компьютер: https://www.python.org/downloads/
3. PyCharm Community Edition: https://www.jetbrains.com/pycharm/download/
4. Репозиторий с кодом курса: https://github.com/jjoskey/python_beginners_course
5. Документация к открытому API Binance: https://binance-docs.github.io/apidocs/spot/en/#symbol-price-ticker
6. Visual Crossing, бесплатный API погоды: https://www.visualcrossing.com/weather-api
7. JSON Formatter: https://jsonformatter.curiousconcept.com/
8. Официальный бот от Telegram для регистрации других ботов: https://t.me/BotFather

Чуток про автора

Меня зовут Саша, разработчик с 2018 года. Писал на Python и Golang. Сейчас живу и работаю на Кипре. Первый код написал в 30 лет, до этого был предпринимателем и диджитал-маркетологом. В России успел поработать программистом в Ozon, Точке, ПИК-Digital. А ещё я на полставочки блогер: в основном здесь и здесь. Я сам стал разрабом достаточно недавно, и предание до сих пор свежо: многие ресурсы, перечисленные ниже, я сам использовал в своём обучении.

Как учиться

  • Поставьте цель. Идеально, если цель будет звучать так: «найти первую работу». Не «научиться программировать», не «стать востребованным разработчиком» — такие цели размыты, их не достигнуть, а это фрустрирует. После того как на первой работе вы проведёте от полугода до года, начнётся то, что обещают в рекламе курсов: «востребованная профессия», «высокая зарплата», «удалённая работа» и так далее. Но до этого момента жизнь совсем не будет мёдом, поэтому дойти до первой работы, а затем закрепиться на ней — главное, что нужно сделать.
  • Пишите код. Ваш уровень программирования измеряется количеством кода, который вы написали, а не количеством прочитанных книг или просмотренных видео. Теорию нужно добирать только тогда, когда практика не даёт быстрого роста.
  • Занимайтесь регулярно. Помните, что вы бежите марафон. Можно начать с пары часов сосредоточенного обучения в день, но делать это регулярно. Это будет полезнее, чем потратить 10 часов в один из выходных, а после — неделю ничего не делать.
  • Не стесняйтесь повторять. Если что-то из нижеизложенного непонятно, стоит поискать другие источники. Просто погуглив. Зачастую полное понимание приходит после просмотра 3-4 взглядов с разных сторон на одну и ту же тему. Ссылки, которые здесь даны, — отправная точка, дальнейшие источники нужно будет искать самому, если тема не поддаётся.
  • Не пасуйте перед трудностями. В начале объём знаний для изучения будет напоминать бескрайний океан. Если честно, это и есть бескрайний океан. Но чем дальше в нём продвигаться, тем легче становится. И помните главное — чем лучше у вас получается что-то, тем больше вам нравится этим заниматься. Это работает и с программированием.

В каком порядке всё это учить

  • Начинаем с синтаксиса Python. Проходим два-три разных курса подряд. Ну, и не забываем о библиотеках.
  • После того как первый курс пройден, подключаем алгоритмы. В зависимости от темпа обучения хорошо решать 3-5 задач в неделю. И английский — пару часов в неделю. Тогда же можно начинать выстраивать контекст вокруг программирования. И одним глазком начинать поглядывать в списки вопросов с собеседований.
  • Базовый синтаксис Python'а усвоен — учим Django.
  • Дальше — базы.
  • Учимся писать код быстрее.
  • На этом этапе можно подключать пет-проекты. И не забываем использовать Copilot.

На пет-проектах будут нужны ещё три навыка:

И в конце:

  • Пет-проекты — хорошая возможность попробовать сервисы из этого списка.
  • И желательно на пет-проектах писать тесты.

Python

Изучение начинаем с Python. Последовательно проходим несколько курсов для начинающих. Синтаксис на первых порах — это самое главное.

Основы

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

  • Конечно же, курс, который написал ваш покорный слуга.
  • Бесплатные курсы на Stepik: «Поколение Python» и «Программирование на Python».
  • Любой ещё один курс на YouTube. Лучше на английском. Например, этот. Если курс на английском будет третьим или четвёртым в вашем списке, то он хорошо зайдёт. Включите субтитры и просто начните смотреть, главное — сломать в себе страх потреблять англоязычный контент.
  • «Полный Курс Python 3: от Новичка до Мастера». Он платный, но на udemy постоянно проходят распродажи, я в своё время купил его за 1000 руб. Udemy, правда, не принимает оплату из России, но, кажется, VPN и иностранная карта решают эту проблему.
  • Документация. Советую ходить туда и использовать её как источник, когда что-то непонятно. Учитесь работать с первоисточником.
Библиотеки

Что значит «изучить» библиотеку? Это значит, что при возникновении какой-то проблемы, вы знаете, в какую сторону гуглить. Наизусть ничего учить не надо — главное понимать, что подключать в проект, чтобы не писать собственных велосипедов. Вот список встроенных и устанавливаемых библиотек, которые используются в Python чаще всего:

  • os
  • requests
  • random
  • itertools
  • urllib
  • json
  • datetime
  • sys

Алгоритмы и LeetCode

Кто-то может сказать, что алгоритмы не нужны новичкам. В этом есть доля правды: начинающие редко пишут высоконагруженные сервисы, где алгоритмы действительно необходимы. Но, по-моему, ничто не учит писать код лучше, чем алгоритмы. Прежде чем решать задачи, хорошо бы прочитать одну небольшую книжку: Адитья Бхаргава «Грокаем Алгоритмы». После прочтения идём на LeetCode и подряд решаем задачи уровня Easy. Предлагаю решать по одной задаче в день.

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

Веб-фреймворки

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

Хорошо изучить:

  • Django. Собственно, это единственный фреймворк в списке, который надо знать хорошо. Кусочки Django используются, наверно, в большинстве глобальных продуктов, которыми вы пользуетесь. Я рекомендую делать на Django пет-проекты и тестовые задания (если конкретный фреймворк не указан). Учить Django можно вот по этому курсу. В связке с Django используется библиотека «Django REST Framework», она отвечает за сериализацию данных, пагинацию и кучу всего. Видео по работе DRF и документация. И очень важно: можно проигнорировать всю фронтовую часть у Django, то есть рендеринг темплейтов. Темплейты встречаются всё реже в проектах. Фронтенд пишется на других инструментах.

Следующие веб-фреймворки надо верхнеуровнево знать. Что это значит? Если фреймворки не используются в компаниях, куда вы хотите попасть, то просто поверхностно гуглим их особенности. Они обычно перечислены на первой странице документации. После усвоения Django новые фреймворки изучаются достаточно легко — так что лучше сосредоточиться именно на Django. Вот список веб-фреймворков для верхнеуровневого изучения:

Базы данных

Базы данных (БД) — это бездонная тема.

  • Начинаем с нормализации данных, нормализация — это принципы создания схемы данных, вот хорошая статья с Хабра.

Дальше учим запросы двух типов:

  • DDL (Data Definition Language) — с помощью этих запросов создаётся структура базы и таблицы, советую просто знать, что это, и посмотреть синтаксис. Как правило, в начале вы будете работать в проектах, где база либо создана, либо структура создаётся с помощью фреймворков. Нужно знать, как запросы выглядят, что делают и чем отличаются от других. Вот статья, какие запросы к базе данных бывают, там в том числе написано про DDL.
  • DML (Data Manipulation Language). Именно с помощью этого типа делаются выборки данных из базы. Это самый распространённый тип запросов к БД. После этого мини-курса нужно идти в тренажёр sqlzoo.

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

  • Производительность базы данных — это первое узкое горлышко, в которое упирается любое приложение. Ускорить базу данных позволяют индексы. Нужно понимать, как они работают, желательно под капотом (здесь поможет знание алгоритмов). Статьи вот и вот.
  • Требования ACID к БД. Статья тут.
  • Транзакции. Это обвязка для набора операций к БД, которые либо исполняются полностью, либо полностью отменяются. Без этого многие вещи, к которым мы привыкли, были бы невозможны, например, платежи через интернет. Хорошая статья.
  • Уровни изоляции транзакций. Атомарность операций и производительность — два параметра, которые конфликтуют друг с другом. Уровень изоляции транзакций — это настройка базы данных. Нужно знать, как она работает под капотом, чтобы выбирать подходящее решение для каждого проекта. Читаем.

Английский

Есть стереотипная шутка, которая, если честно, вообще не отражает суть.

— Какой язык программирования учить?

— Учи английский.

Как будто без английского нельзя начать программировать. Это не так. На русском языке есть множество материалов на первые 3-6 месяцев обучения. А вот дальше без английского будет сложно: решения большинства проблем просто не гуглятся на русском, но прекрасно гуглятся на английском. А гуглить — это 80% работы программиста. То есть у вас есть примерно 3-6 месяцев, чтобы выучить английский перед тем, как вы начнёте систематически сталкиваться с трудностями. Но что значит «выучить»? Не надо вести диспут с оксфордским профессором философии про «Критику чистого разума». Надо уметь читать техническую документацию. Это скуднейший язык из примерно тысячи слов. Даже не надо знать, как произносить их, хотя неплохо бы. Я встречал крутых разрабов, которые слово "queue" (очередь, читается как «кью») произносили «куеуе», а дальше устраивались в международные компании.

Что я советую:

  • установить в браузер расширение Google Translate, оно поможет на первых порах быстрее смотреть в словарь;
  • параллельно учить грамматику, вот хороший плейлист из уроков;
  • устанавливаем приложение с карточками слов, чтобы расширять свой словарный запас (их тысячи, выбирайте любое);
  • ну, и хороший источник технического английского — нейминг переменных: лучше выбирать осмысленные названия для переменных со словариком и обращать внимание на название функций/классов из импортируемых библиотек;

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

Подготовка к собеседованиям

Никогда не рано начать готовиться к собеседованиям. Первая работа — это цель, и надо начинать делать шаги к её достижению сразу, как началось обучение. Запросы «вопросы python собеседование» и «вопросы собеседование бэкенд» должны стать самыми частыми в google. В выдаче к этим запросам будет множество списков из вопросов. Если отфильтровать вопросы на уникальность, то останется около 50 штук. Интервьюеры, кстати, берут вопросы в этих же списках. И чем лучше вы подготовитесь, тем выше шанс получить заветную работу.

Не пожалейте времени, и посмотрите вот этот 4-часовой стрим про процесс собеседования на программиста. Он сильно ускорит развитие вашей карьеры и заложит майндсет, с которым вы будете ходить на собеседования (а их в вашей жизни будет немало).

Ускоряем работу с кодом

  • Ставим PyCharm. Желательно, Professional Edition, но можно и Community Edition. Лучшая IDE на рынке.
  • Осваиваем 10-пальцевую слепую печать. Тренажёров в интернете — уйма.
  • Учим шорткаты в IDE. Если пользуетесь PyCharm, стартовое видео здесь. Как только усвоили эти и начали применять их в работе, можно искать новые. Шорткатов много не бывает.

Нейрухи

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

  • ChatGPT. Чат надо внедрять почти сразу, как вы изучили азы. Во-первых, к нему вы можете обращаться, как к ментору: «объясни, что исполняется в этом сниппете кода строка за строкой». Во-вторых, вы будете застревать на некоторых моментах и даже не будете знать, как сформулировать вопрос для гугла, — и вот тут чатгпт сильно поможет.
  • Copilot. Ставится сразу же, как вы начинаете писать pet-проекты или делать тестовые задания. В отличие от ChatGPT, Copilot работает в IDE. Стоит $10 баксов в месяц, но это самая лучшая инвестиция.
95 девелоперам дали одно и то же задание. Те, кто использовал Copilot, справились в 78% случаев против 70%, кто не использовал. А по времени разница составила больше двух раз.

Пет-проекты

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

У меня был знакомый, который был пиарщиком федерации по хоккею на траве. Им нужен был сервис с fantasy-лигой. Платили небольшие деньги, но это реальные требования, реальные пользователи, реальные баги. Это лучше, чем писать тудулист в вакууме. Но, к слову, писать тудулист лучше, чем не писать ничего.

Скриншот из моего первого проекта за деньги. На нём я сразу попробовал и фронтенд, и бэкенд. Бэкенд зашёл мне больше.

Если найти реального заказчика не получается, подумайте над сервисом, который нужен вам. Например, вы скармливаете телеграм-боту фото чеков, он парсит позиции в нём и раскидывает по категориям трат. Или что-то подобное. Реализуя такую штуку, вы столкнётесь с проблемами, которых нет в обучении. Обучение — симулякр программирования, а пет-проект — это первый спуск в шахту.

Если такой идеи не приходит в голову, ничего страшного: решайте тестовые задания, которые могут дать при трудоустройстве. Тестовые задания — это упрощённые пет-проекты. Неплохо бы набить руку. На ютубе их буквально тысячи:

  • вот тестовое с сервисом анонимных записок;
  • вот перегонка текста из PDF в mp3;
  • или вот, сразу три полезных сервиса в коротком видео;

Тестовые складывайте в свой github — они пригодятся при первом трудоустройстве.

Git

Git — это система контроля версий. Кодовая база любого проекта чаще всего хранится в удалённом репозитории, а писать код в неё могут сразу несколько человек. Чтобы управлять этим, и нужен Git. У Git'a десятки команд, но чаще всего используется всего 5-6. Советую посмотреть два видео: вот и вот.

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

Терминал

Это чёрная строка, с помощью которой программист использует Git, запускает команды, подключается к удалённым машинам и так далее. Тема обширная — я в своё время закрыл всё одним курсом "Bash Shell Scripting: From Zero To Automation" c Udemy, что и советую. Кое-какие материалы есть на YouTube по запросу «терминал для новичков».

Docker

Это платформа для контейнерной виртуализации. Docker и бэкенд — это как Бэтмен и Робин.

  • хороший курс от Богдана Стащука;
  • и ещё один от Владилена Минина.

А книги?

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

1. Большие теоретические книги, типа Кнута «Искусство программирования». Эти книги можно назвать библиями программирования, но для новичка они будут слишком непонятными. И, скорее, отвернут начинающего от программирования, потому что они написаны языком, который будет понятен профессиональному программисту, но не среднестатистическому свитчеру. Кстати, книги — это очень хороший маркер, по которому вы можете отсекать советчиков. Если кто-то рекомендует в текущей ситуации изучать программирование сугубо по книгам и советует начать с чего-то по забористее, типа «Компьютерных сетей» Таненбаума, то знайте — перед вами человек, советы которого можно пропустить мимо ушей. Таненбаума, безусловно, стоит почитать, но позже.

2. Книги про конкретные технологии. Проблема с ними в том, что технологии быстро меняются, а написание книги от задумки до тиража — это минимум года три. Я хотел посоветовать, например, книгу «Two Scoops of Django», но самое последнее издание датировано аж 2014 годом. А Django с тех пор изменился очень сильно.

Тестирование

Зачем пишутся тесты? Тесты — это код, который помогает убедиться в том, что исходная программа работает нормально. В Python чаще всего используют pytest —это фреймворк для написания тестов. Есть ещё встроенный unittest, но из него используется только несколько классов. В основном, учить надо pytest. Если вы напишите тесты к тестовому заданию (здесь тавтология уместна), то это будет жирным плюсом. Как учить:

  • вот эта серия видосов;
  • книжка "Python Testing with pytest", Brian Okken, сам читал, одна из моих любимых технических книг.

И ещё немного сервисов и технологий

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

  • Celery. Это система для исполнения асинхронных задач. Это те задачи, которые не требуют мгновенного ответа пользователю или исполняются по расписанию. Классический пример таких задач — отправка e-mail'ов. Когда используется фреймворк Django, то Celery почти всегда является компонентом приложения. Вот видео, где с помощью Celery + Django + Docker реализуется проект по скачиванию картинок из интернета. Ну, и дока — это наше всё.
  • Redis. Это кэш-хранилище. Оно используется вместе с Django. Кэш обычно используется, чтобы уменьшить время ответа бэкенда. Вот статья с Хабра, как устроены системы кэширования в сервисах. Ну, и неплохо бы попробовать развернуть инстанс Redis'а через Docker и популять туда запросы через консоль.
  • RabbitMQ. Это message broker, сервис, который управляет очередями. Он чаще всего используется в связке с Celery. Особое внимание нужно уделить правилам роутинга. Вот видео с основами.
  • Postman. Это полезная утилита, чтобы делать запросы к разным ресурсам. Вообще, её используют тестировщики, но для бэкендера эта утилита тоже полезна. Вот серия видео по теме.
  • Swagger. Это набор инструментов, который позволяет автоматически описывать API на основе его кода. С помощью Сваггера генерируется автодокументация. Когда будете устраиваться на работу и выполнять тестовые задания, то обязательно сгенерируйте автодокументацию к своему проекту с помощью drf-spectacular. Работодатели понимают, что такие кандидаты на дороге не валяются.

Контекст вокруг программирования

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

  • Смотреть околоайти контент. Благо, контента в русскоязычном сегменте достаточно много. Начни с этого рассказа свежеиспечённого программиста о том, как он им стал и с какими трудностями столкнулся. И вот тут, чувак из деревни рассказывает, как устраивается в Uber в Амстердам. А вообще, русскоязычное IT-комьюнити плодотворно на творчество — там горы полезного и интересного контента.
  • Найти окружение из программистов или представителей других IT-профессий. Если бы я только начинал, то не пожалел 300 руб. в месяц и пошёл в сообщество «Осознанная Меркантильность». Там несколько тысяч человек, большое направление по Python: чаты, встречи и прочее. Туда можно прийти с вопросом как по языку, так и по трудоустройству, и получить лучший ответ.