Как учить python backend

Карта навыков
PYTHON BACKEND
разработчика

Нажимайте на черные плашки,
чтобы перейти к списку курсов на Stepik

Отправьте запрос под картой,
чтобы добавить свой курс в карту

Изучение Python

Python: основы и применение
Курс посвящен базовым принципам языка Python и программирования в целом. Он хорошо подойдет тем, кто уже может писать простейшие программы на Python или тем, кто до этого программировал на других языках.

«Поколение Python»: курс для начинающих
Курс с кучей тренировочных задач, удобный как для самостоятельного изучения, так и для работы в группе в рамках внеурочной деятельности.

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

Python для начинающих программистов
Знакомство с основами Python. Функции, словари, модули. Написание бота. Обработка файлов и новые модели данных. HTTP-запросы и функции. Деплой и сохранение состояния в боте.

Интернет

Как работает Интернет
Мини-курс для тех, кто хотел узнать, как работают компьютерные сети. Является частью курса «Основы Интернет-маркетинга».

Базовые знания фронтенда

«Mindcraft. Основы HTML и CSS«
Отличный старт для погружения в разработку сайтов. Знания основ HTML и CSS нужны всем, кто хочет научиться создавать сайты.

Основы HTML5 и CSS3
Курс для начинающих верстальщиков сайтов на HTML5 и CSS3. Разбираем реальные макеты, изучаем семантику языка, отрабатываем навыки в тренажере. В курсе более 190 заданий. Из них 150 — решение практических задач.

Веб-разработка для начинающих: HTML и CSS
Курс по основам веб-разработки. Узнаем, как работает интернет, научимся создавать веб-страницы с помощью HTML и CSS и деплоить их в интернет. Содержит домашние задания: мини-проекты для самостоятельного выполнения и проверки.

Web-технологии
Курс «Web-технологии» охватывает широкий спектр технологий и подходов, использующихся при разработке Интернет-сайтов и Веб-приложений. Рассматривается разработка на Node. js с использованием JavaScript, основы PHP, разработка интерфейса с использованием HTML и CSS, использование JQuery, Angular, разработка с TypeScript, основы React.js.

Web-технологии
Курс посвящен разработке серверной части web-приложений, их архитектуре и протоколу HTTP. По итогам курса вы научитесь: разрабатывать приложения на языке python, использовать MVC фреймворки, изучите верстку HTML страниц, погрузитесь в тематику web разработки и сможете выбирать конкретные технологии.

Hexlet: Введение в программирование (JavaScript ES6)
Что такое компьютер на самом деле? Понимает ли он языки программирования? Как писать код и свои программы? Этот курс посвящен ответам на эти и другие интересные и, иногда, странные вопросы. Мы изучим природу компьютеров и кода, и рассмотрим важные фундаментальные концепции, которые помогли родиться современным машинам, мобильным телефонам, интернету… почти всему, с чем мы имеем дело каждый день!

Introduction to JavaScript and React
This course is designed to help students get comfortable with the basics of JavaScript leading to React.

Введение в архитектуру ЭВМ. Элементы операционных систем.
Данный обзорный курс позволяет понять основы функционирования компьютерной техники. В рамках изучения курса слушатель поймет, как выполняются программы на современных компьютерах с самых азов, начиная от простейших логических схем и микропроцессоров и заканчивая современными многопроцессорными и распределенными системами. Курс открыт без дедлайнов.

Введение в Linux
Курс знакомит слушателей с операционной системой Linux и основами её использования. В рамках курса мы покажем как установить Linux на ваш компьютер, расскажем о программах в нем, поработаем в терминале, зайдем на удаленный сервер и рассмотрим еще несколько продвинутых тем. Стоит отметить, что курс не является исчерпывающим и рассказывает только о базовых возможностях Linux, но, несмотря на это, рассказанного материала достаточно для успешного выполнения разноплановых задач в системе Linux.

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

Изучение фреймворка (Django / Flask)

Django на практике
Изучите самый популярный Python-фреймворк, выполните 2 проекта, опубликуйте портфолио!

Разработка сайтов на Flask
Изучите трендовый Python-фреймворк Flask, соберите 3 проекта в портфолио, опубликуйте онлайн.
FLASK + JINJA + SQLALCHEMY + HTTP + BOOTSTRAP + HEROKU

Системы контроля версий

