Привет, Хабр! Меня зовут Тимофей, я Python Engineer с опытом в 3+ года. Python Engineer в компании Fenion GmbH Недавно я опубликовал статью на Хабре о том, как я докатился до такой жизни и стал разработчиком на Python. Там я упоминал некоторые материалы, которые помогали мне в изучении. За последнее время нашлись люди, которые спрашивали у меня, как лучше вкатиться в веб‑разработку, изучив Python: с чего начать, в каком порядке и какие материалы использовать и т. д. Я бы не назвал данную статью полноценным роадмэпом в том понимании, в котором это слово обычно используют. В статье нет сроков изучения, отсутствует подробный план, затрагивающей все темы и подтемы. Да и зачем нужен еще один роадмэп «под копирку», когда в сети и так хватает качественных предложений. Скорее, я хотел бы составить абстрактный план обучения, который сможет задать общий ориентир, а также будет коррелировать с роадмэпом вроде roadmap.sh. Кроме этого, я смогу дать несколько полезных советов из своего опыта, а также составлю списки полезных ресурсов для изучения языка, сопутствующих инструментов и технологий, которые в свое время помогли или же помогают мне самому. Также хотел отметить, что все написанное в данной статье является моим субъективным взглядом, основанным на личном опыте. Я не являюсь истиной в последней инстанции, поэтому, в конечном счете, решение следовать данному плану или нет, конечно же, остается за вами.  В любом случае, я надеюсь, что данная статься окажется полезной и вы сможете подчеркнуть что‑нибудь, что поможет вам в изучении языка Python и веб‑разработки в целом. Python — это высокоуровневый интерпретируемый язык программирования, который был впервые выпущен в 1991 году(Не все знают, но язык даже старше Java!). Он известен своей простотой, удобочитаемостью и удобством использования, что делает его популярным выбором для широкого спектра приложений, от веб‑разработки до научных вычислений. Python может быть использован для многих целей, включая: Веб‑разработка: Python широко используется для создания серверной части веб‑приложений с использованием таких фреймворков, как Django, Flask или FastAPI. Анализ данных и машинное обучение: Python стал фактическим языком для анализа данных, машинного обучения и искусственного интеллекта благодаря своему богатому набору библиотек, таких как NumPy, Pandas и Scikit‑learn. Написание скриптов: Простота и удобство использования Python делают его популярным выбором для написания сценариев для автоматизации задач, таких как системное администрирование и сетевое программирование. Разработка десктопных приложений: Python также можно использовать для создания настольных приложений с использованием библиотек GUI, таких как PyQt. Разработка игр. Конечно, ААА‑проектов на питоне не делают, что что‑то простое — вполне. На YouTube есть интересный канал, на котором автор периодически выкладывает свои Pygame‑проекты. Образование: Простой в освоении синтаксис Python и широкий спектр приложений делают его популярным выбором для вводных курсов в программирование в университетах и школах. В целом, Python — это универсальный язык, который может использоваться для широкого спектра целей, от простых скриптов до сложных приложений. У меня для вас хорошая новость: любой человек может достичь хорошего уровня владения Python или же любым другим языком, благодаря правильному подходу, а именно синергией заинтересованности, мотивации и дисциплины. Могу предположить, что некоторые люди пытаются попасть в ИТ в первую очередь из‑за денег. Не будем лукавить: денежная мотивация занимает далеко не последнее место и это вполне естественно: труд должен соответствующе оплачиваться. На одной лишь мотивации, а особенно на денежной, в принципе долго выезжать не получится. В данной сфере нужно очень много учиться. Причем делать это нужно постоянно. А какой нормальный человек сможет тратить огромное количество своего драгоценного времени на изучение того, что ему не интересно? Естественно, бывают разные программисты, я даже лично знаю некоторых, кто с трудом ориентируется в базовом синтаксисе языка, хотя уже несколько месяцев работают в ИТ‑компании. Мы же хотим стать хорошими специалистами, так? Будучи новичком, я не сразу обрел истинный интерес к языку. На своих первых курсах мы решали математические задачки при помощи этого языка, и скажу вам так: это меня совсем не заинтересовало. Прошел достаточно продолжительный период времени(около года), прежде чем я вернулся к языку. Я вспоминал основы, после чего начал изучать фреймворк Django и сопутствующие технологии прямо во время процесса разработки. Перейдя на любую вакансию новичок вполне может ужаснуться от списка технических требований к кандидатам: уверенное знание языка, опыт работы с N количеством фреймворков и библиотек, SQL, REST API, GIT, Docker. И данный список может расширяться в зависимости от конкретной вакансии.  Как же все выучить, работать эффективно, не потерять интерес и не сойти с ума? Для ответа на этот вопрос, оставлю некоторые общие рекомендации: Выберите удобную IDE. Процесс разработки в первую очередь должен быть комфортным для вас самих. Фактически, на рынке есть лучшая IDE для разработки на Python — это Pycharm. К сожалению, из‑за политики JetBrains их продукты больше не доступны для покупки аккаунтам из Беларуси и России. Альтернативой является VS Code, достаточно шустрый редактор кода, который благодаря плагинам оставляет большинство плюшек Pycharm. Обязательно делайте перерывы: дайте вашему мозгу шанс обработать и усвоить полученную информацию. Вы можете удивиться, но эта штука практически всегда работает. Если вы видите, что у вас долго что‑то не получается — просто отдохните и отвлекитесь. Но данный отдых должен быть, в первую очередь, отдыхом для мозга. Лучшим отвлечением лично для меня является прогулка. Зачастую, после такого перерыва вы сможете по‑другому взглянуть на вашу задачу, у вас появятся новые мысли и вы увидите другие пути решения. Выработайте привычку заниматься каждый день. Теория + много практики. Теоретические знания — это безусловно хорошо, но без должного количества практики они ничего не значат. Часто бывает такое, что в теории вам все кажется очевидным и понятным, но как дело касается решения вы обнаруживаете, что сильно путаетесь и голова будто бы не работает. Это нормально! Пытайтесь, пока не получится. Не прыгайте между темами. Обучайтесь поэтапно и в комфортном для вас темпе. Никто не выиграет от того, что вы с утра до вечера будете сидеть за книгами и задачами, после чего сильно перегорите. Перегорание — это в целом распространенная проблема у программистов(и не только). Во время обучения и работы я тоже перегорал и знаю, что это такое. Но в итоге я нашел комфортный для себя темп и определил некоторые рабочие правила, вроде периодического отдыха. Не злоупотребляйте копипастом кода. Особенно это касается проектов. Во всех курсах авторы закрепляют теорию практикой. В роли такой практики выступает создание проекта. Старайтесь думать сами. Это не значит, что вы не должны слушать автора, напротив, изучайте курс внимательно. Я говорю о том, что вы не должны слепо переписывать код и ждать чуда. Пытайтесь решить задачу сами, экспериментируйте, думайте над задачей вместе с автором. Если вам нужно решить большую или же непонятную задачу, декомпозируйте ее на более мелкие подзадачи. Это работает. Так вы сможете намного быстрее найти нужное решение. Присоединяйтесь к сообществу: присоединение к сообществу изучающих Python и разработчиков может быть отличным способом сохранять мотивацию и учиться у других. Создавайте пет‑проекты. Создание пет‑проектов — очень важный аспект в обучении, а также способ применить полученные знания и получить практический опыт, который можно будет добавить в резюме. Начните с простых проектов, таких как калькулятор или текстовая игра, и постепенно переходите к более сложным. Итак, после небольшого вступления вы определились с мотивацией и ознакомились со списком общих рекомендаций. Можем переходить к самим шагам. Начните с основ Python, таких как типы данных, переменные, циклы, функции и модули. Для начало следует понять основы, уверенно ориентироваться в языке. Да, в какой‑то момент это может наскучивать, но без этих основ вы не сможете двигаться дальше. Также хотел вынести сюда GIT — систему контроля версий. Данная технология обязательна к изучению всем разработчикам, т.к. во‑первых, это удобно, а во‑вторых, она используется повсеместно. Для начала вам понадобятся несколько базовых команд, вроде: Python — это объектно‑ориентированный язык программирования, здесь все является объектом. Следовательно, важно изучить объектно‑ориентированные концепции, такие как классы, объекты, наследование, полиморфизм и инкапсуляция. Концепции ООП практически всегда спрашивают на собеседованиях, поэтому вы должны хорошо в них ориентироваться. Помимо этого вы постоянно будете сталкиваться с классами в своих повседневных задачах. Для того, чтобы уметь решать поставленные задачи, нужно мыслить алгоритмически. А как это сделать? Правильно, практиковаться в решении различных задач. Книга «Грокаем алгоритмы» — это просто находка для знакомства с ними. В книге доступнейшим языком рассказывается о различных базовых алгоритмах и понятиях, вроде времени выполнения и О‑большого. Параллельно с изучением данной книги, особенно рекомендую решать разные задачки на codewars или leetcode. Хотел бы сразу сказать, что я не говорю о том, что все материалы ниже обязательны к изучению. Я лишь оставляю список качественных и полезных на мой взгляд материалов, которые помогли мне и, возможно, помогут вам в процессе обучения. Знакомство с Python. Дэн Бейдер. Пытаетесь найти что‑нибудь для начинающих о языке Python в интернете? Не можете решить, с чего начать? Как структурировать это море информации? В каком порядке изучать? Если вы задаетесь подобными вопросами, потому что хотите заложить фундамент будущей карьеры питониста — эта книга для вас! Вместо скучного перечисления возможностей языка авторы рассказывают, как сочетать разные структурные элементы Python, чтобы сразу создавать скрипты и приложения. Книга построена по принципу 80/20: большую часть полезной информации можно усвоить, изучив несколько критически важных концепций. Освоив самые популярные команды и приемы, вы сразу сосредоточитесь на решении реальных повседневных задач. Вот что издатель пишет в описании книги, с чем я вполне соглашусь. От себя хотел добавить, что уже успел посмотреть книгу  и оставила она только положительные впечатления. Дэн Бейдер в принципе считается одним из лучших авторов по тематике Python. Отличительной особенностью его работ является понятный стиль изложения. И данная книга не является исключением, она отлично подойдет для новичков.  «Изучаем Python». Марк Лутц Многие питонисты считают данную книгу мастхэвом. И не зря, ведь данная работа уже считается классикой. Очень малое количество книг могут сравниться с Лутцом по глубине и подробности в описании своего предмета. Освоив материал книги, вы совершенно точно сможете решать с помощью Python самые разные задачи. Недостатком является форма изложения, которая зайдет далеко не всем, а также размер книги — около 1200 страниц. Укус питона. Swaroop C.H Книга является противоположностью учебнику Лутца. Она маленькая(около 164 страниц), совсем не является полноформатным учебником и содержит в себе самые основы в формате «записок» автора. Книгу вполне можно изучать вместе с каким‑нибудь курсом, например из пункта 4. Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих. Адитья Бхаргава Принято считать, что программирование — это очень сложно. Особенно если раз за разом наступать на одни и те же грабли, пытаться сделать по‑своему то, что уже и так было придумано до нас. Ведь практически для любой задачи есть готовый алгоритм решения, осталось только найти его и правильно использовать. В книге «Грокаем алгоритмы» Адитья Бхаргава не просто показывает примеры таких решений с детальными иллюстрациями, но и учит читателя самостоятельно находить их в дальнейшем. Читатель знакомится с понятиями бинарного поиска, массивами, связанными списками, структурами данных, рекурсией. Книга рассчитана на тех, кто уже знаком с основными азами программирования и интересуется алгоритмическими решениями. Автор старается доносить информацию понятным даже новичку языком, иллюстрирует все основные моменты. Вся серия курсов «Поколение Python» на степике. Очень хорошие курсы с большим количеством задач, которые познакомят вас с основными типами данных, циклами, условиями и т. д. Руководство по языку Python. Метанит. Вполне себе хорошее базовое руководство по языку. Рассматриваются все базовые темы, включая ООП. Сам когда‑то пользовался, было полезно. Git за полчаса: руководство для начинающих. Отличная статья, которая научит вас основам работы с системой контроля версий. Гуглите. Вы обучаетесь только тогда, когда сталкиваетесь с трудностями. Поиск решения задачи сильно прокачивает ваши скиллы. Ищите ответы на форумах, в статьях, видео на YouTube и т. д. Только путем проб и ошибок можно по‑настоящему понять изучаемую тему. Работа с базой данный — неотъемлемая часть работы любого backend‑разработчика. На практике, вы будете работать с БД постоянно. Нет, на данном этапе вам не обязательно знать как руками написать JOIN запрос, в котором будут находится данные из 10 разных таблиц. Для начала, изучите основы, вроде: что такое таблицы, поля, связи и запросы. Остальное за вас сделает ORM. Да, практически во всех современных фреймворках есть наличие ORM(Object‑Relational Mapping). Это специальный инструмент, который позволяет разработчикам взаимодействовать с базами данных более объектно‑ориентированным образом. Вместо написания необработанных SQL‑запросов для взаимодействия с базой данных разработчики могут определять классы, представляющие таблицы базы данных, и использовать эти классы для запроса данных к базе и манипулирования ими. При помощи ORM вы можете делать все то же самое, что и в самом SQL: создавать таблицы, обновлять их, использовать индексы, писать различные запросы и т. д. Например, в Django используется удобная Django ORM. Сравните сами: Допустим, у нас есть есть три таблицы: Students, Grade и Marks. Нам нужно вывести всех учащихся 7 класса, у которых оценки выше 4.  Примерно так бы выглядел SQL‑запрос, удовлетворяющий нашей задаче: А вот так в Django ORM: Вот еще пример: Допустим, у нас есть две таблицы: Book и Author. Мы хотим вывести все книги, автором которых является Стивен Кинг.  SQL-запрос: Django ORM: Разбираем SQL на примере PostgreSQL — SELECT, JOIN, GROUP, HAVING, Coalesce и др. YouTube канал Диджитализируй! Django ORM и его самые популярные фичи. Статья. Официальная документация Django ORM. Сегодня без верстки никуда. Ее должен знать каждый, в том и числе и backend‑инженер. То же самое я бы мог сказать и о JavaScript, но на данном этапе изучать его необязательно. Вы всегда сможете вернуться к нему позже. Без знаний верстки вы не поймете как работает ваше приложение. Вы даже не сможете нормально отобразить данные на странице. Если я вас не убедил, то вот некоторые из причин, почему вам следует изучить верстку: Понимание того, как работает Web. Backend‑инженеры обычно работают на стороне сервера, но они также должны хорошо понимать, как работает клиентская часть (т. е. браузер). HTML и CSS являются основополагающими языками Интернета и необходимы для создания веб‑страниц. Знание того, как работать с HTML и CSS, помогает бэкенд‑инженерам понять весь процесс веб‑разработки. Лучшее кооперирование с frontend‑разработчиками. Backend‑разработчики часто сотрудничают с frontend‑инженерами для создания веб‑приложений. Знание HTML и CSS облегчает им общение с разработчиками интерфейсов и понимание кода, над которым они работают. Это может привести к более эффективному сотрудничеству. Отладка и устранение неполадок. Инженеры серверной части отвечают за обеспечение правильной работы веб‑приложений. Если есть проблемы с интерфейсом, такие как неработающий макет или смещенный элемент, знание того, как работать с HTML и CSS, может помочь backend‑разработчику быстрее диагностировать и устранять проблему. Быстрое прототипирование. Backend‑инженерам часто приходится создавать быстрые прототипы или макеты веб‑страниц, чтобы протестировать их функциональность. Знание HTML и CSS позволяет им быстро и легко создавать простые веб‑страницы, не полагаясь на разработчика внешнего интерфейса. Больше возможностей для трудоустройства: На современном рынке многие вакансии для бэкенд‑инженеров также требуют знания интерфейсных технологий, таких как HTML, CSS и JavaScript. Обладание этими навыками может сделать backend‑инженеров более востребованными на рынке и открыть больше возможностей для трудоустройства YouTube канал Евгения Андриканича «Фрилансер по жизни». Отличнейший канал, благодаря которому я также в свое время изучал верстку. Автор доступным языком объясняет различные концепции и штуки из верстки и фронтенда в целом. На канале очень много практики, которую Женя буквально «разжевывает» для зрителя. Ресурс W3 Schools. Полезный сайт, на котором содержится куча полезный информации и практических примеров по всем html‑тегам, css‑селекторам и т. д. В целом, после знакомства с основными концепциями, я бы посоветовал набрать понравившихся макетов из тематических тг‑каналов, вроде этого и тупо верстать их. После нескольких таких макетов вы будете чувствовать себя уверенно и поймете, что верстка — это просто. После того, как вы изучите базовые конструкции Python, а также работу с SQL, вы можете переходить к изучению фреймворка. Во время изучения, параллельно стоит изучить как работает веб в целом: как сервер взаимодействует с клиентом, как осуществляется сохранение данных на сервере, какие HTTP‑запросы существуют и т. д. Да, это займет у вас какое‑то время, но эти знания являются обязательными. На данный момент на Python существует три самых популярных решения для разработки веб‑приложений: Django, Flask и FastAPI. Какой из них выбрать — решать вам. В этой статье автор проводит понятное сравнение всех трех фреймворков.  В свое время я начинал с Django: меня подкупила популярность, наличие огромного множества библиотек, широкий функционал прямо из коробки, большое количество обучающего материала, а также большое комьюнити. Для понимания того, как устроен фреймворк, вы также должны знать о существовании такого понятия, как паттерны разработки. Шаблон проектирования или паттерн в разработке программного обеспечения — это повторяемая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста. На самом деле существует огромное количество таких паттернов и подходов. Вам не нужно знать их все, но зачастую фреймворк использует тот или иной архитектурный паттерн, следовательно, вам стоит знать как он устроен. Как я упоминал выше, в свое время я изучал Django прямо во время разработки своего первого веб‑приложения, а именно книжного интернет‑магазина. Если вы будете делать также, то таким образом сможете сразу подкреплять свои теоретические знания полезной практикой.  Не стоит бросаться в крайности. Не нужно 10 часов подряд изучать сухую теорию и никак не использовать ее на практике. Но, также, в свою очередь, для начала нужно изучить основные концепции и инструменты фреймворка, вроде моделей, представлений, контроллеров и т. д., а также их взаимодействие между собой.  Итоговый совет такой: изучите основную концепцию инструмента: базовые вещи и из чего он состоит, а после следуйте примерному плану: изучили тему — внедрили функционал в свое приложение. Как только вы подойдете к созданию пет‑проекта, у вас, как и у большинства новичков, сразу возникнет вопрос: «А какой вообще проект делать?». Тут все просто: не нужно придумывать велосипед.  Для начала вы можете делать проект с курса или книги, которые вы изучаете. После этого вам нужно будет написать что‑то свое. Подумайте. Может быть у вас есть хобби? Может быть вы любите читать книги и хотите создать интернет‑магазин по их продаже. А может вы любите играть в футбол и хотите создать сайт о спортивных мероприятиях, матчах, командах и т. д. Выбор тут и вправду огромный и он ограничивается лишь вашей фантазией. Вам так или иначе придется научиться работать с API (Application programming interface) — интерфейсом, при помощи которого один сайт может взаимодействовать с другим. Грубо говоря API — это набор операций и функций, доступный внешним клиентам. Задачи backend‑разработчика так или иначе сводятся к созданию или работе с API‑интерфейсом, который далее будет использоваться frontend‑разработчиком. В Django для проектирования API используется библиотека Django Rest Framework, которая предоставляет все нужные инструменты для создания API прямо из коробки. Попробуйте поработать с API разных платформ: например, с API площадки Steam, при помощи которой вы можете получить данные о всех размещенных на ней играх. Quickstart по Django Rest Framework. Официальная документация. Официальная документация по Django. Django3 by example. Antonio Mele Новая обновленная версия книги Django2 by example. В книге автор разбирает создание различных проектов на Django: начиная от просто блога, заканчивая интернет‑магазином и образовательной платформой Two Scoops of Django3. Daniel Roy Greenfeld, Audrey Greenfeld В этой книге авторы познакомят вас с различными советами, хитростями, шаблонами, фрагментами кода и техниками, которым они научились за годы разработки на Django. Стоит отметить, что книга является обновлением и дополнением предыдущих изданий. Django for APIs: Build web APIs with Python & Django Django for APIs — это основанное на разработке проекта руководство по созданию современных веб‑API с использованием Django & Django REST Framework. Он подходит для начинающих, которые никогда раньше не создавали API, а также для профессиональных программистов, ищущих быстрое знакомство с основами Django и лучшими практиками. Стоит отметить, что материалы книги используют современные версии фреймворка: Django 4.0 и Rest Framework 3.13 YouTube канал Django School. Автор на практике понятным языком объясняет как работать с Django. На канале есть несколько плейлистов по полноценной пошаговой разработке веб‑приложений, включая сайт по поиску фильмов. Я бы мог еще долго перечислять различные инструменты и технологии, которые могут понадобиться вам в работе. Например Docker или принцип работы веб‑серверов, вроде Nginx. Для того, чтобы понять, что нужно изучить в дополнение к базовым знаниям, вам обязательно нужно ходить по собеседованиям в ИТ‑компании. Так вы сможете понять свой текущий уровень и что вам нужно подтянуть, а также увидеть то, чего от вас ждет рынок в плане хард‑скиллов. В данной статье я описал примерный список необходимых знаний для старта в разработке веб‑приложений на Python. Да, объективно он далеко не маленький. Любое обучение, а особенно осознанное — это в принципе дело не быстрое. Но если вы добросовестно изучите все темы, описанные выше, то получите необходимый фундамент, который поможет вам в дальнейшем. Также, хотел еще раз отметить, что у вас не должно быть цели изучить все эти темы за месяц. Обучайтесь в комфортном для вас темпе, главное — регулярность. Кто‑то сможет осилить данный объем материала за условных 6 месяцев, а кто‑то за 12. В этом нет ничего плохого. Главное, чтобы обучение проходило качественно и приносило вам реальную пользу и результат. Спасибо за внимание! Если статья оказалась для вас полезной и интересной, то можете подписаться на мой телеграм‑канал, где я рассказываю о разработке на Python и об ИТ в целом на основе своего рабочего опыта.  Python Engineer with 3+ years of experience