Еще один блог

Почему PHP не пользуется популярностью?

Разработка
01.01.2019
3732
1

Это статья для тех, кто планирует стать PHP программистом. Если вы не планируете им стать, то скорее всего эту статью вы не поймете.

На протяжении нескольких лет я каждый день пишу на PHP. Несмотря на то, что на этом языке пишется подавляющее количество сайтов, многие этот язык не любят. Основной "хейт" идет с сайтов вопросов и ответов stackoverflow и toster.  Лично у меня нет времени отвечать на такие вопросы, поэтому весь хейт я стараюсь наблюдать со стороны.

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

Старое наследие.

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

Сюда стоит добавить несовместимость многих вещей из PHP 4 и PHP 5.*, особенно это касается классов.

Буксуем в 2000х.

Между PHP 5.2 и PHP 5.3 пропасть. В 5.3 появилось столько новых фич, что эту версию по праву можно было бы назвать PHP 6.0 (если бы не проблема с UTF-8).

Но команда PHP сильно опоздала с релизом. PHP 5.3 вышел в 2009 году, а PHP 5.2 в 2006. Многие программисты как раз и начали знакомство с PHP с версии 5.2. 

В это время на рынок вырвались такие игроки как Ruby On Rails, NodeJS. Им удалось "скушать" часть сообщества PHP, которые были недовольны текущим положением дел.

И если python с NodeJS как-то смог урвать свой кусок, то волна хайпа вокруг RoR уже давно прошла.

Отсутствие "правильного пути"

PHP позволяет очень быстро "стартануть", создать пару файлов, к примеру menu.inc.php и index.php. Такой подход хорош только в некоторых случаях, когда нужно очень быстро написать код и его 100% не будут поддерживать. На практике я не встречал код, который писался бы только один раз.

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

Сюда можно отнести и проблему с качеством книг. Большинство книг по PHP полная туфта. Лучше читать официальную документацию, которая впрочем, не дает представления о правильном пути в изучении PHP.

Composer и PSR не являются стандартом языка.

Про composer и PSR вы не узнаете из официальной документации. Максимум - PEAR. А это именно те вещи, которые используются сейчас каждый день.

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

Стандартные функции PHP.

Посмотрите на сигнатуру двух функций:

array_filter($input, $callback);

array_map($callback, $input);

Ничего странного не замечаете?

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

Все это довольно тяжело запомнить, благо автокомплит в IDE спасает.

Один говнокод.

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

А как я уже говорил, добавьте сюда вечную спешку и вы получите то, что получите. Даже такие крупные компании, как Avito и Badoo в своих видео для разработчиков признавались в огромном пласте legacy-кода, который они постепенно переписывают.

Сейчас ситуация очень быстро налаживается. Благо есть фреймворки под любую команду и задачу. Нужен enterprise на PHP - берете Symfony. Лично для меня это полный аналог Spring из мира Java. Основной плюс Symfony это его компоненты. Если нужно очень быстро, берите Yii2 или Laravel. Даже любой говнокод на фреймворке имеет хотя бы какую-то структуру.

UTF-8.

В 2019 году проблема не решена. Есть str* функции, есть mb_ функции для работы со стороками. Если не использовать расширение mbstring, то как говорят программисты: PHP не умеет в UTF-8. В чем проблема? По умолчанию PHP считает, что каждый символ состоит из одного байта, хотя сейчас это не так. Временное решение - использовать mbstring расширение, но и в нем нет полезных функций, например нет функции mb_strsplit.

Кто эти люди, которые ненавидят PHP?

Типичный портрет пользователя - сторонник NodeJS, RoR или python. А также человек, который ушел из мира PHP на версии 5.3. Я не видел людей, которые пишут на C# или Java и говорят, что PHP отстой. Обычно такие люди более грамотные и они прекрасно понимают, что для каждой задачи используется свой инструмент. Те, кто пишет на "строгих" языках даже не пересекаются в задачах. Мало кто захочет делать свой личный сайт на Java, когда это можно сделать гораздо быстрее на PHP.

К примеру, блог Microsoft Windows (blogs.windows.com) используют Wordpress, который написан на PHP, но постойте, ведь у Microsoft есть ASP.Net Core. Почему бы не сделать сайт на их родной технологии? Большинство крупных сайтов написаны на PHP, да-да в том числе и хабр.

А зачем использовать что-то другое? Есть проверенный инструмент, который используют миллионы сайтов. И это логичное решение, использовать тот инструмент, который подходит под задачу.

Любой "срач" на тему языков программирования обязательно выльется в python vs RoR vs NodeJS. Но если с python и RoR все понятно, то что делает в этом списке NodeJS? Я сталкивался с ним, когда приходилось делать что-то асинхронное на websockets, потому что на NodeJS это сделать просто удобнее. Да, есть workerman у PHP, но сам по себе PHP не является асинхронным языком.

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

Как-то на одном известном форуме я видел бурную дискуссию вокруг PHP. Я решил провести социальный эксперимент и указать в отдельном посте на недостатки Symfony. Я довольно грамотно описал проблемы этого фреймворка, его излишнюю сложность и работу с запросами. В моей теме никто не отвечал. Активности было ноль, но в соседней теме PHP очень яро обсуждали. Почему? Все просто, уровень компетенции людей не позволяет им общаться на тему более сложных фреймворков. Стоит ли прислушиваться к мнению таких людей? Вряд ли.

Называть какой-то язык дерьмом глупо, ведь даже у Visual Basic и Delphi есть свои области применения.

Область применения PHP.

Область применения PHP это сайты. И когда люди это поймут, будет гораздо проще. Бизнес требует сайт быстро и чтобы хорошо работал. PHP + любой фреймворк подойдут для этого. Плюсы этого языка:

  • взрослая экосистема с пакетным менеджером и PSR
  • стабильные фреймворки Yii2, Laravel и Symfony
  • огромное количество разработчиков

Другие языки хороши в других областях. К примеру, глупо делать Android приложение на JavaScript, когда есть Java. Глупо использовать Electron для приложения под Windows, когда есть C#.

И что ты хотел сказать?

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

 

Гость
24.01.2019 21:04
Отлично написано.