Разница между python и php
- воскресенье, 10 апреля 2022 г. в 00:33:19
Год назад я полностью перешел в разработку на 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