Новые возможности для PHP

Почему язык большинства интернет-страниц не теряет своей популярности и чем занимаются PHP-разработчики в Яндексе.

PHP — язык-долгожитель, который для многих стал отправной точкой в IT-карьере. Он активно поддерживается большим сообществом разработчиков, а последнее обновление вышло в 2022 году. Вместе с руководителями команд разработки Яндекса — Павлом Овчинниковым, Дмитрием Королём и Денисом Травниковым — разбираемся, чем занимаются PHP-программисты в компании и какие перспективы есть у тех, кто развивается в этой области прямо сейчас.

Моментом создания PHP считается 1994 год, когда датский программист Расмус Лердоф впервые написал набор скриптов для обработки шаблонов HTML-документов. С тех пор язык постоянно совершенствовался, в нём появлялись новые возможности, которых требовала стремительно развивающаяся индустрия программирования. Последняя на сегодня версия — PHP 8.1.5  — появилась в апреле 2022 года.

Отчасти из-за этой богатой истории PHP могут считать не таким актуальным, как другие современные языки программирования, хотя популярные сейчас языки семейства Java и Python тоже появились в 90-х, C++ — в 80-х, а C — и вовсе в 70-х годах.

«Для языков программирования богатая история — это, на самом деле, хорошо. Она означает, что есть развитые сообщества, очень много готовых библиотек, которые совершенствуются и обновляются, а ещё сложившиеся подходы к тому, как лучше писать код, и множество стандартных решений для конкретных задач», — Денис Травников, руководитель группы разработки интерфейсов.

Почему PHP популярен

Рейтинги популярности языков, вроде TIOBE и PYPL, которые изучают количество упоминаний и запросов на веб-страницах, показывают, что уходить из первой десятки используемых языков PHP явно не собирается, на нём по-прежнему создаётся больше 70% всех веб-сайтов

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

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

«В нашей команде PHP-разработчики не только пишут код, но и имеют дело со сложной бизнес-логикой, в которой есть много сущностей: пользователь, сайт, раздел, площадка, компания, баннер, шаблон и другие. Все они между собой связаны, и эти связи важно умело отразить в коде. С этим помогает объектно-ориентированное программирование — универсальный надъязык для создания объектной модели», —  Денис Травников.

Чтобы работать на PHP, не нужно много инструментов. Достаточно поставить одну программу и передать ей файл с исходным кодом, написанным на этом языке. PHP транслирует этот файл в байт-код и выполняет его как обычную программу. Поэтому этот язык идеален для прототипирования: благодаря быстрому процессу сборки, дорабатывать и дебажить код проще, не нужно долго ждать, когда он в очередной раз скомпилируется.

— В PHP не обязательна строгая типизация и нет необходимости работать с памятью напрямую.

— Достаточно высокая скорость разработки, сравнимая с Python и даже с Go и часто превосходящая компилируемые языки — Java, C#, C и C++.

Развитая инфраструктура и сообщество разработчиков: вокруг PHP образовалось огромное комьюнити, появились готовые инструменты и фреймворки (те же Symfony и Laravel) для решения стандартных задач. В задачах интеграции с внешним API почти всегда есть библиотеки для PHP либо от поставщика API, либо от сообщества. Ежегодно в разных странах проходят международные конференции для PHP-разработчиков.

— Благодаря тому, что версии PHP постоянно обновляются и дорабатываются сообществом, язык не теряет актуальности и функциональности. В седьмой версии появились синтаксические удобства, новые базовые функции в стандартной библиотеке и оптимизация скорости. Версия 7.4 получила типизированные свойства классов, а в 8.0 появились JIT-компилятор и атрибуты.

«PHP ― это золотая середина между суровым бэкендом, например C++, где царят выверенные, оптимизированные алгоритмы и присутствует больше науки, и JavaScript, где видишь результат по мере написания кода. PHP — идеальный вариант для тех, кто хочет научиться программированию, но ещё не определился между бэкендом и фронтендом. Например, у нас в команде фулстек-разработка. Это даёт отличные преимущества: можно попробовать себя в разных технологиях и направлениях и выбрать то, что ближе. Специализация будет формироваться естественным образом», — Денис Травников.

Почему не все работают на PHP?

Несмотря на все плюсы и возможности PHP, многие разработчики со временем переходят на другие языки. Это связано с тем, что знание PHP — хорошая база для изучения других языков, например TypeScript и Python. На популярность языка также влияют различные стереотипы, но к действительности они имеют слабое отношение.

В прошлом у разработчика было не так много альтернатив PHP, к тому же его существенно проще освоить в качестве первого языка, чем Python, Ruby, С++ или Java. Для бизнеса PHP выгоден с точки зрения простоты и дешевизны прототипирования — проверки, состоятельна бизнес-идея или нет. Думаю, в будущем PHP будет делить рынок с Go.

— Дмитрий Король, руководитель группы разработки Оптимизатора

Главным минусом старых версий PHP была проблема с многопоточностью и скоростью исполнения вычислительных операций в нагруженных приложениях. За последние годы PHP сильно развился и стал значительно быстрее. В более поздних версиях эта проблема решается с помощью Shared Memory и мьютексов. Ещё на PHP существует много некачественного кода, но это не должно отпугивать: для грамотного специалиста не составит труда найти best practice, стандарты code style, фреймворки и образцы хорошего качественного кода.

«В стандартной библиотеке PHP есть модуль PCNTL, который реализует Unix-стиль в работе с процессами, сигналами и ресурсами. Основообразующей функцией, которая позволяет породить «дополнительный поток» на PHP, является pcntl_fork. Она копирует текущий процесс и возвращает pid дочернего процесса, после чего при помощи Unix-сигналов реализуется взаимодействие между двумя процессами», — Дмитрий Король.

Часто в вакансиях PHP-разработчика нет чётких указаний на то, какие задачи будет решать такой специалист. Соискатели опасаются, что придётся заниматься однотипными вещами, например верстать в CMS сайты по шаблону. Но на деле задачи бывают сложными и требующими постоянной прокачки: PHP часто используют при создании специализированных систем, для которых нет стандартных решений. Такие проекты нужно строить с нуля, начиная с разработки архитектуры.

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

— Денис Травников

Что ждёт PHP-разработчика в Яндексе

Зона ответственности PHP-разработчика в Яндексе выходит за рамки стандартных задач. Программисты работают над высоконагруженными сервисами со сложной инфраструктурой, используют PHP Symfony и внутренние структурные инструменты, а отдельные модули в продуктах пишут на Go и Python.

Перед PHP-разработчиком в Яндексе стоят разноплановые задачи:

— создавать UI: например, API-эндпоинты для взаимодействия с фронтендом;

— создавать бэкенд-приложения и публичные API для них;

— обслуживать веб-запросы на авторизацию и аутентификацию, работать с базами данных, миграциями и актуализацией схем;

— работать с процессинговой частью бэкенда и обрабатывать в рантайме большие объёмы данных;

— писать консольные приложения на PHP, которые в состоянии обрабатывать миллионы задач в сутки. 

«В Яндексе есть крупные проекты, которые пишутся на PHP, например ADFOX и Яндекс Еда. Кроме того, некоторые продукты мы постепенно переводим с PHP на Go и Java, поэтому нам нужны те, кто хорошо погружён в PHP и знаком с другими языками. PHP — это далеко не только сайты и поддержка, это и серьёзная продуктовая разработка, которая может включать сложные алгоритмические задачи и обработку больших объёмов данных. Это нужно уметь делать эффективно и с точки зрения скорости разработки, и со стороны минимизации потребления «железа»», — Дмитрий Король.

Нестандартные и интересные задачи предполагают, что базовых знаний PHP недостаточно для того, чтобы пройти собеседование. Соискателей собеседуют не только на знание самого языка, поэтому необходимо разбираться в широком спектре тем:

— Работать с базами данных: MySQL, MapReduce и колоночными БД — BigQuery, ClickHouse. Знать, как сделать селект, группировку или фильтрацию, что такое хевинг, как работают индексы и какие уровни изоляции бывают.

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

— Использовать кэш-серверы — Memcached и Redis.

— Уметь решать алгоритмические задачи и выбирать оптимальные по сложности алгоритмы.

— Работать с Unix-консолью: понимать, как её настроить, какие сервисы поставить, как работать с репозиториями приложений, редактировать конфигурацию и т. д. Например, уметь собрать сервер для своей разработки.

— Разбираться в SOLID и объектно-ориентированном программировании хотя бы на базовом уровне: фабрики, синглтоны и DDD (Domain-driven design).

— Отличать в проектах инфраструктурный уровень от бизнесового.

«Научить человека думать — долгий и дорогой процесс для любого работодателя. Гораздо проще поделиться опытом с тем, кто уже мыслит в нужном направлении, даже если бизнесовый опыт он не успел накопить. Глобально мы требуем знание PHP и базовой теории и умение думать. Если к нам в команду приходит такой человек, он уже за полгода добивается значительных успехов», — Дмитрий Король.

Универсальных рекомендаций по подготовке к собеседованиям на должность PHP-разработчика нет, а благодаря популярности языка в поисковиках можно найти советы на любую тему. Остановимся на необходимом минимуме: 

— потренироваться в решении алгоритмических задач на LeetCode в категориях easy и medium;

— пролистать последние новости и список самых частых запросов на официальном сайте PHP;

— заглянуть в справочник по языку;

— познакомиться с шаблонами кода и посмотреть примеры их реализации, например здесь.