Недавно мы решили узнать, чем помимо пандемии 2020-й запомнится пхп-разработчикам — кто что читал, смотрел, над чем работал. Получив свыше 1500 ответов, мы сели их разбирать. Вот что получилось.
Этот материал — часть презентации итогов 2020-го в русскоговорящем сообществе. Больше данных — рейтинги компаний, популярность фреймворков в рабочих проектах и не только, вы можете найти в видеоверсии и на этом сайте.
Как мы получили данные и кто давал ответы
В конце декабря 2020 мы сверстали форму из 14 вопросов: часть подразумевала свободный ответ, часть — выбор из вариантов (подробнее тут). Ссылку на форму мы раскидали по чатам и каналам для PHP-разработчиков в телеграме, а также сделали анонсы в твиттере, на Хабре и запустили небольшую таргетированную компанию в ВК. До конца января 2021 мы принимали анонимные ответы.
1506 респондентов заполнили опросник целиком или частично.
44% определили себя как мидлы
24% — как сеньоры
13% — как тимлиды
Структура поста
1.1. Популярные стримы
1.2 Записи докладов разных лет, которые запомнились
1.3. Доклады на английском, которые запомнились
2.1. Самые упоминаемые статьи и книги
2.3. Переводы статей, которые запомнились
2.4. Статьи на английском
1. Что смотрели
Мы получили свыше 240 релевантных свободных ответов, по которым можно было восстановить ссылки на материалы, а затем отобрали самые упоминаемые.
1.1. Стримы
Встречаем PHP 8: советы по обновлению, мнения и интервью с разработчиком языка
Небольшой холивар про тем ли путем идет язык, доклад о юзерленде и народное интервью с Никитой Поповым и Дмитрием Стоговым. Трансляцию на 3 каналах смотрело свыше 1100 человек в прямом эфире. Всего записи с ноябрьского митапа набрали более 40к просмотров за все время.
Трейты в PHP — зло? Валентин Удальцов против всех
Холивар на холиварную тему — пожалуй, один из самых удачных онлайн-форматов. Дискуссия состояла из 4 раундов — в каждом разбирали новый кейс. После каждого раунда зрители голосовали за и против трейтов.
Выбрать между PHP и Go просто, достаточно…
Cтрим, в котором те, кто писал на PHP, но перешел на Go, и те, кто пишет в основном на PHP, не холиварили — а написали два сервиса и разбирали их код, параллельно рассказывая про слабые места и границы применимости своего любимого языка.
Рефакторим c Александром Макаровым, Валентином Удальцовым, Валентином Назаровым, Леонидом Корсаковым
Один репозиторий на гитхабе, два диаметрально противоположных подхода к рефакторингу. И кот.
Митап “Фреймворки и инструменты PHP”
В период пандемии на карте PHP-сообщество появился новый город — ребята из Томска громко заявили о себе, начав собирать смешанные онлайн-офлайн митапы с крутым спикерским составом.
Найти все эти и другие записи можно в архиве стримов и митапов или в списке ютуб-каналов для PHP-разработчика.
1.2. Записи докладов
Cycle ORM и графы — доклад Антона Титова с онлайн-конференции PHP fwdays'20. Отличия подходов ActiveRecord и DataMapper. Решение проблемы топологической сортировки зависимостей ORM, используя итеративную сортировку в глубину.
Самое интересное в PHP 8 — JIT, Preloading и FFI и не только в докладе Дмитрий Стогова с PHP Russia 2019.
Поговорим про код — доклад Александра Макарова с онлайн-конференции PHP fwdays'20. Разбор принципов, которые позволяют писать код, который ломается меньше.
Поиск и устранение утечек памяти в PHP — Валентин Удальцов показывает, как искать проблему и как фиксить на примере утечки, обнаруженной в Symfony–компоненте.
PHP: Неправильный путь — Кирилл Несмеянов о том, с чего начать изучение PHP, как качать свой скилл и что будет с языком дальше. Запись с митапа в Иваново в конце 2019-го.
30+ примеров угроз: формы, файлы, заголовки, браузер, консоль, БД — Александр Макаров про безопасность в веб-разработке: от базовых вещей до особенностей PHP. Запись с казанского PHP-митапа в конце 2019-го.
Разработка гибридных PHP/Go-приложений с использованием RoadRunner — доклад Антона Титова с конференции PHP Russia. Как демонизировать PHP-приложение для повышения производительности.
MySQL, который мы не знаем — доклад Виктор Зинченко с онлайн-конференции PHP fwdays'20. Как организовать мониторинг MySQL с помощью Prometheus, Grafana и что делать с медленными запросами.
Рефакторинг PHP-кода с применением DDD — Виталий Чирков на примерах показывает, какие приёмы сработали в его случае. Запись с митапа в офисе Badoo в феврале 2020-го.
Грамотное ООП: организация надёжной бизнес-логики — доклад Дмитрия Елисеева с конференции PHP Russia 2019. Тренируемся в объектно-ориентированной декомпозиции для грамотного проектирования сущностей по обязанностям и учимся сочинять ко этому быстрые, удобные и надёжные юнит-тесты.
Быстрый способ разобраться с легаси и начать жить — Сергей Жук про то, как превратить работу с легаси в увлекательное приключение. Или все переписать? Или и так сойдет? Запись с краснодарского PHP-митапа в ноябре 2020-го.
Зачем и как писать качественные Unit-тесты — Алексей Солодкий рассказывает об основных концепциях unit-тестирования и том, как поддерживать качество тестов на проекте. Запись с митапа в офисе Badoo в марте 2019-го.
Как контрибьютить в Symfony и зачем это делать — запись с митапа в рамках PHP Russia 2019.
От Doctrine ORM к CQRS за 20 минут — Дмитрий Симушев о том, что делать, когда хаки с оптимизацией доктрины больше не работают. Запись с митапа в офисе Skyeng летом 2019-го.
Очень странные дела на PHP — Кирилл Несмеянов о применении PHP за гранью веб-разработки. Запись с онлайн-митапа весной 2020-го.
Перенос проекта на PHP 7: от сбора фактов до результата — Максим Шамаев о том, что делать, когда к вам придут и предложат разобраться с очень старым кодом. Запись с онлайн-митапа весной 2020-го.
Различные эволюции от старта до релиза в PHP продукте — видео с онлайн-конференции PHP fwdays'20. Александр Савченко про None-Breaking change development , cross-stack контракты, Trunk Based development и много чего еще.
Строим Highload на PHP и Redis — Михаил Мазеин про то, что делать с очередями из миллиона сообщений. Запись с нижегородского PHP-митапа в конце 2019-го.
Big Ball of Mud и другие проблемы монолита, с которыми мы справились — Юлия Николаева о модульном монолите как альтернативе микросервисам. Запись с онлайн-митапа весной 2020-го.
1.3. Записи докладов на английском
Effortless Software Development
Package Design Principles in Practice
Queues, busses and the messenger component
Getting the most out of the PHP 7 engine — the example of Symfony
More Than a Query Language: SQL in the 21st Century
2. О чем читали
Мы получили 360 уникальных релевантных ответов, по которым можно было восстановить ссылки на материалы, а затем отобрали из них самые упоминаемые.
2.1. Самые упоминаемые материалы
Мне не нравится то, во что превращается PHP — мощное заявление от @AlexLeonov, которое получило развитие на стриме к выходу PHP 8.
PHP 8 — что нового? — обзор нововведений от @rela589n, вышедший за день до релиза 8-ки.
Регулярные PHP-дайджесты от @pronskiy — упоминались разные выпуски. Кстати, с этого года они доступны в виде стримов на ютубе.
Архитектура сложных веб-приложений. С примерами на Laravel — перевод книги @Adelf перевел он сам и выложил для скачивания на GitHub.
Собеседование php-developer: вопросы и ответы — подборка, которую составил @Nidhognit чтобы подготовиться к собеседованиям. Спасибо, что поделился с сообществом!
Что не так с трейтами? — превью к стриму, где в итоге победили трейты и @SerafimArts :)
Сейчас я буду убеждать вас использовать статический анализ в PHP — расшифровка подкаста “Между скобок”, в котором @seregazhuk и @vudaltsov обсуждают Psalm и не только.
Зачем ограничивать наследование с помощью final? — материал из конца 2019 от @parshikov_pavel который нашел благодарного читателя в 2020-м.
Куда катится PHP, а также про Yii и другие фреймворки — презентация от @SamDark, которую удобно читать.
2.2. Также часто упоминали
Aсинхронный PHP — расшифровка доклада Антона Шабовты с PHP Russia 2019.
Как переиспользовать код с бандлами Symfony 5? — цикл статей от Романа Науменко.
Как я пытался улучшить Laravel, а сделал только хуже — “не метод, а монстр” или история одного коммита.
Ловушки для современного PHP — еще одно размышление о судьбах PHP, если понравились материалы Альберта Степанцева и Саши Макарова, точно зайдет.
Занятное мини-интервью с основными контрибьюторами PHP 8 — частичная расшифровка стрима с Никитой Поповым и Дмитрием Стоговым. Продолжение недавно вышло тут.
«В карантин нагрузка выросла в 5 раз, но мы были готовы» — та самая история от Lingualeo. 685 комментариев под постом!
Теперь я не могу сделать даже маленький сайт — мини-обзор того, что (не) должен знать современный веб-разработчик.
Среда разработки PHP на базе Docker — как быстро создать на локальной машине универсальную среду разработки.
Мёртвый код: найти и обезвредить — чтобы что-то добавить, нужно что-то удалить.
У Вас проблемы с legacy — значит, Вам повезло! Распил монолита на PHP - название говорит само за себя
Spiral: высокопроизводительный PHP/Go фреймворк - обзор от автора инструмента
Почему стоит попробовать Drupal 9 - если вы ищете CMS.
Отпусти меня, PHP - ведущий телеграм-канала PHP Today делится болью.
НЕкостыль: gRPC-клиент на PHP в продакшене — боевое решение, которое, к тому же, легко пишется.
Уязвимости PHP-фреймворков — сколько из них знаешь ты?
FFI: пишем на Rust в PHP-программе — материал из осени 2019-го, который вспоминают до сих пор.
DDD на практике — туториал из 2018-го, который был актуален и в 2020.
2.3. Переводы
Улучшения покрытия PHP кода в 2020 году — почему метрики покрытия кода врут (и что с этим делать).
Модернизация старого PHP-приложения — какие антипаттерны ловить в вашем легаси. Больше такого из опыта российских компаний — на PHP Russia этим летом.
Современный PHP без фреймворков — статья о возможности стать лучше как разработчик.
Понимаем JIT в PHP 8 — как это работает и почему прирост производительности (кажется) не будет колоссальным.
Эволюция PHP — от 5.6 до 8.0 — небольшая шпаргалка с продолжением.
2.4. На английском
It’s not legacy code — it’s PHP
Laravel beyond CRUD: the next chapter
My journey into event sourcing
Commits are snapshots, not diffs
p.s. Спасибо всем, кто поделился тем, что читал и смотрел в 2020-м!
p.p.s. Отдельное и огромное спасибо @jm_sub и @alyssashch за помощь в обработке данных.
Автор: Алексей Корнеев