Основы Git
(Mark Zaslavskiy, Artyom Filatov, Anton Filatov, Tatyana Berlenko, Кирилл Кринкин)
Курс описывает наиболее часто используемые команды git, взятые из опыта реальных проектов. Даются примеры и интерактивные задачи.

Самоучитель по GIT (Екатерина Плехова)
Данный курс составляется для внутреннего пользования, однако любой желающий может присоединиться к нему. Enjoy 🙂

Реляционная база данных

Введение в базы данных
Знакомство с методами структурированного хранения данных, основами SQL, принципами использования баз данных в приложениях, обзор нереляционных способов хранения данных.

Свободное погружение в СУБД
Курс для тех, кто уже имеет некоторый опыт проектирования баз данных и разработки приложений и хочет расширить свои знания. Это копия курса «Погружение в СУБД» 2017 года. Но без дедлайнов!

Проектирование баз данных
Теоретические и практические приемы проектирования баз данных для начинающих разработчиков на примере базы автосалона: от концептуальной формы до 4НФ.

Основы SQL
Online-курс по основам SQL. Более 4 часов видео и 260 задач. Насыщенная программа с короткими видео-уроками и большим количеством практики. Изучаем SQL на примере MySQL — одной из самых популярных баз данных

Расширенные возможности SQL
Рассматриваем дополнительные возможности SQL и реляционных баз данных: переменные, транзакции, хранимые процедуры, триггеры и блокировки.

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

Введение в нереляционные базы данных
Данный курс посвящен практическим вопросам использования нереляционных СУБД. Его основной задачей является освоение языков запросов наиболее популярных NoSQL решений и формирование представления о том в каких случаях лучше всего использовать тот или иной продукт. Курс подразумевает много самостоятельной работы и чтения документации!

API

Практикум по математике и Python (только модуль Факультатив)
Практикум для начинающих осваивать Python с наборами дополнительных задач и материалов для углублённого и более детального изучения программирования и математики. Подходит для отработки навыков при обучении анализу данных. Практикум находится на стадии разработки.

Проектный практикум
Лабораторные работы объединены общей темой «веб-сервисы». К каждой лабораторной прилагается поясняющий материал, позволяющий вникнуть в суть задания. В основном лабораторные направлены на работу c REST API + JSON. Итоговой лабораторной работой является создание серверного приложения, реализующего REST APIs и клиентского приложений, вызывающего реализованные REST APIs.

Источник

Python backend. Вид изнутри — Ключевые аспекты веб-разработки на Python

Из чего состоит backend?

Когда сервер получает запрос от браузера, с программной стороны его обрабатывает Web-сервер. Некоторые языки встраивают web-сервер прямо в своё приложение, но большинство интерпретируемых языков использует специальную внешнюю программу. Таких самостоятельных Web-серверов существует несколько, но наиболее популярен Nginx. Он берёт на себя обработку входящих запросов, отдачу статических файлов, распределение запросов между web-приложениями.

В случае Python за web-сервером как правило находится WSGI-сервер, запускающий WSGI-приложения. WSGI или Web Server Gateway Interface — это такая абстракция, согласно которой ответчик на запросы, это Python-функция, принимающая запрос и возвращающая ответ! Звучит просто, не правда ли? Минимальное WSGI-приложение выглядит примерно так:

Web-фреймворк

Показанное Web-приложение пусть и работает, но на любой запрос оно будет возвращать один и тот же текст. Что-то более сложное написать в таком стиле будет проблематично, пусть и выполнимо. Чтобы упростить жизнь типичного backend-разработчика и помочь ему реализовывать типичные приложения, используются фреймворки (frameworks) — библиотеки, задающие готовую структуру приложения. В эту структуру разработчику нужно только вписывать свои кусочки кода, а сам «скелет» приложения оказывается сразу готов к применению. Именно Web помогают писать web-фреймворки. Самые популярные web-фреймворки для Python — это Django и Flask.

Web-фреймворки берут на себя маршрутизацию, упрощают работу с заголовками и данными запросов, формирование ответов в разных форматах, сохранение истории запросов в файлы (для анализа и сбора статистики, для нужд отладки).

ORM и шаблонизатор

Что же ещё находится в бэкенде, кроме машинерии обработки запросов? Чаще всего — ORM и шаблонизатор.

