Код
#статьи

Для каких задач подходит Python: разбираемся вместе с NASA и опытными разработчиками

Python называют универсальным языком программирования. Он действительно подходит почти для любых задач или это просто миф?

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

Невероятная популярность Python

«Я точно не собирался создавать язык, предназначенный для массового применения», — сказал как-то Гвидо ван Россум, создатель Python. В общем, он не специально :) Сегодня Python — один из самых популярных языков программирования. Например, он несколько раз становился языком года по версии TIOBE.

Индекс TIOBE показывает популярность языков программирования. Рейтинги основаны на количестве специалистов, курсов и библиотек

По количеству проектов на GitHub он тоже держит отличные позиции — в 2020 году разменял свой миллион: больше проектов только у JS. То есть и на GitHub это самый популярный язык программирования, если вы понимаете, о чём мы ;)

Pinterest и Instagram* были написаны на Python. В ЦРУ использовали Python для создания своего хакерского инструментария, в Google — для поиска по веб-страницам, в Pixar — для производства фильмов, в Spotify — в рекомендательной системе. А ещё на Python кодят NASA и их подрядчики.

И это вполне оправданный выбор — помимо лаконичности, качества кода и низкого порога входа, в Python есть ещё одна киллер-фича: библиотеки практически для всего на свете — от разработки игр до астрономии и расчёта генетических алгоритмов (тот же DEAP). Шутка ли — участники комьюнити уже загрузили в сеть более 145 тысяч библиотек. Такими темпами скоро можно будет не писать программы на Python и он станет no-code-инструментом :) Плюс Python может давать выигрыш в скорости создания программ по сравнению с другими языками в два или три раза.

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

😍  — идеально подходит.

😊  — вполне хорош.

🤨  — есть ограничения.

🤬  — к чёрту ваш Python (спойлер: этот смайлик больше не появится в статье).

Автоматизация и скрипты

Один из мифов о Python гласит, что это язык сценариев, а его конкуренты — Perl, Ruby, Bash, Zsh и Lua. Python и правда позволяет легко автоматизировать задачи и писать скрипты, да и файлы с Python-кодом часто называют сценариями, а не программами.

Михаил Корнеев

Тимлид в компании BestDoctor и автор YouTube-канала «Хитрый питон»

«Python — язык-клей, на котором можно быстро всё выстроить и объединить. Например, моему знакомому нужно было автоматизировать работу в Trello: ставить задачи, передавать статистику, строить графики, присылать напоминания при задержке сроков и так далее. Мы очень быстро нашли готовую Python-библиотеку для работы с Trello — и он выполнил эту задачу буквально за несколько дней».


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

Алексей Фирсов

Руководитель Python-практики в компании S7 TechLab

«Я играю в Factorio, там надо возить ресурсы с помощью поездов, управляя сигналами путей. Нужно было постоянно делать это вручную. Как-то я заскучал и написал на Python код, который загрузил в «Яндекс.Станцию». Теперь, когда я говорю: «Алиса, включи станцию угля», — у меня автоматически включается эта станция. Я сделал это за два дня.

А недавно знакомая попросила написать ей бота для онлайн-магазина. Он должен вести клиента по определённому маршруту и предлагать товары. Это заняло всего 10 часов».


Оценка: автоматизация и скрипты — 😍

Машинное обучение

В ML, Big Data, AI и других модных словах Python — настоящий король. Он легко обходит главных конкурентов — R и Julia (см. нашу статью о языках программирования для ML). На Python собрано больше всего ML-проектов на GitHub. Лидирует он и в авторитетном рейтинге Towards Data Science.

А ещё у Python куча специализированных библиотек.

  1. Scikit-learn, на которой Spotify делает свою рекомендательную систему.
  2. Ramp на основе Pandas для быстрого прототипирования в ML.
  3. Культовая библиотека для машинного обучения TensorFlow, разработанная исследователями из группы Google Brain в рамках Google AI. Её используют для создания алгоритмов машинного обучения и моделирования сложных процессов.
  4. PyTorch для создания нейронных сетей.

Алексей Некрасов

Лидер направления Python в МТС, программный директор направления Python в Skillbox

«Я давно занимаюсь инвестициями — в «Тинькофф.Пульсе» можете найти меня под ником znbiz, а с недавних пор я ещё и разрабатываю свою платформу для управления инвестиционными портфелями. Вот как мне помог Python:

  1. Нужны были исторические данные — написал парсеры на Python.
  2. Нужно было сделать модель и обучить её на данных — и тут тоже мне помог Python.
  3. Нужно получать уведомления (удобнее всего через Telegram) — написал Telegram-бота на Python.
  4. Понадобился бэк для выгрузки портфелей — да Python именно для этого и создан».

Оценка: машинное обучение — 😍

Анализ данных

В Python-библиотеках есть всё необходимое для работы с данными и их визуализации. Например, чтобы быстро создавать структуры и управлять ими, используют библиотеку Pandas. А визуализируют их с помощью Matplotlib, Seaborn или Plotly. Они позволяют рисовать много разных диаграмм и матриц.

Одна из фундаментальных библиотек — NumPy, она подходит для сложных вычислений и поддерживает многомерные массивы. Для работы с многомерными данными также используют набор инструментов PyOD, для индексации документов на естественном языке — Gensim, а со статистическими расчётами отлично справляется SciPy.

Поэтому Python по праву возглавляет рейтинги языков программирования для Data Analysis.

Также в Python предусмотрены интерфейсы для всех популярных реляционных баз данных — Sybase, Oracle, Informix, ODBC, MySQL, PostgreSQL, SQLite и так далее.

Сергей Гилев

Директор по аналитике компании Playkot

