Привет, Хабр!
Меня зовут Тимофей, я Python Engineer с опытом в 3+ года.
Тимофей
Python Engineer в компании Fenion GmbH
Недавно я опубликовал статью на Хабре о том, как я докатился до такой жизни и стал разработчиком на Python. Там я упоминал некоторые материалы, которые помогали мне в изучении. За последнее время нашлись люди, которые спрашивали у меня, как лучше вкатиться в веб‑разработку, изучив Python: с чего начать, в каком порядке и какие материалы использовать и т. д.
Я бы не назвал данную статью полноценным роадмэпом в том понимании, в котором это слово обычно используют. В статье нет сроков изучения, отсутствует подробный план, затрагивающей все темы и подтемы. Да и зачем нужен еще один роадмэп «под копирку», когда в сети и так хватает качественных предложений.
Скорее, я хотел бы составить абстрактный план обучения, который сможет задать общий ориентир, а также будет коррелировать с роадмэпом вроде roadmap.sh. Кроме этого, я смогу дать несколько полезных советов из своего опыта, а также составлю списки полезных ресурсов для изучения языка, сопутствующих инструментов и технологий, которые в свое время помогли или же помогают мне самому.
Также хотел отметить, что все написанное в данной статье является моим субъективным взглядом, основанным на личном опыте. Я не являюсь истиной в последней инстанции, поэтому, в конечном счете, решение следовать данному плану или нет, конечно же, остается за вами.
В любом случае, я надеюсь, что данная статься окажется полезной и вы сможете подчеркнуть что‑нибудь, что поможет вам в изучении языка Python и веб‑разработки в целом.
Что такое язык 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 и разработчиков может быть отличным способом сохранять мотивацию и учиться у других.
Создавайте пет‑проекты. Создание пет‑проектов — очень важный аспект в обучении, а также способ применить полученные знания и получить практический опыт, который можно будет добавить в резюме. Начните с простых проектов, таких как калькулятор или текстовая игра, и постепенно переходите к более сложным.
Итак, после небольшого вступления вы определились с мотивацией и ознакомились со списком общих рекомендаций. Можем переходить к самим шагам.
Шаг 1. Изучение основ языка + GIT
Начните с основ Python, таких как типы данных, переменные, циклы, функции и модули. Для начало следует понять основы, уверенно ориентироваться в языке. Да, в какой‑то момент это может наскучивать, но без этих основ вы не сможете двигаться дальше.
Также хотел вынести сюда GIT — систему контроля версий. Данная технология обязательна к изучению всем разработчикам, т.к. во‑первых, это удобно, а во‑вторых, она используется повсеместно. Для начала вам понадобятся несколько базовых команд, вроде:
git init # Инициализация репозитория
git add # добавление файлов в staging area
git commit # снимок текущих изменений проекта
git pull # стягиваем последние изменения с репозитория
git push # заливаем изменения после commit'а
Шаг 2. Объектно-ориентированное программирование
Python — это объектно‑ориентированный язык программирования, здесь все является объектом. Следовательно, важно изучить объектно‑ориентированные концепции, такие как классы, объекты, наследование, полиморфизм и инкапсуляция. Концепции ООП практически всегда спрашивают на собеседованиях, поэтому вы должны хорошо в них ориентироваться. Помимо этого вы постоянно будете сталкиваться с классами в своих повседневных задачах.
Шаг 3. Алгоритмы
Для того, чтобы уметь решать поставленные задачи, нужно мыслить алгоритмически. А как это сделать? Правильно, практиковаться в решении различных задач. Книга «Грокаем алгоритмы» — это просто находка для знакомства с ними. В книге доступнейшим языком рассказывается о различных базовых алгоритмах и понятиях, вроде времени выполнения и О‑большого. Параллельно с изучением данной книги, особенно рекомендую решать разные задачки на codewars или leetcode.
Материалы для изучения. Шаг 1 - Шаг 3
Хотел бы сразу сказать, что я не говорю о том, что все материалы ниже обязательны к изучению. Я лишь оставляю список качественных и полезных на мой взгляд материалов, которые помогли мне и, возможно, помогут вам в процессе обучения.
Знакомство с Python. Дэн Бейдер.
Пытаетесь найти что‑нибудь для начинающих о языке Python в интернете? Не можете решить, с чего начать? Как структурировать это море информации? В каком порядке изучать? Если вы задаетесь подобными вопросами, потому что хотите заложить фундамент будущей карьеры питониста — эта книга для вас! Вместо скучного перечисления возможностей языка авторы рассказывают, как сочетать разные структурные элементы Python, чтобы сразу создавать скрипты и приложения. Книга построена по принципу 80/20: большую часть полезной информации можно усвоить, изучив несколько критически важных концепций. Освоив самые популярные команды и приемы, вы сразу сосредоточитесь на решении реальных повседневных задач.
Вот что издатель пишет в описании книги, с чем я вполне соглашусь. От себя хотел добавить, что уже успел посмотреть книгу и оставила она только положительные впечатления. Дэн Бейдер в принципе считается одним из лучших авторов по тематике Python. Отличительной особенностью его работ является понятный стиль изложения. И данная книга не является исключением, она отлично подойдет для новичков.
«Изучаем Python». Марк Лутц
Многие питонисты считают данную книгу мастхэвом. И не зря, ведь данная работа уже считается классикой. Очень малое количество книг могут сравниться с Лутцом по глубине и подробности в описании своего предмета. Освоив материал книги, вы совершенно точно сможете решать с помощью Python самые разные задачи. Недостатком является форма изложения, которая зайдет далеко не всем, а также размер книги — около 1200 страниц.
Укус питона. Swaroop C.H
Книга является противоположностью учебнику Лутца. Она маленькая(около 164 страниц), совсем не является полноформатным учебником и содержит в себе самые основы в формате «записок» автора. Книгу вполне можно изучать вместе с каким‑нибудь курсом, например из пункта 4.
Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих. Адитья Бхаргава
Принято считать, что программирование — это очень сложно. Особенно если раз за разом наступать на одни и те же грабли, пытаться сделать по‑своему то, что уже и так было придумано до нас. Ведь практически для любой задачи есть готовый алгоритм решения, осталось только найти его и правильно использовать.
В книге «Грокаем алгоритмы» Адитья Бхаргава не просто показывает примеры таких решений с детальными иллюстрациями, но и учит читателя самостоятельно находить их в дальнейшем. Читатель знакомится с понятиями бинарного поиска, массивами, связанными списками, структурами данных, рекурсией.
Книга рассчитана на тех, кто уже знаком с основными азами программирования и интересуется алгоритмическими решениями. Автор старается доносить информацию понятным даже новичку языком, иллюстрирует все основные моменты.
Вся серия курсов «Поколение Python» на степике. Очень хорошие курсы с большим количеством задач, которые познакомят вас с основными типами данных, циклами, условиями и т. д.
Руководство по языку Python. Метанит. Вполне себе хорошее базовое руководство по языку. Рассматриваются все базовые темы, включая ООП. Сам когда‑то пользовался, было полезно.
Git за полчаса: руководство для начинающих. Отличная статья, которая научит вас основам работы с системой контроля версий.
Гуглите. Вы обучаетесь только тогда, когда сталкиваетесь с трудностями. Поиск решения задачи сильно прокачивает ваши скиллы. Ищите ответы на форумах, в статьях, видео на YouTube и т. д. Только путем проб и ошибок можно по‑настоящему понять изучаемую тему.
Шаг 3. Изучение основ SQL, работа с ORM
Работа с базой данный — неотъемлемая часть работы любого backend‑разработчика. На практике, вы будете работать с БД постоянно. Нет, на данном этапе вам не обязательно знать как руками написать JOIN запрос, в котором будут находится данные из 10 разных таблиц. Для начала, изучите основы, вроде: что такое таблицы, поля, связи и запросы. Остальное за вас сделает ORM. Да, практически во всех современных фреймворках есть наличие ORM(Object‑Relational Mapping). Это специальный инструмент, который позволяет разработчикам взаимодействовать с базами данных более объектно‑ориентированным образом. Вместо написания необработанных SQL‑запросов для взаимодействия с базой данных разработчики могут определять классы, представляющие таблицы базы данных, и использовать эти классы для запроса данных к базе и манипулирования ими.
При помощи ORM вы можете делать все то же самое, что и в самом SQL: создавать таблицы, обновлять их, использовать индексы, писать различные запросы и т. д. Например, в Django используется удобная Django ORM. Сравните сами:
Допустим, у нас есть есть три таблицы: Students, Grade и Marks. Нам нужно вывести всех учащихся 7 класса, у которых оценки выше 4.
Примерно так бы выглядел SQL‑запрос, удовлетворяющий нашей задаче:
SELECT s.*
FROM Students s
INNER JOIN Grades g ON s.grade_id = g.id
INNER JOIN Marks m ON s.id = m.student_id
WHERE g.grade = 7 AND m.mark > 4;
А вот так в Django ORM:
from django.db.models import Q
from myapp.models import Students
students = Students.objects.filter(
Q(grade__grade=7) &
Q(marks__mark__gt=4)
).distinct()
Вот еще пример:
Допустим, у нас есть две таблицы: Book и Author. Мы хотим вывести все книги, автором которых является Стивен Кинг.
SQL-запрос:
SELECT b.*
FROM Books b
JOIN Author a ON b.author_id = a.id
WHERE a.name = 'Steven King';
Django ORM:
from myapp.models import Book
Book.objects.filter(author__name='Steven King')
Материалы для изучения
Разбираем SQL на примере PostgreSQL — SELECT, JOIN, GROUP, HAVING, Coalesce и др. YouTube канал Диджитализируй!
Шаг 4. Изучение верстки на базовом уровне
Сегодня без верстки никуда. Ее должен знать каждый, в том и числе и backend‑инженер. То же самое я бы мог сказать и о JavaScript, но на данном этапе изучать его необязательно. Вы всегда сможете вернуться к нему позже.
Без знаний верстки вы не поймете как работает ваше приложение. Вы даже не сможете нормально отобразить данные на странице. Если я вас не убедил, то вот некоторые из причин, почему вам следует изучить верстку:
Понимание того, как работает Web. Backend‑инженеры обычно работают на стороне сервера, но они также должны хорошо понимать, как работает клиентская часть (т. е. браузер). HTML и CSS являются основополагающими языками Интернета и необходимы для создания веб‑страниц. Знание того, как работать с HTML и CSS, помогает бэкенд‑инженерам понять весь процесс веб‑разработки.
Лучшее кооперирование с frontend‑разработчиками. Backend‑разработчики часто сотрудничают с frontend‑инженерами для создания веб‑приложений. Знание HTML и CSS облегчает им общение с разработчиками интерфейсов и понимание кода, над которым они работают. Это может привести к более эффективному сотрудничеству.
Отладка и устранение неполадок. Инженеры серверной части отвечают за обеспечение правильной работы веб‑приложений. Если есть проблемы с интерфейсом, такие как неработающий макет или смещенный элемент, знание того, как работать с HTML и CSS, может помочь backend‑разработчику быстрее диагностировать и устранять проблему.
Быстрое прототипирование. Backend‑инженерам часто приходится создавать быстрые прототипы или макеты веб‑страниц, чтобы протестировать их функциональность. Знание HTML и CSS позволяет им быстро и легко создавать простые веб‑страницы, не полагаясь на разработчика внешнего интерфейса.
Больше возможностей для трудоустройства: На современном рынке многие вакансии для бэкенд‑инженеров также требуют знания интерфейсных технологий, таких как HTML, CSS и JavaScript. Обладание этими навыками может сделать backend‑инженеров более востребованными на рынке и открыть больше возможностей для трудоустройства
Материалы для изучения Шаг 4
YouTube канал Евгения Андриканича «Фрилансер по жизни». Отличнейший канал, благодаря которому я также в свое время изучал верстку. Автор доступным языком объясняет различные концепции и штуки из верстки и фронтенда в целом. На канале очень много практики, которую Женя буквально «разжевывает» для зрителя.
Ресурс W3 Schools. Полезный сайт, на котором содержится куча полезный информации и практических примеров по всем html‑тегам, css‑селекторам и т. д.
В целом, после знакомства с основными концепциями, я бы посоветовал набрать понравившихся макетов из тематических тг‑каналов, вроде этого и тупо верстать их. После нескольких таких макетов вы будете чувствовать себя уверенно и поймете, что верстка — это просто.
Шаг 5. Изучение фреймворка
После того, как вы изучите базовые конструкции Python, а также работу с SQL, вы можете переходить к изучению фреймворка. Во время изучения, параллельно стоит изучить как работает веб в целом: как сервер взаимодействует с клиентом, как осуществляется сохранение данных на сервере, какие HTTP‑запросы существуют и т. д. Да, это займет у вас какое‑то время, но эти знания являются обязательными.
На данный момент на Python существует три самых популярных решения для разработки веб‑приложений: Django, Flask и FastAPI. Какой из них выбрать — решать вам. В этой статье автор проводит понятное сравнение всех трех фреймворков.
В свое время я начинал с Django: меня подкупила популярность, наличие огромного множества библиотек, широкий функционал прямо из коробки, большое количество обучающего материала, а также большое комьюнити.
Для понимания того, как устроен фреймворк, вы также должны знать о существовании такого понятия, как паттерны разработки. Шаблон проектирования или паттерн в разработке программного обеспечения — это повторяемая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста. На самом деле существует огромное количество таких паттернов и подходов. Вам не нужно знать их все, но зачастую фреймворк использует тот или иной архитектурный паттерн, следовательно, вам стоит знать как он устроен.
Шаг 6. Создание первого проекта
Как я упоминал выше, в свое время я изучал Django прямо во время разработки своего первого веб‑приложения, а именно книжного интернет‑магазина. Если вы будете делать также, то таким образом сможете сразу подкреплять свои теоретические знания полезной практикой.
Не стоит бросаться в крайности. Не нужно 10 часов подряд изучать сухую теорию и никак не использовать ее на практике. Но, также, в свою очередь, для начала нужно изучить основные концепции и инструменты фреймворка, вроде моделей, представлений, контроллеров и т. д., а также их взаимодействие между собой.
Итоговый совет такой: изучите основную концепцию инструмента: базовые вещи и из чего он состоит, а после следуйте примерному плану: изучили тему — внедрили функционал в свое приложение.
Как только вы подойдете к созданию пет‑проекта, у вас, как и у большинства новичков, сразу возникнет вопрос: «А какой вообще проект делать?». Тут все просто: не нужно придумывать велосипед.
Для начала вы можете делать проект с курса или книги, которые вы изучаете. После этого вам нужно будет написать что‑то свое. Подумайте. Может быть у вас есть хобби? Может быть вы любите читать книги и хотите создать интернет‑магазин по их продаже. А может вы любите играть в футбол и хотите создать сайт о спортивных мероприятиях, матчах, командах и т. д. Выбор тут и вправду огромный и он ограничивается лишь вашей фантазией.
Шаг 7. Работа с API
Вам так или иначе придется научиться работать с API (Application programming interface) — интерфейсом, при помощи которого один сайт может взаимодействовать с другим.
Грубо говоря API — это набор операций и функций, доступный внешним клиентам.
Задачи backend‑разработчика так или иначе сводятся к созданию или работе с API‑интерфейсом, который далее будет использоваться frontend‑разработчиком.
В Django для проектирования API используется библиотека Django Rest Framework, которая предоставляет все нужные инструменты для создания API прямо из коробки.
Попробуйте поработать с API разных платформ: например, с API площадки Steam, при помощи которой вы можете получить данные о всех размещенных на ней играх.
Материалы для изучения
Quickstart по Django Rest Framework. Официальная документация.
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 и об ИТ в целом на основе своего рабочего опыта.