ORM или Object-Relational Mapping, это средство работы с записями в базах данных (БД), представляющие записи в виде понятных для языка программирования объектов.

Источник

Python и веб-разработка: краткое руководство

Как учить python backend. 1*ImA12 wcvNnaX3B8q1I kA. Как учить python backend фото. Как учить python backend-1*ImA12 wcvNnaX3B8q1I kA. картинка Как учить python backend. картинка 1*ImA12 wcvNnaX3B8q1I kA.

За последние несколько лет популярность Python резко возросла, и он даже превзошел Java. С развитием машинного обучения, анализа данных и веб-приложений многие разработчики стали чаще использовать данный язык программирования, так как он обладает множеством полезных библиотек, простым синтаксисом и мобильностью. Без сомнения, сейчас наиболее подходящее время, чтобы научиться работать с Python.

Итак, в данной статье мы ответим на следующие вопросы:

Веб-разработка — что это?

Скорее всего, новички зададутся вопросом, что же такое веб-разработка. Однако сложно определить точный термин, так как веб-разработка в широком смысле подразумевает создание и обслуживание сайтов. Как правило, веб-разработка включает все аспекты, которые связаны с пользователем: интерфейс, серверная часть и бизнес-логика.

Как учить python backend. 0*qgLX. Как учить python backend фото. Как учить python backend-0*qgLX. картинка Как учить python backend. картинка 0*qgLX.

Почему Python подходит для веб-разработки?

Преимущества разработки веб-приложений в Python:

Другие языки программирования для веб-разработки:

Как учить python backend. 0*UXB0FRwCInUb1G98. Как учить python backend фото. Как учить python backend-0*UXB0FRwCInUb1G98. картинка Как учить python backend. картинка 0*UXB0FRwCInUb1G98.

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

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

Веб-фреймворки Python используются только в бэкенде для серверных технологий, помогая в маршрутизации URL-адресов, HTTP-запросах, доступе к базам данных и веб-безопасности. Фреймворк не считается обязательным, однако мы рекомендуем использовать его, так как он поможет разработать сложные приложения за достаточно короткое время.

Какие веб-фреймворки Python наиболее популярны?

Django — это быстрый, безопасный и масштабируемый веб-фреймворк Python, который предлагает высокий уровень и открытый исходный код. Django обладает мощной поддержкой сообщества и подробной документацией.

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

Django отличается гибкостью. Он позволяет работать как с минимально жизнеспособным продуктами, так и с более развитыми компаниями. Instagram, Dropbox, Pinterest и Spotify — все эти компании также используют Django.

Flask считается микрофреймворком, который представляет минималистичный веб-фреймворк. Но по сравнению с Django он не обладает такими функциями, как механизм веб-шаблонов, авторизация учетной записи и аутентификация.

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

Идея Flask заключается в том, что данная платформа предоставляет только компоненты, необходимые для создания приложения. Некоторые функции включают встроенный сервер разработки, отправку запросов Restful, обработку Http-запросов и многое другое. Flask также является распространенным и мощным веб-фреймворком, поскольку он используется крупными компаниями, такими как Netflix, Linkedin и Uber.

Другие известные фреймворки

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

Кроме того, спросите себя, хотите ли вы создать «основополагающую» кодовую базу или же сформировать её основы? Если вы предпочитаете первый вариант, то стоит использовать Django, а если второй, то Flask. Но стоит отметить, что оба инструмента обладают одинаковой функциональностью.

Библиотеки Python для веб-разработки

Ниже представлено несколько полезных библиотек Python для веб-разработки:

Как учить python backend. 0*8 qkBPK39 Ookn3t. Как учить python backend фото. Как учить python backend-0*8 qkBPK39 Ookn3t. картинка Как учить python backend. картинка 0*8 qkBPK39 Ookn3t.

Дорожная карта для веб-разработки с использованием Python

Шаг 1:HTML + CSS

В начале веб-разработки стоит изучить HTML и CSS, которые являются основой обучения при создании сайтов. Гораздо важнее научиться структурировать адаптивные статические страницы, чтобы начать свой путь веб-разработки. Также полезно узнать про такие понятия, как Интернет, HTTP, браузер, DNS, хостинг и многое другое.

Вы можете также изучить такие CSS-фреймворки, как Materialize или Bootstrap. Они значительно ускорят вашу работу.

Шаг 2: Javascript