«Python — идеальный инструмент для анализа данных в любой сфере. Это было понятно, ещё когда я учился в университете на мехмате и изучал язык С. Я хотел освоить Python, но тогда у меня не было реальных задач, поэтому я придумал себе задачу сам. Как раз набирал обороты Instagram*, и я увидел, что мои фото получают разное количество лайков. Мне стало интересно проанализировать, от чего зависит их количество.

В то время я ещё почти ничего не знал про Python и анализ данных. Но благодаря этой задаче разобрался с API Instagram*, освоил пакет request, научился работать с БД из Python. В итоге регулярно собирал данные, сколько лайков и комментариев набирали фотографии, — потом это пригодилось в работе».


Оценка: анализ данных — 😍

Драйверы и программирование железа

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

Драйверы на Python пишут для различных ОС — например, вот интересный пост о драйверах PlayStation, написанных на Python под Linux. У некоторых брендов есть даже свои Python-библиотеки с набором модулей — как, например, у компании NI, которая делает оборудование и ПО для автопрома, космоса, оборонки и энергетики.

Правда, у Python есть большая проблема — низкая скорость исполнения. Поэтому драйвера на нём подходят лишь для тех устройств, которые не особо требовательны к ресурсам. Под видеокарты драйвера обычно пишут на более скоростных и низкоуровневых языках — C, C++, Assembler.

Алексей Фирсов

Руководитель Python-практики в компании S7 TechLab

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

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


Оценка: драйверы и программирование железа — 🤨

Прототипирование

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

Кроме того, с точки зрения Python-программ компоненты, написанные на Python и С, выглядят одинаково. Поэтому нередко систему вначале быстро собирают и тестируют на Python, а потом уже переносят самые требовательные к ресурсам компоненты на компилируемые языки типа С или C++.

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

Алексей Фирсов

Руководитель Python-практики в компании S7 TechLab

«Для любого прототипа подойдёт Python, но только до достижения определённого количества пользователей, которые одновременно будут работать с сервисом. Для меня это планка в 10 тысяч человек. Когда она будет пройдена, стоит подумать про Go. Хотя возможностей Python может хватить и для этого числа пользователей — всё зависит от проекта.

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


Оценка: прототипирование — 😍

GameDev

Хотя стандартом отрасли считаются языки С и C++, Python также можно встретить в игровой индустрии. Да, на Python не пишется ядро игр, но его применяют для описания логики и сценариев. Например, на Python пишет игры компания CCP Games — та же MMORPG EVE Online почти полностью написана на «удаве». При этом в игре одновременно находится от 15 до 50 тысяч игроков — и она неплохо выдерживает такую нагрузку.

Python используют и в культовом World of Tanks — для некоторых компонентов интерфейса и внутриигровых скриптов. Например, код на Python отвечает за состояние маркеров и прицелов (для каждого типа есть свой Python-класс). А вот за расположение маркеров и прицелов на экране отвечает уже клиентский C++-код.

Чаще всего Python используется в разработке игр как дополнительный, встраиваемый в движок скриптовый язык. Программирование игр и создание мультимедийного контента возможно с помощью библиотек pygame, cgkit, pyglet, РуSoy, PandaBD. Но всё-таки Python — далеко не самый популярный инструмент для геймдева. Делать на нём сложную красивую графику и движки требовательных к ресурсам игр — не лучшее решение.

Оценка: GameDev — 🤨

Минусы Python

Одним из недостатков Python называют его интерпретируемость. Это замедляет работу масштабных проектов. Считается, что, если ваш проект рассчитан на плотную нагрузку, вам больше подойдут Go или C++ — у скомпилированных языков процесс обработки происходит быстрее. По этой же причине опытные разработчики не советуют обрабатывать видео на Python.

Алексей Фирсов

Руководитель Python-практики в компании S7 TechLab

«Я бы не советовал делать на Python сложный рендеринг видео — например, как на YouTube. Python всё равно проиграет в скорости».


Но у интерпретируемости есть и преимущество — писать программы на Python гораздо быстрее, а объём кода обычно в 3−5 раз меньше аналогичных листингов Java и в 5−10 раз меньше эквивалентного кода на C++.

Зачастую Python-код в 1000 раз медленнее аналогичного кода на C/C++. Он не подходит для ПО, которое работает в режиме реального времени и требует минимальных задержек. Тем не менее Python уже неоднократно оптимизировали, и в большинстве сфер он работает достаточно шустро.

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

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

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

Алексей Фирсов

Руководитель Python-практики в компании S7 TechLab

«Код, написанный новичком, будет корявым — и хотя он будет работать, потом в этом коде будет тяжело разобраться. Потому что Python даёт карт-бланш: ты можешь делать всё. А раз можно написать код плохо, то большинство напишет плохо, потому что будет лень писать хорошо».

Так для чего же подходит Python

Python — действительно универсальный инструмент. Его с удовольствием используют в проектах по машинному обучению и аналитике данных. Применяют для автоматизации, прототипирования и написания драйверов. Правда, в обработке видео, 3D-графике и GameDev у него есть серьёзные ограничения. Тем не менее Python задействуют и в таких проектах — используют для некоторых компонентов интерфейса и внутриигровых скриптов.

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

* Решением суда запрещена «деятельность компании Meta Platforms Inc. по реализации продуктов — социальных сетей Facebook* и Instagram* на территории Российской Федерации по основаниям осуществления экстремистской деятельности».
Нейросети для работы и творчества!
Хотите разобраться, как их использовать? Смотрите конференцию: четыре топ-эксперта, кейсы и практика. Онлайн, бесплатно. Кликните для подробностей.
Смотреть программу
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована