Ловушки для современного PHP

Ловушки для современного PHP

Выход новой мажорной версии языка — это всегда возможность как оглянуться назад и оценить уже пройденный путь, так и попробовать посмотреть далеко вперед и предсказать, что нас ждёт в будущем, поэтому ничего удивительного, что в последнее время в сообществе происходит много дискуссий на эту тему.
После множества обсуждений этого вопроса, я хотел бы поделиться с вами выводами, к которым пришёл: под катом вы узнаете, с какими трудностями PHP предстоит столкнуться в перспективе самых ближайших лет.

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

Примечание

Далее я буду использовать слово "квалификация" не в ругательном смысле, а как набор необходимых знаний и навыков, необходимых как для работы вообще, так и для работы с некой технологией Х в частности. То есть, разработчик на Symfony квалифицированнее разработчика на WordPress, потому что ему нужно уметь писать код и работать с БД, а разработчик на WordPress в целом может во время своей работы из админки и не вылазить.

PHP для "простых" решений и малого бизнеса

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

Также язык был крайне нетребователен к инфраструктуре, так как можно было просто поправить нужный файлик на своей VPSке прямо через FTP, без сборок и релизов.
К квалификации разработчиков он, впрочем, тоже был нетребователен, так как интерпретируемый, типизация слабая, а архитектура вообще уникальна: php "обречен на смерть" и каждый запрос обрабатывается в новом процессе, можно не бояться ни утечек памяти, ни манипуляций общим состоянием программы, ни прочих способов одному запросу помешать другому.
Также из-за своей динамической структуры PHP стал отличным движком для создания CMS, позволяя очень легко расширить и отладить программу, методом подкладывания на сервер файликов с исходниками, для чего даже не нужно быть программистом.

Итого, был язык, простой, как палка, прощающий множество ошибок, легкий для изучения и в целом нетребовательный. Логично, такой привлекает множество разработчиков не самой высокой квалификации, просто за счёт того, что более высокая квалификация для работы им и не требуется. А это порождает следующее: низкая квалификация означает низкие рейты, низкие рейты означают привлекательность для малого бизнеса, а это создаёт множество рабочих место и своеобразную популярность, привлекая ещё больше новичков и тд и тп.
Где-то здесь находятся и стартапы: имея в начале мало денег и вынужденные выживать среди бесконечных MVP и перестроек, им проще взять что-то максимально простое и дешевое. Большинство стартапов, конечно, умирает, но самые удачливые "выстреливают", стремительно обрастая деньгами и более развитыми технологиями, при этом продолжая нести в себе ядро из всем знакомого PHP. Привет, Facebook, VK, Slack, Такси и тд и тп.
Область понятна, как понятно и то, что нужно сделать для того, чтобы оставаться "королём CMSок": ничего не испортить. Нужно просто быть таким же простым и, может, даже примитивным, чтобы за счёт этого выигрывать популярность среди новичков и малого бизнеса у более навороченных технологий.

PHP для энтерпрайза

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

И всё кажется прекрасным, потому что "энтерпрайзный PHP" действительно даёт возможность нормально писать сложные продукты и даже не сильно при этом страдать, но здесь есть одно большое НО и имя ему Java (либо C#).
В виртуальную машину Java вложены десятки тысяч человеко-лет, которые делают её лучшей на текущий момент виртуальной машиной в мире. Тулчейн и экосистема джавы развивались годами сразу для “серьезного” языка и тоже множеством людей и компаний, в итоге предоставив огромную и крайне проработанную экосистему (от IDE до стандартов и библиотек), равной которой найти сложно и равной которой экосистема PHP при всех её плюсах не является. На Java пишет намного больше квалифицированных разработчиков, а также намного больше серьёзных энтерпрайз решений, что означает большие рейты, что означает больше квалифицированных разработчиков и тд и тп.

И здесь же кроется своего рода ловушка, PHP успешно копирует множество удачных решений из Java-мира, увеличивая собственную сложность и строгость. Но сможет ли он побить одного из "королей энтерпрайза" на его собственном поле? Я несколько сомневаюсь.
А это означает, что PHP имеет шансы остаться энтерпрайзом второго эшелона, некой “второй Java”. Для меня это вызывает вопрос: зачем в таком случае нужна “вторая” джава, если уже есть первая?

При этом всё было бы не так плохо, если бы стремление к совершенству не противоречило предыдущему направлению: в погоне за тем, чтобы стать "правильным", PHP легко может потерять свою простоту и скорость разработки, а вместе с тем множество дешевых разработчиков, а вместе с ними и привлекательность для бизнеса.

PHP для микросервисов и современных фич

Оставаясь простым, интерпретируемым и однопоточным, php не то, чтобы успевает за своими более шустрыми и современными конкурентами:

  • PHP быстр, но и golang/nodejs/{any modern lang} далеко не медленнее, а при этом ещё умеют в ассинхронность/многозадачность "из коробки", без внешних расширений языка, велосипедов и воркеров на супервизорах.
  • PHP много чего умеет, но и golang/nodejs/{any modern lang} могут работать через сокеты "из коробки", а вот "слоник" — нет.
  • PHP как бы умеет в функиональщину, но довольно ограниченно, в отличие от современных typescript/scala/kotlin/*.
  • PHP скоро научится в дженерики и аннотации, но эти вещи существуют в той же Java и прочих "современных" языках уже давно, вместе с целым рядом других фич.
  • Ну и уж конечно, в области микросервисов, low latency, выбора и тюнинга сборщиков мусора, замеров аллокаций и прочих элементов разработки действительно высокопроизводительных приложений, php чувствует себя не очень уверенно, будучи изначально не тем (ну не контейнер с nginx, phpfpm и сотней воркеров микросервисом-то называть, в самом-то деле) и не про то.

Чтобы доминировать здесь, PHP было бы необходимо в корне измениться, от синтаксиса до архитектуры своей виртуальной машины и принципов её работы, а также основательно обрасти фичами, что в итоге сделает "слоника" совсем другим языком.
Это опять возвращает нас к вопросу: а нужен ли сообществу тот, новый PHP? И возможно ли стать новым “крутым” языком с гринтредами, встроенным сервером, монадами и черт знает чем ещё, сохранив свою фирменную нетребовательность?

Выводы

Кажется, что PHP пытается усидеть на нескольких стульях сразу: быть и удобным для быстрокодеров на CMS за 10$ в час, и изучаться за две недели вчерашним студентом чтобы завтра же найти работу, и чтобы уважаемые люди серьёзные проекты для других уважаемых и серьезных людей могли делать, и чтобы всё было современно и красиво. Не порвутся ли эти штаны? Не потеряет ли "слоник" старых пользователей, не снискав при этом достаточного внимания новых?
Непонятно.
Конечно, даже самый негативный вариант не означает неминуемой гибели: легаси написано уже очень много, а разработчиков, знающих и любящих именно PHP тоже порядочно. Языки программирования способны умирать очень долго и крестражей у них значительно больше семи.
Но, с другой стороны, ada, smalltalk, delphi и прочие всё же умерли, а тот же ruby, похоже, завис где-то в чистилище, при наличии и множества программистов, и кодовой базы.
С третьей стороны, пора бы уже включить “похороны PHP” в список спортивных дисциплин, двадцать лет хоронят уже, да всё не умирает никак вот ведь какая ирония.
Разумеется, даже при самом удачном течении событий, даже успешно совместивший и “старое” и “новое” PHP вряд ли станет языком #1.
И уж конечно, никто не заставляет писать на одном только PHP, все будут выносить нагруженные места в приложения на golang, работать с сокетами на ноде и крутить это всё в кубернетесе, но это уже совсем другая история.

Обсудить проект
Заполните форму и мы с Вами свяжемся