Следующий шаг, который необходимо сделать — это изучить Vanilla Javascript. Вам стоит ознакомиться с такими базовыми концепциями, как типы данных, переменные, общие соглашения, работа со строками, арифметика, управляющие операторы, циклы и т.д. Знание этих основ упростит применение Javascript к коду на стороне клиента.

Шаг 3: DOM & jQuery

Затем вам стоит научиться управлять еще одной библиотекой Javascript — jQuery. С ее помощью процесс манипулирования DOM станет гораздо проще. Теперь у вас есть представление о том, как создать динамические страницы.

Фронтенд-фреймворк

Для создания функционального веб-приложения с полным стеком рекомендуется изучать фронтенд-фреймворк. Такой навык часто является обязательным требованием при найме front-end или full-stack разработчика.

Шаг 4: Python

Теперь перейдем к бэкенду. Прежде чем приступить к манипуляциям с DOM, необходимо знать основы Python и Javascript. Эти базовые знания подготовят вас к Django. Изучение Python не вызывает трудностей, так как многие концепции напоминают Javascript.

Шаг 5: База данных Django +

С помощью Django вы сможете настроить бэкенд-среду и сформировать бизнес-логику. Вам также стоит узнать о том, как создать запросы, изучить базу данных SQLite и CRUD- функцию. В таком случае, вы сможете разработать приложение с полным стеком.

Как создать первое веб-приложение в Python

Запустите приложение Flask «hello world» в качестве введения в веб-фреймворки Python

Установка Flask

Первое, что необходимо сделать — это установить Flask. В зависимости от вашей версии Python, вам придется использовать pip или pip3.

Приложение Flask

Затем, создайте файл под названием hello.py со следующим кодом:

Заключение

Теперь вы имеете представление о том, как использовать Python для веб-разработки. Однако обучение на этом не заканчивается. Поэтому продолжайте искать надежные ресурсы, онлайн-курсы и практические проекты, чтобы улучшить свои навыки.

Источник

Python — серьезный язык для разработки backend

Как учить python backend. 71b9ff31e2d7366340f2af491bb80a55. Как учить python backend фото. Как учить python backend-71b9ff31e2d7366340f2af491bb80a55. картинка Как учить python backend. картинка 71b9ff31e2d7366340f2af491bb80a55.

Всем привет! Меня зовут Денис Аникин, я тимлид в команде Chat в Райффайзенбанке. А также представитель внутреннего Python-сообщества, так называемый «community lead» (об этом как-нибудь в другой раз). В этой статье я хотел поговорить про отношение к Python среди разработчиков и обсудить все основные претензии, которые очень давно следуют за языком по пятам.

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

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

Также я вспоминаю нашу внутреннюю шутку, которая сформулирована моим коллегой, Даниилом: «Денис начинает свой понедельник с очередного доклада на тему, почему Python — серьезный язык». Я долго думал над этой шуткой (извините, я не гений), а потом решил: почему бы и не начать с этого статью? 🙂

Поэтому я хочу поговорить про проблемы Python и обсудить накопившиеся к нему основные претензии.

Динамическая типизация

За динамическую типизацию Python ругали практически все — это одна из крупнейших претензий к нему в среде разработчиков. Но на самом ли деле динамическая типизация — такое уж зло? Как минимум, разработка на языках динамической типизации проще, быстрее и зачастую приятнее — конечно, это субъективный тезис, но он имеет право на существование.

Какой-нибудь JSON-парсер на языке со статической типизацией будет гораздо более многословным и тяжелым в написании, чем на языке с динамической типизацией (ох уж эта элегантная связка orjson и pydantic). Где-то, где мы в Python отобьемся манипуляциями в рантайме, придется подтаскивать большие объёмы кодогенерации.

Как учить python backend. 701ea60ccb6da79ba1dcb8208f1753c7. Как учить python backend фото. Как учить python backend-701ea60ccb6da79ba1dcb8208f1753c7. картинка Как учить python backend. картинка 701ea60ccb6da79ba1dcb8208f1753c7.Аннотации — благо

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

При этом Uncle Bob говорил, что тесты на бизнес-логику не отменяются статической типизацией, да и в Python теперь типы можно проверять статически с помощью аннотаций и MyPy. Конечно, мы пишем больше тестов и тщательно проверяем бизнес-логику, но, на мой взгляд, это идет на пользу сервисам. Всё очень неоднозначно.

