Год назад я полностью перешел в разработку на Python. До этого около 4-х лет писал в основном на PHP. В процессе работы я постоянно сравнивал эти 2 языка и сейчас решил уложить это все в одной статье, чтобы структурировать плюсы и минусы. Для вас эта статья может быть полезна, чтобы разобраться, какой выбрать для ваших задач.
Качество документации кода
Первое, что бросилось мне в глаза, когда я с php перешел на python — это качество документации кода и тайпхинты в популярных библиотеках.
Возьмем для примера самые популярные либы http клиентов: guzzle — для php и requests — для python.
Откройте любой класс в requests и вы увидите, что почти каждый публичный метод имеет параметр **kwarg, что означает — какой-то набор именованных аргументов. Не для всех аргументов есть описание типа. И так почти во всех либах. Даже в нативных библиотеках не используется типизация (обсуждение на stackoverflow).
В guzzle все методы имеют понятный интерфейс с описанием и указанными типами. В php в целом культура описания кода выше. Часто вы сможете использовать либы даже не открывая документацию, а посмотрев исходный код. На python вам почти всегда придется посмотреть примеры использования в документации и только потом понять, как сделать то, что вы хотели сделать.
Синтаксис языка
Python явно проще для чтения. Хорошо написанный код будет выглядеть почти как обычный текст написанный на английском языке.
Когда переходишь с php на python, первое время непривычно учитывать наличие декораторов и контекстных менеджеров в коде. Я считал это лишним синтаксическим сахаром. Но это оказалось делом привычки. Если использовать их правильно, то код становится проще.
Например, так будет выглядеть кэширование результатов метода на 2 минуты через декоратор:
@cache(ttl=120) def foo(x) -> str: ...
Php же наоборот, содержит меньше синтаксического сахара и неявных конструкций. Это позволяет легче анализировать код линтерами и для автоподсказок в IDE (я пользуюсь phpStorm и pyCharm от Jetbrains).
Использование в веб приложениях
В php один запрос всегда обрабатывает один процесс, для этих целей часто используют nginx в связке с fpm сервером.
Рассмотрим самую распространенную схему работы веб сервера на php:
Она хороша тем, что процесс, в котором обрабатывается запрос, полностью изолирован. Вы не имеете доступа к объектам из другого запроса. Всю ответственность за управление числом одновременно обрабатываемых запросов и числа создаваемых для этого процессов берет на себя php-fpm.
В php гораздо больше веб фреймворков, позволяющих быстро создавать сайты, как простые, так и высоконагруженные. На момент написания статьи, наиболее популярные и известные мне это: yii, symphony, slim, laravel. У каждой из них есть либо свои ORM менеджеры, либо сторонние, с очень большой поддержкой. На python список фреймворков, сопоставимых по уровню поддержи, гораздо меньше, это: tornado, django, flask.
Для Python используются очень разные схемы. Часто это схема nginx -> WSGI -> python app. При использовании фреймворка tornado, прослойки для управления процессами вообще нет, все управление берет на себя сам фреймворк. Поэтому я делаю вывод, что python дает больше возможности в управлении сервером.
На python гораздо проще написать, например, веб-сокет сервер, или разрабатывать в микросервисной архитектуре.
Использование для разработки утилит и моделей машинного обучения
Python абсолютный лидер в этих сферах. Почти все самописные инструменты для devops или парсинга гораздо удобнее и быстрее делать на python. Я думаю, дело в том, что python позволяет очень быстро погрузиться в язык, не изучая глубоко синтаксис и позволяет понимать интуитивно, как использовать простые инструменты. Поэтому непрофессиональным разработчикам легче использовать python.
Для парсинга на python есть библиотека scrapy, аналогичной которой нет в php. Благодаря этому можно гораздо быстрее писать сложные парсеры.
Разработка моделей машинного обучения на php — это извращение, по моему мнению. Python с библиотеками sklearn, xgboost, pytorch, tensorflow, keras ушёл далеко вперед от остальных языков в плане разработки ML. Даже более низкоуровневые библиотеки, такие как numpy, scipy позволяют ученым делать сложные вычисления не вникая в особенность языка.
Выводы
Для веб разработки, в большинстве случаев, лучше подойдет php потому что:
-
на нем более удобные фреймворки, позволяющие быстрее решать типовые задачи
-
лучше уровень документации библиотек
-
Проще схема управления сервером
Но если у вас сложная микросервисная архитектура или вы делаете не типовой сервис, в котором требуется асинхронный веб сервер, то лучше использовать python.
Для других задач, таких как: парсинг, разработка ML моделей, простые утилиты — больше подходит python.
Если вы не согласны со мной, либо у вас есть свои наблюдения, пишите об этом в комментариях.
Ресурсы:
http://xandeadx.ru/blog/php/866
https://scrapy.org
https://ru.wikipedia.org/wiki/Список_ORM-библиотек
https://habr.com/ru/company/ruvds/blog/539098/
https://www.tornadoweb.org/en/stable/guide/running.html
https://www.php.net/manual/ru/install.fpm.php
ссылка на оригинал статьи https://habr.com/ru/post/659987/
Добавить комментарий