На Quora относительно недавно задали вопрос «What is Python not good for?». Я бы хотел сказать, что Python хорош для всего. Но это неправда. Python во многих областях — второй. Не так много областей, где Python — номер один.
К примеру, Go сейчас гораздо больше подходит для веб‑разработки, чем Python. Его довольно легко выучить, его гораздо легче деплоить. В Go есть достаточное количество «батареек» для любого веб‑приложения. Тем не менее Python остаётся второй опцией.
Даже в области микроконтроллеров Python будет моим вторым выбором после C — благодаря MicroPython. Технически это не Python, но он довольно близок, чтобы считать его Python‑ом.
В машинном обучении и больших данных Python действительно номер один без особых конкурентов. Для этого есть несколько причин:
- под Python есть библиотеки практически для всего — «батарейки включены»;
- для него есть оптимизированные библиотеки для вычислений и манипуляции данными;
- Python — это язык‑клей, который позволяет соединять разнородные системы в одно целое.
Для чего же Python не так хорош? Я бы назвал три области:
- UI (десктопные приложения);
- мобильную разработку;
- разработку игр.
Все три области, которые я выбрал, так или иначе связаны с взаимодействием конечного пользователя с приложением. Для всех этих областей можно сделать приемлемое по качеству приложение на Python. Но оно того не стоит — во всяком случае для продакшена.
User Interface
Какой лучший язык для UI? Зависит от платформы. Но Python не появится в списке ни для одной.
- Для веба, во всяком случае пока, выбора нет: JavaScript — единственный вариант. WebAssembly всё ещё находится на ранней стадии. И, насколько я знаю, там нет поддержки Python.
- Если говорим про десктоп: Swift — для Mac, C# — для Windows.
- Linux? C/C++.
- Нужно что‑то кроссплатформенное? Используйте C/C++.
Я не говорю, что для Python нет GUI‑библиотек. Они есть. И их можно использовать, если нужно сделать что‑то для себя или для других разработчиков: они смогут потратить время на решение проблем с ним, если ваше приложение будет им очень нужно.
Но обычные пользователи не очень заботятся о том, соответствует ли приложение стилю платформы. Пока оно работает хорошо, они даже не заметят, что вы используете ненативные элементы управления. Но если оно будет требовать каких‑то усилий по установке или обновлению, они найдут что‑то другое.
И это большая проблема для Python. Довольно сложно собрать один исполняемый файл с GUI‑приложением на Python. Ещё сложнее это приложение обновлять. И оно того не стоит в большинстве случаев.
Мобильная разработка
Есть Kivy — и это хорошая библиотека… для персональных проектов или чего‑то не слишком важного для бизнеса. Почему? Она очень хрупкая. Доступ к камере или любой другой функции телефона требует бинарной зависимости. Эти зависимости обновляются с разной скоростью, разными людьми и часто несовместимы между собой. У многих дополнительных библиотек нет майнтейнеров.
Для мобильной разработки надо смотреть на нативные приложения. Вторым вариантом будет Cordova или что‑то похожее (в эту категорию попадают React Native, Xamarin и ещё куча других кроссплатформенных решений). Я считаю, что для некоторых приложений Cordova (Ionic) — лучший выбор.
Но в любом случае Python не войдёт в список технологий разработки мобильного приложения — ни для какого бизнеса, ни для какого приложения.
Разработка игр
Основная проблема с использованием Python для разработки игр не в том, что нет зрелых фреймворков. Они есть. Но они:
- непопулярные;
- не кроссплатформенные.
Это значит, что ваша игра будет только на ПК. Хотите другие платформы? Будьте добры разработать игру ещё раз — но уже не на Python.
Маркетинг игр — занятие сложное. Найти издателя во многих случаях — лучшее решение. Но Python может стать непреодолимым препятствием: издатели просто не подпишут контракт. Им ведь придётся вложиться в портирование игры на более подходящую технологию, с которой они умеют работать.
Вместо вывода
Я использую Python практически для всего. Я даже подумываю о написании музыки с его помощью (батарейки есть даже для этого!). Тем не менее я не начну разработку мобильного приложения на Python — во всяком случае того, которое планируется опубликовать в сторах.