Да, у нас есть gradual типизация. MyPy, typing, аннотации типов — это позволяет нам значительно улучшить качество кода, уберечься от массы ошибок, получить экстрафункциональность языка. Например, в Python нет констант, но с помощью связки typing и MyPy можно получить их аналог. Аннотации в Python можно анализировать как статически, так и динамически: в typing есть интроспекция, появляются проекты вроде Beartype.

На базе аннотаций типов построены современные фреймворки, такие как Pydantic (строгие схемы валидации в рантайме) или FastAPI. Я считаю вот так: Python в связке с аннотациями типов являет нам gradual типизацию и тем самым предоставляет здоровый компромисс между преимуществами динамической и статической типизаций. Он не порождает хтоническое чудовище, каким его часто объявляют в интернете. Напротив, нам дают способ писать и быстро и надежно, здесь и сейчас.

Где-то тут к нам подкрадывается вопрос о типобезопасности. Полагаю, что аннотации типов проверку на типобезопасность не пройдут, хотя вопрос это довольно сложный, не для моего уровня понимания. На текущий момент ошибок типов с MyPy и аннотациями типов я не встречал, но уверен, что где-то при определенном стечении обстоятельств это возможно. Единственное, что видно у нас — увеличение надежности нашего кода (пока мы пишем наши бэкенды, аннотации часто помогают отлавливать ошибки), умение гибридно использовать аннотации и почти никаких type error в коде.

Также стоит вспомнить, что люди, предпочитающие статическую типизацию, часто говорят, что для маленьких проектов динамическая типизация «не страшна», а на действительно больших мы начинаем чувствовать её недостатки.

Честно говоря, пункт уже раздулся, поэтому я просто набросаю свои мысли списком:

Статический анализ хорош везде;

Как мы уже сказали выше, в Python есть статистический анализ, пускай и немного уступающий «настоящему» выводу типов — «настоящей» типобезопасности. Мы используем его в полный рост, и с ним можно писать действительно большие проекты

Мы живем в эпоху, когда микросервисная архитектура очень популярна, поэтому проблема проектов в сотни тысяч и миллионы строк кода уже не так сильна. И накал претензий к динамической типизации, соответственно, куда ниже. Даже если мы их принимаем.

Скорость

Этот аспект языка часто подвергается критике очень многими разработчиками. И если динамическая типизация — сложная и неоднозначная тема для обсуждения, то скорость — то, о чем говорят вообще все.

Если посмотреть на синтетические бенчмарки, то Python часто можно обнаружить в самому низу турнирных таблиц. Многие разработчики считают это Ахиллесовой пятой Python, что не может не сказываться на восприятии языка

Когда обсуждают скорость Python, обычно вспоминают про C++, ведь на нем все бенчмарки выглядят в сто раз лучше, чем на Python. Но если мы начнём разбираться в вопросе, то станет ясно, что скорость Python на данном этапе — не такая уж проблема. Конечно, Python действительно медленный в CPU-bound задачах. И тут у вас в голове возникает мысль — если он такой медленный, то это точно проблема!

На мой взгляд, дело обстоит так. В современной web-разработке полно i/o-bound нагрузки: часто мы принимаем запросы по сети, отправляем их в сеть, читаем из БД, пишем в БД, оперируем с файлами и так далее.

Как учить python backend. image loader. Как учить python backend фото. Как учить python backend-image loader. картинка Как учить python backend. картинка image loader.Одни из действующих «лиц» CPU-bound и IO-bound задач

Для этого типа задач у Python есть прекрасный ответ — асинхронный подсет языка, нативный async/await, event loop из коробки и uvloop, для тех, кто хочет ещё быстрее. С помощью этой части Python мы можем эффективно утилизировать ресурсы CPU. А для исключительно CPU-bound в мире Python тоже много «припарок»: multiprocessing, subprocess, Pypy, Cython, Numba и так далее. Поэтому асинхронный Python работает очень даже быстро.

Подведу субъективный итог: многое, если не всё, можно смело писать на Python, а CPU-bound, при необходимости (если стандартная библиотека не тянет), переписывать на более быстрых языках и ставить эти микросервисы-воркеры за очередями сообщений. Разве это не идеальное сочетание?

Язык для новичков

