Шлях PHP-розробника
від першої роботи до розвилки
Не список технологій, а відповідь на три питання: де ви зараз, що дасть наступний крок і як зрозуміти, що крок зроблено. Під кожним етапом живі цифри з цієї ж платформи: вакансії, вилки, вимоги роботодавців і питання зі співбесід.
Старт: до першої роботи
Тут головне не кількість вивчених технологій, а здатність довести маленьку річ до кінця: підняти проєкт, покласти дані в базу, віддати сторінку, залити на сервер. Роботодавець на цьому етапі дивиться не на список у резюме, а на те, чи ви розумієте, що написали.
Для стартового етапу окремих вакансій немає: компанії шукають Junior і вище. Цифри з'являються з наступного етапу.
Синтаксис і типи PHP
Змінні, масиви, функції, приведення типів, strict_types. Ключове: розуміти, чому 0 == "a" поводиться саме так, і не гадати, а перевіряти.
Можете пояснити різницю між == і === на прикладі з реального коду, а не за таблицею.
ООП і структура коду
Класи, інтерфейси, трейти, простори імен. На цьому етапі достатньо вміти розкласти задачу на кілька класів так, щоб їх можна було прочитати через тиждень.
Пишете клас, який не доводиться переписувати, коли додається друга схожа задача.
Composer і автозавантаження
Як підключати пакети, що таке PSR-4 і чому composer.lock має лежати в репозиторії. Без цього не почнеться жоден фреймворк.
Розумієте, що станеться після composer update на чужому проєкті, і чому цього не варто робити.
SQL: вибірки та зв'язки
SELECT, JOIN, GROUP BY і уявлення про те, як дані лежать у таблицях. Фреймворк напише запит за вас, але прочитати його доведеться самому.
Можете написати запит із двома JOIN без підказки й пояснити, чому не INNER.
Git у команді
Гілки, коміти, конфлікти, pull request. Не команди напам'ять, а розуміння, що ви робите з історією проєкту.
Розв'язали конфлікт злиття, не видаливши чужу роботу.
HTTP і як працює вебсервер
Запит, відповідь, коди статусів, заголовки, куки й сесії. Фундамент, на якому потім стоїть уся робота з фреймворком і будь-яким API.
Дивитесь у вкладку Network і розумієте, що там відбувається.
Junior: працюєте під наглядом
Вас беруть не за знання, а за здатність швидко вчитися й не мовчати, коли застрягли. Головне завдання етапу: навчитися закривати задачу цілком. Не тільки написати код, а й покрити тестом, пройти рев'ю і не зламати сусіднє.
Перший фреймворк
Роутинг, контролери, шаблони, ORM, валідація. Один фреймворк глибоко корисніший за три поверхово: другий після цього вивчається за кілька тижнів.
Робите CRUD із валідацією й авторизацією, не підглядаючи в туторіал.
ORM, міграції й база
Моделі, зв'язки, міграції, сіди. І одразу розуміння, що ORM генерує SQL, який іноді треба подивитись очима.
Помічаєте N+1 у своєму коді до того, як його побачить рев'юер.
Тести: перші й корисні
Feature-тест на свою фічу це не формальність, а спосіб не боятися змінювати чужий код. Починати варто з тестів, які перевіряють поведінку, а не реалізацію.
Ваш PR містить тест, і цей тест падає, якщо зламати логіку.
Код-рев'ю з обох боків
Приймати зауваження без образи і формулювати свої без переходу на особистості. Цю навичку помічають швидше за технічну.
Ваші PR проходять із першого-другого разу, а не з десятого.
REST і робота з чужим API
Ресурси, методи, коди відповідей, JSON, авторизація токеном. Майже кожна вакансія Junior згадує API, бо саме з інтеграцій починають довіряти новачкам.
Підключили сторонній API і обробили його помилки, а не лише щасливий сценарій.
Налагодження, а не var_dump
Xdebug, брейкпоінти, читання стектрейсу, логи. Уміння знайти причину за п'ять хвилин замість години здогадок.
Знаходите баг у чужому коді, не додаючи туди жодного echo.
Docker для локальної роботи
Підняти оточення проєкту однією командою. Не писати Dockerfile з нуля, а розуміти чужий compose і не боятися його змінити.
Новий проєкт запускається у вас за десять хвилин, а не за день.
Статичний аналіз
PHPStan або Psalm на базовому рівні. Знаходить помилки до запуску й дисциплінує типізацію.
Проєкт проходить перевірку на рівні 5 без ігнорів.
Middle: закриваєте фічу самостійно
Найбільша частина ринку. Від вас чекають не питань «як зробити», а питань «чи варто робити саме так». Тут закінчується вивчення інструментів і починається розуміння компромісів: коли кеш, коли черга, коли просто індекс у базі.
Черги, джоби, ретраї
Що виносити у фон, як робити джоб ідемпотентним і що станеться, коли він упаде втретє. Найчастіша тема на співбесідах Middle після ORM.
Ваш джоб можна запустити двічі, і користувач не отримає два листи.
Транзакції й рівні ізоляції
Коли обгортати в транзакцію, чому дедлок і що таке брудне читання. Помилки цього рівня коштують грошей і виявляються тільки під навантаженням.
Можете пояснити, чому подвійне списання сталося саме через рівень ізоляції.
Кеш і його інвалідація
Що кешувати, на скільки і як скидати. Кеш, який ніхто не вміє скинути, гірший за відсутність кешу.
Знаєте, які саме ключі скине ваш деплой, і чому не всі.
Індекси й план запиту
EXPLAIN, складені індекси, порядок колонок. Найдешевша оптимізація, яку більшість проєктів так і не робить.
Прискорили реальний запит удесятеро, не змінюючи код застосунку.
Проєктування API
Ресурси, версії, пагінація, коди помилок, ідемпотентність запитів. І документація, яку читатимуть інші люди.
Ваш API можна інтегрувати за документацією, не питаючи вас.
Безпека без параної
SQL-ін'єкції, XSS, CSRF, масове призначення, зберігання паролів і секретів. Базовий мінімум, за який не пробачають.
Помічаєте небезпечний код на рев'ю, а не після інциденту.
CI: тести на кожен PR
Пайплайн, який ганяє тести, лінтер і статичний аналіз. Мета не «налаштувати GitHub Actions», а зробити так, щоб зламане не доїжджало до продакшену.
Червоний пайплайн зупиняє злиття, і команда цим користується.
Рефакторинг легасі
Як міняти код, який страшно чіпати: спочатку тест, потім зміна. Навичка, яка відрізняє Middle від Junior найпомітніше, і слово Legacy у вакансіях трапляється частіше, ніж хотілося б.
Розібрали клас на 800 рядків і нічого не зламали.
Мікросервіси: коли ні
Що дає розрізання моноліту і що воно коштує: мережа, узгодженість даних, деплой. У вакансіях слово трапляється часто, у реальних проєктах виправдане рідко.
Можете назвати три причини не виносити сервіс, а не лише три причини винести.
Senior: відповідаєте за систему
Технічні навички тут уже не головна відмінність. Senior бачить наслідки рішення на рік уперед, уміє сказати «не робимо» і пояснити чому, і його присутність підвищує рівень команди навколо.
Межі й архітектура
Де закінчується один модуль і починається інший, коли виносити сервіс, а коли це передчасно. Найдорожчі помилки живуть саме тут.
Ваше архітектурне рішення пережило два роки й три зміни вимог.
Події, брокери, узгодженість
RabbitMQ і Kafka, доставка «щонайменше раз», порядок подій, outbox. Момент, коли система перестає бути одним процесом і починає брехати сама собі.
Проєктуєте обмін між сервісами так, що втрачене повідомлення помічають до того, як помітить клієнт.
Продуктивність під навантаженням
Профілювання, OPcache, JIT, довгі процеси й витоки пам'яті. Уміння знайти вузьке місце вимірюванням, а не інтуїцією.
Скоротили час відповіді на реальних даних і можете показати графік до й після.
Інфраструктура в хмарі
Не адмініструвати сервери, а розуміти, з чого складається продакшен: черги, сховище, керовані бази, секрети, вартість. AWS у Senior-вакансіях згадують частіше, ніж Kubernetes.
Можете оцінити, скільки коштуватиме ваша архітектура на місяць, до того як її побудували.
Спостережуваність
Логи, метрики, трасування, алерти. Різниця між «у нас щось упало» і «упав конкретний споживач черги о 3:14».
Про інцидент дізнаєтесь із моніторингу, а не від користувача.
Менторство й рев'ю
Ростити людей навколо, а не бути єдиним, хто розбирається. Прямий пункт вимог у більшості Senior-вакансій.
Ваш Junior через пів року робить те, що ви робили самі.
Оцінка й декомпозиція
Розбити велику задачу на шматки, які реально закриваються, і назвати терміни, у які потім не соромно дивитися.
Ваші оцінки збігаються з реальністю частіше, ніж ні.
Міграції великих систем
Перехід на нову версію PHP чи фреймворку без зупинки бізнесу: поетапно, зі стратегією відкату.
Провели міграцію, про яку користувачі не дізнались.
Чотири напрямки, а не один
До Middle вимоги в усіх компаніях майже однакові. Далі шлях розходиться, і вибір залежить не від того, що модніше, а від того, які задачі вам цікаво розв'язувати наступні кілька років.
Вакансія часто підходить кільком трекам одразу, тому суми за треками більші за кількість позицій Middle і вище.
Коротко й без ухилянь
Laravel: більше вакансій Junior, м'якший поріг входу і більше україномовних матеріалів. Symfony зазвичай платить трохи вище, але Junior-позицій на ньому помітно менше, туди частіше беруть після року-двох комерційного досвіду. Другий фреймворк після першого вивчається за кілька тижнів, тому вибір на старті не фатальний. Порівняйте самі: перемкніть лінію фреймворку на карті й подивіться на цифри Junior.
Коли задачу можна віддати вам цілком і не перевіряти проміжні кроки. Не за роками: буває Junior із трьома роками, який досі чекає інструкцій, і буває Middle через півтора року. Практичний маркер: ви самі помічаєте проблеми в задачі до того, як почали писати код. Другий маркер: тест Middle на цій платформі проходиться без підглядання.
Мінімум так: HTML, CSS і стільки JavaScript, щоб не блокуватися на кожній дрібниці. Далі залежить від треку. У fullstack це основна частина роботи, у backend-глибині досить Livewire або Inertia, щоб закривати адмінки самому. Чистих бекендерів на ринку лишається дедалі менше, і теги React, Vue і TypeScript у вакансіях це показують.
На рівні Middle базово: Docker, CI, вміння подивитись логи на сервері. Docker і CI/CD стоять у вимогах більшості Middle-вакансій, це видно в блоці ринку кожного етапу. Повноцінний DevOps-трек має сенс, якщо вам справді цікаво те, що відбувається після коміту, а не тому, що за це нібито більше платять.
Ми свідомо не пишемо «три місяці на Junior». Швидкість залежить від того, скільки годин на день ви пишете код, чи є поруч сильніший розробник і які задачі дає робота. Замість строків користуйтесь чекпоінтами: пройшли тест рівня й закрили базові вузли, значить, етап справді пройдено.
Треки не взаємовиключні, а вузли після Middle перекриваються: спостережуваність є і в backend, і в DevOps, а безпека є всюди. Дивіться на «Це ваш трек, якщо» на сторінці треку й на робочий день зсередини. Якщо описане там уже є вашою роботою, ви в цьому треку незалежно від назви посади.
Перевірте себе, а не звіряйтеся зі списком
Найшвидший спосіб зрозуміти, на якому ви етапі, це пройти тест свого рівня: після кожної відповіді розбір, і одразу видно, які вузли ще не закриті.