Недавно мы решили узнать, чем помимо пандемии 2020-й запомнится пхп-разработчикам — кто что читал, смотрел, над чем работал. Получив свыше 1500 ответов, мы сели их разбирать. Вот что получилось. Этот материал — часть презентации итогов 2020-го в русскоговорящем сообществе. Больше данных — рейтинги компаний, популярность фреймворков в рабочих проектах и не только, вы можете найти в видеоверсии и на этом сайте.  В конце декабря 2020 мы сверстали форму из 14 вопросов: часть подразумевала свободный ответ, часть — выбор из вариантов (подробнее тут). Ссылку на форму мы раскидали по чатам и каналам для PHP-разработчиков в телеграме, а также сделали анонсы в твиттере, на Хабре и запустили небольшую таргетированную компанию в ВК. До конца января 2021 мы принимали анонимные ответы.  1506 респондентов заполнили опросник целиком или частично.  44% определили себя как мидлы 24% — как сеньоры 13% — как тимлиды Структура поста 1.1. Популярные стримы 1.2 Записи докладов разных лет, которые запомнились 1.3. Доклады на английском, которые запомнились 2.1. Самые упоминаемые статьи и книги 2.2. Часто упоминаемые статьи 2.3. Переводы статей, которые запомнились 2.4. Статьи на английском Мы получили свыше 240 релевантных свободных ответов, по которым можно было восстановить ссылки на материалы, а затем отобрали самые упоминаемые. Назад к оглавлению Встречаем PHP 8: советы по обновлению, мнения и интервью с разработчиком языка  Небольшой холивар про тем ли путем идет язык, доклад о юзерленде и народное интервью с Никитой Поповым и Дмитрием Стоговым. Трансляцию на 3 каналах смотрело свыше 1100 человек в прямом эфире. Всего записи с ноябрьского митапа набрали более 40к просмотров за все время.  Трейты в PHP — зло? Валентин Удальцов против всех Холивар на холиварную тему — пожалуй, один из самых удачных онлайн-форматов. Дискуссия состояла из 4 раундов — в каждом разбирали новый кейс. После каждого раунда зрители голосовали за и против трейтов.  Выбрать между PHP и Go просто, достаточно… Cтрим, в котором те, кто писал на PHP, но перешел на Go, и те, кто пишет в основном на PHP, не холиварили — а написали два сервиса и разбирали их код, параллельно рассказывая про слабые места и границы применимости своего любимого языка.  Рефакторим c Александром Макаровым, Валентином Удальцовым, Валентином Назаровым, Леонидом Корсаковым Один репозиторий на гитхабе, два диаметрально противоположных подхода к рефакторингу. И кот.  Митап “Фреймворки и инструменты PHP” В период пандемии на карте PHP-сообщество появился новый город — ребята из Томска громко заявили о себе, начав собирать смешанные онлайн-офлайн митапы с крутым спикерским составом.  Найти все эти и другие записи можно в архиве стримов и митапов или в списке ютуб-каналов для PHP-разработчика. Назад к оглавлению 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-го. Назад к оглавлению 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 Мы получили 360 уникальных релевантных ответов, по которым можно было восстановить ссылки на материалы, а затем отобрали из них самые упоминаемые. Назад к оглавлению Мне не нравится то, во что превращается 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, которую удобно читать.  Назад к оглавлению 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. Назад к оглавлению Улучшения покрытия PHP кода в 2020 году — почему метрики покрытия кода врут (и что с этим делать). Модернизация старого PHP-приложения — какие антипаттерны ловить в вашем легаси. Больше такого из опыта российских компаний — на PHP Russia этим летом.  Современный PHP без фреймворков — статья о возможности стать лучше как разработчик. Понимаем JIT в PHP 8 — как это работает и почему прирост производительности (кажется) не будет колоссальным. Эволюция PHP — от 5.6 до 8.0 — небольшая шпаргалка с продолжением. Назад к оглавлению It’s not legacy code — it’s PHP Object Oriented Done Right Laravel beyond CRUD: the next chapter My journey into event sourcing PHP 8: before and after Commits are snapshots, not diffs Modular Monolith: A Primer p.s. Спасибо всем, кто поделился тем, что читал и смотрел в 2020-м!  p.p.s. Отдельное и огромное спасибо @jm_sub и @alyssashch за помощь в обработке данных. я сделаль