Довольно часто Python считают языком для новичков. Ему учат на каждом шагу, в мире миллион курсов по Python. Топовые блоггеры обещают обучить ему чуть ли не за один вечер, говорят, что все сразу же получают серьезную зарплату, уютный офис и счастливое будущее. На этом слишком радужном фоне за Python прочно закрепился имидж языка для новичков, где достаточно написать пару for и def, объявить несколько переменных — и вот ты уже профессиональный Python-разработчик уровня middle. А потом «перерастаешь» и идешь писать на «серьезном языке».

Это все какой-то интернет-морок, потому что Python, как и любой другой язык, требует освоения, изучения, времени.

В самом языке у нас целая куча всяких знаний, нюансов, сложностей и декларативных частей. Судите сами:

У нас есть протокол итерации. Конечно, можно сказать, что итератор — не совсем часть функционального программирования, что итераторы есть и в других языках. Но я хочу подчеркнуть, что итераторы — это не совсем просто, особенно вначале, особенно когда нам нужно реализовывать свои.

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

Метаклассы. Классы, создающие классы? Функция type, она же класс? А тип type — тоже type? Все классы создаются type? Популярный сценарий применения — ORM? Можно, пожалуйста, мне другой «простой» язык?

Библиотека functools в полном составе 🙂

Генераторы. Можно спрашивать на собеседованиях: «А для чего вы используете генераторы?» — и услышать очень много разных ответов. Некоторые вообще не понимают, зачем они нужны. А ведь генератор поддерживает протокол итерации, в него можно слать значения, yield from — ну, сами все понимаете.

Контроль зависимостей. Venv, virtualenv, pipenv, poetry, pip tools, pdm, pipx, pyproject и так далее.

Инфраструктура вокруг Python. Крайне полезно для работы было бы знать, что такое pypa, pypi, psf — а это ещё отдельный пласт знаний.

PEP. Иногда спрашиваю людей: «А что такое PEP?», — и самый частый ответ: «Стандарт кода». Даже опытные разработчики помнят PEP8 в лучшем случае.

Около сотни магических методов. Хорошо было бы в них просто ориентироваться.

Могущественная интроспекция и «мета-язычные» вещи. Runpy, importlib, trace, traceback, gc, inspect, sys, typing.get_type_hints, typing.get_origin, typing.get_args.

Новые вещи. Оператор «морж», pattern matching.

Конкурентное выполнение. Threading с кучей нюансов, multiprocessing, subprocess, свежий communicating sequential processes «паттерн» (PEP 554).

GIL. Комментарии не нужны, но они будут (я не умею лаконично, помогите).

Особые языковые возможности. Dict, list, set comprehensions, generator expressions, например.

Асинхронность. Это отдельный «подсет» языка, где уже целая своя вселенная с кучей пакетов и даже отдельными (не встроенными в язык) концепциями, вроде structured concurrency.

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

Динамическая типизация. Строгая (местами «обходимая» полимформизмом, или неявным приведением int к float), утиная типизация, typing.Protocol (про него выше), gradual типизация. Скажите мне — это правда так просто?

Как учить python backend. 6206e421e2af3577b4c40f3a86cf78ce. Как учить python backend фото. Как учить python backend-6206e421e2af3577b4c40f3a86cf78ce. картинка Как учить python backend. картинка 6206e421e2af3577b4c40f3a86cf78ce.Типичный диалог (а иногда и монолог) в интернете

И я бы мог ещё продолжать какое-то время. Этот список я составил не для того, чтобы отпугнуть от языка, но мне хочется продемонстрировать, что Python — не такой простой язык программирования. Действительно, на нём легко начать, у него низкий порог первоначального входа. Но это вовсе не язык только лишь для новичков, такое отношение к нему порождает безответственный подход к разработке. Язык взял много хорошего от других, он не простой, со своими плюсами и минусами, очень красивыми местами и не самыми лучшими. И всё это требует освоения.

Можем сказать, что мы снова про скорость. Когда заходит разговор о тредах и Python, о скорости и Python, сразу на сцену выползает наш любимый и обожаемый GIL.

Ограничения GIL известны всем — в Python при попытке распаралеллить любую CPU-bound нагрузку с помощью тредов, разработчики неизбежно сталкиваются с тем, что в один момент у всегда будет работать только один поток. Тема абсолютно выдающаяся и имеющая за собой такой поток реминисценций, что про это даже немного неловко говорить, — но поговорить нам, всё-таки, в рамках статьи нужно.

