🐍 Дорожная карта Python-разработчика в 2023 году
Расскажем, что и в какой последовательности нужно изучить, чтобы стать Python-джуном и найти первую работу.
Популярность Python растет из года в год, а экосистема языка непрерывно расширяется: арсенал разработчиков постоянно пополняется новыми инструментами, которые дают возможность написать почти любое приложение. Python отлично зарекомендовал себя в веб-разработке, и это закономерно:
- Фреймворки на основе Python отличаются впечатляющими возможностями, функциональностью и гибкостью. На базе Flask и Django, к примеру, можно создать фуллстек-проект, гибридное приложение, API или микросервис.
- Веб-приложения на базе Python легко масштабируются и интегрируются с компонентами и сервисами, написанными на других языках.
- Широкий выбор дополнительных плагинов и модулей для Python-фреймворков позволяет быстро разрабатывать веб-приложения любой направленности и степени сложности.
- Нетривиальные решения для веб-разработки на базе Python появляются с завидной частотой, а проверенные временем фреймворки и модули – регулярно обновляются и совершенствуются.
Благодаря этим преимуществам Python основательно потеснил прежнего лидера в сфере веб-разработки – PHP. Если в 2023 году перед вами стоит выбор – с какого языка начать путь веб-разработчика, – выбирайте Python, не пожалеете. А мы предоставим пошаговую стратегию изучения Python, которая поможет освоить все аспекты веб-разработки.
Первый этап: изучаем основы Python
Python обладает простым и в то же время максимально гибким синтаксисом – одну и ту же задачу на этом языке можно решить множеством различных способов. Однако по оптимальности эти решения могут значительно отличаться друг от друга. Для определения правильного подхода к решению задачи нужно основательно разобраться:
- В особенностях основных типах данных – списков, строк, словарей, кортежей и множеств. К примеру, кортежи работают быстрее списков, а множества – быстрее всех остальных типов, вместе взятых, но при этом используют внушительный объем памяти и не поддерживают индексацию.
- Во встроенных методах, которые Python предоставляет для работы с каждым из этих типов, и в универсальных встроенных функциях. Некоторые функции позволяют лаконично и эффективно выполнять достаточно сложные операции – например, проводить параллельную итерацию нескольких коллекций сразу (zip), или получать доступ к элементу и его индексу одновременно (enumerate), либо применять какое-то действие ко всем элементам сразу (map).
- В методах работы с файлами и файловой системой.
Кроме того, необходимо освоить написание пользовательских функций:
- обычных и вложенных, с фиксированным и произвольным количеством аргументов;
- декораторов и замыканий;
- анонимных (lambda);
- рекурсивных.
Обработка данных в Python, как и в любом другом языке, происходит в циклах – нужно разобраться в особенностях и дополнительных параметрах циклов for и while, в условиях и ветвлениях. Во многих случаях циклы можно заменить генераторами и списковыми включениями – эти конструкции тоже стоит освоить на начальном этапе обучения.
Что еще нужно изучить:
- Как запускать Python-код в онлайн-IDE, не требующих установки – Jupyter Notebooks, Google Colab, Repl.it.
- Как установить и настроить десктопную IDE – PyCharm, VS Code.
- Как устанавливать модули, необходимые для решения специфических задач – pandas, numpy и т.п.
Базовые знания Python, приобретенные на первом этапе, позволяют решать любые алгоритмические задачи: сможете написать программу для шифрования текста кодом Цезаря, код для определения победителя в игре с оптимальной стратегией, скрипт для вычисления и визуализации возможных ходов шахматных фигур.
Второй этап: ООП и основы работы с веб-сервисами
Пора зарегистрировать аккаунт на GitHub, разобраться в концепции системы контроля версий и изучить основные команды Git. Хотя GitHub – не единственный хостинг IT-проектов, его с уверенностью можно назвать самым популярным. Один из плюсов сервиса – бесплатный хостинг для статических сайтов GitHub Pages, где можно разместить любой проект объемом до 1 Гб. Многие разработчики используют GitHub Pages для размещения портфолио, резюме и статических блогов, созданных с помощью Jekyll, Hugo, или генераторов на основе Python – Pelican и Lektor.
Чтобы в репозиториях на GitHub поскорее появились первые серьезные проекты, необходимо вникнуть в парадигму объектно-ориентированного программирования и его основные концепции:
- классы;
- объекты;
- наследование;
- инкапсуляцию;
- полиморфизм.
Кроме того, на этом этапе нужно изучить:
- Обработку HTTP-запросов с помощью библиотеки request.
- Получение данных от публичных API.
- Форматы JSON и XML.
- Регулярные выражения (Regex).
- Основы веб-скрапинга и парсинга с BeautifulSoup и XPATH.
Знаний, полученных на этом этапе, должно быть достаточно, чтобы написать:
- код для поиска и обработки данных в древовидных структурах;
- скрипты для скрапинга и парсинга;
- программы для получения и обработки данных публичных API.
Третий этап: основы веб-разработки
Теперь багажа знаний достаточно для создания первых настоящих веб-приложений. Существует несколько фреймворков на базе Python, но бесспорных лидеров всего два – Flask и Django:
- Flask называют микрофреймворком – он содержит абсолютный минимум инструментов, но отличается впечатляющей гибкостью, подходит для небольших веб-приложений. Функциональность Flask легко расширить с помощью установки дополнительных библиотек и модулей.
- Django поставляется с обширным набором модулей и отличается более жесткой структурой. Отлично подходит для создания масштабных веб-приложений со сложной функциональностью. Как и в случае с Flask, возможности Django можно расширить дополнительными модулями. К примеру, Django по умолчанию включает модуль для тестирования на основе unittest, но при желании протестировать Django-приложение можно с помощью дополнительного модуля django-pytest на основе pytest, и точно такой же модуль flask-pytest доступен для Flask.
Оба фреймворка используют шаблонизаторы – инструменты, которые упрощают передачу и обработку на фронтенде данных, полученных от бэкенда. Однако шаблонизаторы не генерируют HTML и CSS, поэтому базовый синтаксис этих языков нужно освоить на этом этапе. Становиться полноценным фронтендером не потребуется, но необходимо понимание того, как интегрировать в Django готовые HTML/CSS, Bootstrap и Tailwind шаблоны.
Одно из главных преимуществ Flask и Django – наличие ORM, прослойки между базой данных и кодом, которая позволяет программисту работать с БД без знаний языка запросов SQL. В то же время оба фреймворка предусматривают возможность работы с базой напрямую – это может потребоваться для создания максимально оптимизированных запросов на SQL. Для создания небольших веб-приложений подходят базы SQLite и MySQL, для более масштабных – PostgreSQL.
Еще один весомый плюс Flask и Django – простота разработки REST API. Самый популярный инструмент разработки API для Django-приложений – Django REST Framework (DRF), однако при необходимости можно использовать FastAPI и Django Ninja, которые обеспечивают более высокую производительность. Для базового тестирования DRF API достаточно встроенного интерфейса, который доступен по адресу http://localhost:8000/api/, для более продвинутого тестирования обычно используют Postman.
Для создания Rest API с Flask используют инструменты Connexion, OpenAPI и Flask-Marshmallow, а для тестирования – Swagger UI. Процесс разработки API на основе Flask выглядит чуть сложнее, чем создание API на базе Django.
Что нужно уметь после завершения этого этапа обучения:
- Проектировать структуру серверной части веб-приложения.
- Создавать несложные веб-приложения на основе Flask и Django – блоги, лендинги, лайт-версии известных соцсетей и сервисов.
- Разрабатывать бэкенд и API для приложений, фронтенд которых сделан на JS-фреймворках React, Vue, Angular.
- Размещать статический контент в CDN.
- Понимать, как пишутся запросы к бэкенду с помощью Fetch или Axios.
- Использовать линтеры (Flake8, Ruff) для «причесывания» и стандартизации кода.
- Писать тесты для проверки работы компонентов приложения и API.
- Разворачивать приложения на Linux сервере с помощью Nginx и Gunicorn.
Четвертый этап: продвинутые инструменты и концепции
В набор более сложных концепций, в которые стоит вникнуть на заключительном этапе, входят:
- Принципы разработки высоконагруженных/асинхронных приложений и микросервисов.
- Управление очередями задач и брокеры сообщений: Celery, Dramatiq, RabbitMQ, Redis, Kafka.
- Веб-сокеты и Django Channels.
- Передача потоковых данных с WebRTC.
- Вебхуки (обратные вызовы).
- CI/CD (непрерывная интеграция и доставка) для Django-проектов: Jenkins.
- Контейнеризация Django- и DRF-приложений: Docker и Kubernetes.
- Безопасность приложений на основе Django и Flask: предотвращение SQL-внедрений, межсайтового скриптинга и подделок запросов.
Знание этих концепций позволит разработать сложный проект — чат-мессенджер для аудио- и видеоконференций, маркетплейс, стриминговый сервис, корпоративную CRM.