Издалека проблема GIL — и сложная, и, как кажется, практически нерешаемая (мы все помним, что на этот счет сказали Гвидо, Дэвид Бизли; UPD: тут недавно вышла статья, говорят о nogil… но давайте не будем об этом).

В современных бэкендах и Python накал страстей вокруг GIL сильно стих — веб-сервисы очень часто по своей природе могут быть асинхронными, а для этого у нас есть множество чудесных фреймворков, вроде FastAPI, поэтому ограничения GIL нас не так сильно касаются. При этом горизонтально мы масштабируемся процессами, как в синхронных бэкендах, так и в асинхронных. У многих есть кубер — и там мы масштабируемся тоже процессами, только над ними стоит абстракция уровнем выше — pod.

Как учить python backend. f26a81dc279bb9b4ad637168a92929eb. Как учить python backend фото. Как учить python backend-f26a81dc279bb9b4ad637168a92929eb. картинка Как учить python backend. картинка f26a81dc279bb9b4ad637168a92929eb.Изрядно поношенный GIL

Некоторые разработчики спрашивают, зачем нам тогда треды?

В современном Python их используют для одной интересной штуки — на них можно делать wannabe-асинхронный код, при этом не делая асинхронный код, как ни странно. То есть можно написать на тредах что-то, что занимается интенсивной i/o-нагрузкой. И тогда внезапно все станет асинхронным за счет того, что GIL отпускается на i/o-операциях.

Это важное примечание, так как это сложный и неочевидный нюанс работы GIL — он описан в документации, но кто же её читает — шутка :). Но благодаря ему мы можем получить преимущество даже в синхронном коде, а также не блокировать петлю событий, когда у нас возникает потребность вызвать синхронное i/o в петле событий (вспомним про запись файлов, привет экзекьюторам).

Python — «неказистый язык для набрасывания прототипов на Django»

Частое мнение в интернете — Python годен только для быстрого, реактивного набрасывания прототипов на Django, а все остальное удел «серьезных языков» (тм). И это ещe одно, с моей точки зрения, не очень корректное суждение.

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

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

Pytest — это прекрасный фреймворк для написания тестов и яркий представитель этого тулсета. Он позволяет выстраивать очень сложные тестовые сценарии с инверсией зависимостей всего с помощью двух инструментов — fixtures и parametrize. С их помощью можно делать очень сложные тесты — подробно изучать производительность и бизнес-логику системы.

В тестировании, помимо Pytest, у нас есть Hypothesis — отличный фреймворк для fuzzy, property тестирования. Фреймворк настолько впечатляет, что недавно, на Python Language Summit 2021, стало известно, что его используют core developer’ы и с помощью него нашли ошибки в PEG парсере самого Python.

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

Для Python существует библиотека для мутационного тестирования mutmut. Если вы вдруг с ней не сталкивались — посмотрите, это очень интересный инструмент. С его помощью можно проверять ваши тесты через небольшие изменения в коде — я бы назвал это мета-тестированием.

Вообще, в Python есть огромное количество вспомогательных библиотек для тестирования — Faker, Factory boy, Mixer, Seed, куча расширений для Pytest — например, для параллелизации. Поэтому говорить, что Python можно использовать только для быстрого прототипирования на Django — немного некорректно.

Безопасность

Как-то раз нам написали комментарий, что за Java и C# стоят крупные компании, бизнес, а за Python только Гвидо и никакой ответственности нет. Видимо, это означало, что языком пользоваться страшно и от этого он абсолютно несерьезен.

Мне кажется, этот вопрос довольно сложный. Крупные проблемы языковой среды — не такой уж и частый сценарий. Но вряд ли при серьезных проблемах разработчики на Java или C# моментально получат их решение.

А ещё можно вспомнить, что современный софт пишется с использованием огромного количества Open Source библиотек, которые пишутся сторонними разработчиками, лежат в открытом доступе — и баги там случаются часто, а гарантий их исправления нет и быть не может. Тогда как серьезные проблемы Python, в случае их возникновения, точно будут исправлены. К тому же у Python «сжался» релизный график.

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

Популярность

Популярность языка программирования часто оценивают на результатах рейтингов. Поскольку вокруг них ходит огромное количество споров, я решил проанализировать почти все известные рейтинги по популярности языков.

Как учить python backend. image loader. Как учить python backend фото. Как учить python backend-image loader. картинка Как учить python backend. картинка image loader.У нас есть аналитика GitHub, здесь Python сразу за JavaScript Как учить python backend. image loader. Как учить python backend фото. Как учить python backend-image loader. картинка Как учить python backend. картинка image loader.Google-тренды довольно наглядно показывают, что Python очень долго рос все эти годы и умудрился своей неспешной змеиной «походкой» обогнать мощных конкурентов Как учить python backend. image loader. Как учить python backend фото. Как учить python backend-image loader. картинка Как учить python backend. картинка image loader.Рейтинг PYPL (некоторые говорят, что он не очень объективен) Как учить python backend. image loader. Как учить python backend фото. Как учить python backend-image loader. картинка Как учить python backend. картинка image loader.Любимый многими RedMonk. Кто-то считает его довольно объективным Как учить python backend. image loader. Как учить python backend фото. Как учить python backend-image loader. картинка Как учить python backend. картинка image loader.Менее известный рейтинг IEEE Spectrum, который агрегирует данные из 11 источников, включая (но не только) некоторые из описанных выше и ниже Как учить python backend. image loader. Как учить python backend фото. Как учить python backend-image loader. картинка Как учить python backend. картинка image loader.Stackoverflow говорит, что по популярности Python сейчас третий Как учить python backend. image loader. Как учить python backend фото. Как учить python backend-image loader. картинка Как учить python backend. картинка image loader.Вот и всем известный и бесконечно критикуемый TIOBE

Причин роста много, но кроме известных, для себя я предпочитаю выделять такую: одна из сильнейших черт Python в том, что он по пути вбирал в себя огромное количество разных парадигм и подходов, зачастую беря из них если не лучшие, то как минимум хорошие куски. Именно поэтому он умудряется быть таким универсальным и при этом довольно дружелюбным. Хм, дружелюбный сосед-питон? (шутка, предоставлена ЗАО «бумер-кринж»).

И о минусах

Что? Секундочку, ведь я только что активно поддерживал Python, а теперь начинаю перечислять минусы? Дело в том, что мне не хочется выглядеть как фанатик в розовых очках. Поэтому я просто назову уже не совсем типовые вещи, но тоже часто встречающиеся:

GIL всё ещё нас беспокоит. В итоге I/O-bound с небольшим количеством CPU-bound может привести к тому, что некоторые сигналы будут не доставлены.

У нас нет оптимизации хвостовой рекурсии (а нужна ли она?). Это большой топик.

Некоторые не любят пробелы… вспомним Whython. Я до сих пор не понимаю, в чем проблема — я везде код форматирую пробелами, а в Python они дают возможность избежать написания «лишних» скобок. Но не признать того, что есть недовольные, нельзя.

Lambda — есть разработчики, которые хотели бы видеть их как функции. Тогда как в Python они устроены в качестве выражений.

Python 2 и 3. Это неактуальный топик на текущий день, и Python 3 принес столько невероятных вещей, что о второй версии говорить нет желания. Но стоит признать — это было больно, и многие ещё помнят, насколько болезненно дался переход. Некоторых это отвращает от языка: подсознательно ты ждешь Python 3 vs 4.

Специфический подход к ООП.

Смешение парадигм даётся не всегда просто.

Я не буду сейчас пытаться разбираться ещё и в этих пунктах, но это всегда повод для отдельной дискуссии. Возможно — в комментариях.

Небольшие итоги

Я хочу сказать, что Python, на мой взгляд, надежен для большинства кейсов, с которыми мы сталкиваемся в бэкенд-разработке. С поправкой на хайлоад, конечно.

Python используется большинством авторитетных компаний, таких как Google и Яндекс. При этом популярность языка продолжает расти, а так же Гвидо недавно на Python Language Summit 2021 обещал, что с поддержкой Microsoft он сделает Python быстрее раз в пять, во многом с помощью jit. Может быть из конца списка языков в бенчмарках мы переместимся в середину, и уж там то точно заживем.

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

Python жутко популярен и продолжает расти. Потенциал его роста не исчерпан.

Для меня Python — язык для написания бэкенда номер один. Язык, с которого я начинаю любой бекенд в 2021 и только в каких-то исключительных ситуациях беру другие.

А ещё на Python очень приятно писать код — и этого совершенно не стоит стесняться.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *