QA Fest — конференция №1 по тестированию и автоматизации. Финальная программа уже на сайте >>

Що має знати Senior PHP Developer. Результати аналізу вакансій в Україні та Каліфорнії

Які навички потрібно розвивати, щоб претендувати на роль Senior PHP Developer? Чи відрізняються вимоги в Україні та Каліфорнії, яка є Меккою програмування?

Щоб з’ясувати це, я проаналізував 100% відкритих вакансій на DOU в Україні та LinkedIn в Каліфорнії. На мої радари потрапили серед інших вакансії компаній Facebook та Dell. Для кожної технології було підраховано відсоток вакансій, у яких вона вказана як обов’язкова, і окремо як «бажана, але не обов’язкова».

Картина в Україні та Каліфорнії багато в чому схожа, але прослідковується низка відмінностей. Щоб можна було побачити «розклад сил» наочно, Ігор Яновський створив для нас інтерактивний віджет.

Методика

Станом на 20 січня в рубриці PHP на DOU було розміщено 57 вакансій Senior Developer. У Каліфорнії на LinkedIn станом на 3 лютого мені підійшла лише 31 вакансія, що вимагала PHP. Критерієм відбору була не назва вакансії, а вказівка на PHP як основну мову розробки, тому вакансії Senior Web Developer тощо теж потрапили в дослідження. Пошукова видача на LinkedIn, Indeed (який часто дублює LinkedIn) та Rabota.ua може показувати сотні та тисячі, але, як з’ясувалося, це відбувається за рахунок нерелевантних результатів: або не Senior, або не PHP, або ні те, ні друге.

Facebook принципово не використовує слово «Senior», але їхні вакансії «Engineer», що вимагали 5+ років досвіду, включені в дослідження.

Вакансії стафінгових агенцій я ігнорував. Це пов’язано з тим, що одну вакансію можуть вести декілька агенцій, що призведе до викривлення результатів. Крім того, деякі стафери можуть практикувати фейкові вакансії, щоб наповнювати свою базу кандидатів.

Аналіз був здійснений вручну, а не скриптом. Це пов’язано з тим, що назва технології може бути записана в вакансії з помилкою. Але значно вагоміша причина в тому, що в разі проходження скриптом поза увагою опинилися б технології, не включені в попередній список.

Англійська мова вирішує

Знання англійської мови в Україні вказується в більшості вакансій та поступається лише MySQL та JavaScript. Ясно, що без MySQL PHP-розробника бути не може. Відсоток англійської, співставний з MySQL, показує, яку роль відіграють іноземні замовники, та розвіює міф про роботу пехапешників на внутрішній ринок.

Рівень англійської є вирішальним для визначення компенсації. Найчастіше роботодавці згодні на Intermediate, тоді як Advanced не вказали в жодній вакансії. Причиною є висока ціна спеціалістів рівня Advanced.

Я звернувся до альтернативного зарплатного віджету, щоб побачити різницю в компенсації залежно від рівня англійської для Senior PHP-розробника. Вона колосальна.

Pre-IntermediateIntermediate — 79 анкет, середня компенсація 3 036 доларів США після податків.

Upper-Intermediate — 45 анкет, 3 361 долар.

Advanced — 12 анкет, 3 791 долар.

Небажання вчитись та підтягнути свій рівень до Advanced коштує (3 791 — 3.036) x 12 = 9 060 доларів на рік.

Не знаннями єдиними: Soft Skills

Впадає в око, яку велику роль відіграють soft skills. Ми часто буваємо дуже розумними, але не здатними конструктивно спілкуватись. Можливо, частину часу, який ми присвячуємо вивченню технологій, варто спрямувати на те, щоб попрацювати над своєю поведінкою та світоглядом.

Але які конкретно вимоги стоять за узагальненим формулюванням «soft skills»?

Dell: «Excellent written and verbal communications skills — communicate to engineers, managers, and senior leadership».

Ciklum: «Ability to relate positively to and engage with a wide range of people».

DevBranch (Луцьк): «You are a strong team player with very good communication skills».

Фреймворки: є явні лідери

Symfony та Laravel є абсолютними лідерами серед фреймворків. Для Symfony в Україні часто конкретизують версію, і видно, що найпопулярнішою є Symfony 3.

Розповсюджені в Каліфорнії CodeIgniter та CakePHP — це фреймворки епохи фараонів Єгипту. В Україні лише в 1 вакансії як as a plus було згадано Kohana, що є відгалуженням CodeIgniter. Те, що ми не отримуємо такі проекти на аутсорсинг, може свідчити про відсутність актуальних проектів на цих технологіях. Можливо, їх вказують у вакансіях, щоб дати шанс розробникам, що загубилися в часі.

В той же час Drupal та Wordpress безсумнівно є досить популярними, але тим не менше майже відсутні у вимогах. Просто вони є нескладними CMS, для роботи з якими ніхто не захоче платити людині за рейтом сеньора.

А от майже відсутність російського Yii, який є повноцінним фреймворком, свідчить про його непотрібність в Україні. Yii є дуже популярним в Росії, але, як ми бачимо, не в нас.

Що буде плюсом?

Плюсом для кандидата найчастіше є знання Docker, NoSQL та AWS, а також Python та Node.js.

Amazon Web Services складно назвати бездоганним рішенням. Наприклад, AWS може віддавати помилку без жодного інформативного коду, назви чи опису. Але існуючи з 2006 року, має історично-обумовлені сильні позиції.

Концепція NoSQL лежить в основі таких технологій, як MongoDB, Redis та Memcached. Розуміння принципу NoSQL відкриває можливість опанування будь-якої з NoSQL-технологій. Їх тільки як вагомі Вікіпедія називає 45. Серед них є як технології персистентності, так і засоби кешування в оперативній пам’яті.

Існує термін LAMP Developer. У цій абревіатурі перші три літери мають сталу розшифровку: Linux, Apache, MySQL. Але остання символізує відразу 3 мови програмування: PHP, Python та Perl. Вони розглядаються як ідеологічно близькі та взаємозамінні, і в Америці є нормальною практикою залежно від задачі переключатись з PHP на Python, залишаючись при цьому LAMP-розробником. Саме з цим пов’язана висока частка побажань знати Python, хоча вимагати цього ніхто не стане.

Особливості України

Українські роботодавці масово вказують у вимогах PHP 7. Не секрет, що на старих проектах може не бути ООП, і вказівка на версію сигналізує, що тим, хто сидить на таких проектах, слід попрацювати над своїми знаннями.

Хоча російський сервер Nginx в Україні вказують частіше, перевага більш старої технології Apache в Каліфорнії вказує на те, що є сенс її вчити.

Continuous Integration та Unit Tests на масштабному проекті критичні. Але у нас ці знання нерідко бувають terra incognita навіть для досвідченого PHP-розробника. Раніше на DOU виходила стаття про досвід впровадження Continuous Integration в PHP-проекті та стаття про PHPUnit.

SOLID вимагають 14% вакансій в Україні, але жодна в Каліфорнії. Про українську любов до SOLID цікаво писав у своїй статті Олександр Скакунов, що повернувся з Данії: «Каждую букву из слова „SOLID“ мы использовали на практике, но расшифровывать аббревиатуры и именовать виды полиморфизма — seriously?»

В Україні люблять вказувати багато конкретики у вимогах, тоді як на Заході домінує думка, що є багато таких речей, які за потреби здібній людині буде нескладно вивчити. Ніхто не скаже «Не Redis-эксперт да не войдёт!».

Цікавинки, знайдені у вакансіях

Компанії Synergetica та Teamwork пропонують у Києві компенсацію до $5 000.

Низка вакансій передбачають відрядження: до Берліна, Мюнхена та Чикаго.

Дуже відверто розповідає про свій проект компанія 12go.asia: «У нас сложный код, который писали разные разработчики, тестами не покрыт, не используются ООП, фреймворки».

Думки технічних експертів

Владислав Щербина, Senior Software Engineer в Adobe, Лос-Анджелес

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

По стеку, по моему мнению, нужен опыт работы с одним из распространенных фреймворков и глубокое понимание его структуры и работы, умение воспроизвести его компоненты, опыт работы с MV* паттернами. Также досконально знать одну из популярных реляционных БД (MySQL, PostgreSQL) и опыт тюнинга запросов, опыт работы и знания noSQL-решений (какие типы бывают и для чего используются). Конечно, нужно хорошо знать и применять на практике разные парадигмы программирования там, где это уместно.

Знать JavaScript помимо PHP. Чистый JS сейчас уже практически не встречается, обычно в навесок идет фреймворк, поэтому знать, как современные JS-фреймворки работают, нужно. Контейнеризация давно уже не в новинку и используется в проектах командами, поэтому пользоваться Docker надо уметь. Умение работать в UNIX-системах и знание bash — это то, без чего не обойтись. Уметь правильно определять границы сервисов.

Разные принципы разработки ПО и паттерны нужно знать и следовать им на практике, если это оправдано. У сеньора не должно возникать трудностей с инженерными практиками, принципами и подходами, он их применял и сможет объяснить, зачем они, и имеет свое видение, где их использовать и почему.

Нужно уметь писать тесты, используя PHPUnit. Знать про существование разных типов тестов, selenium. Нужно уметь пользоваться разного рода вспомогательными тулами: XDebug, Blackfire (или XHProf). Уметь правильно писать и читать логи. Знать о существовании стандартов PHP, внедрять в проектах. Не везде, но нужно умение писать технический дизайн. Нужно уметь доносить свое видение. Умение разбить задачи и уточнить требования так, чтобы попадать в эстимейт. Уметь интегрировать решение с различными системами.

Александр Тумановский, Tech Lead в Beetroot

PHP-сеньор должен понимать конечную цель использования того или иного пакета, фреймворка или части фреймворка, чтобы выбрать оптимальное решение. Для этого очень важно уметь задавать вопрос «зачем?». И в первую очередь задавать его самому себе: «Почему я выбираю именно это решение поставленной задачи?», «Является ли это решение самым оптимальным?», «А правильно ли само требование, которое я пытаюсь решить?».

Я бы не советовал зацикливаться на одном фреймворке, в том числе и на популярных, как, например, Symfony или Zend. Любой фреймворк — это ограничение. Разработчик, работающий только в одном фреймворке, даже имея огромный опыт, рано или поздно столкнется с задачей, которая не решается возможностями этого фреймворка. Кроме того, всегда есть риск, что разработчики фреймворка или компонента перестанут его развивать, как это случилось с Propel.

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

Александр Скакунов, Senior Software Engineer в Perfectial

Любой сеньор, не только РНР, во-первых, вдоль и поперек понимает инструментарий, которым пользуется. Например, он может не только рассказать, как правильно используется тот или иной подход или фреймворк, но и случае неправильного его использования, как без него можно обойтись и чем это обернется. Это то, что отличает умного от мудрого — умный знает как делать, мудрый знает, как не делать. Это приходит с опытом — без этого мы получаем «23-летних сеньоров», которых можно отнести к категории «умных, но еще не мудрых».

Во-вторых, сеньор умеет это знание прокоммуницировать. Например, даже зная более подходящее решение, он не станет с выпученными глазами доказывать свою правоту, а если его не понимают, обзывать оппонентов «больными ублюдками». Сеньор все это уже проходил, поэтому просто задает точный вопрос — как система поведет себя в проблемных ситуациях А и Б. Дискуссия переходит в конструктивную плоскость. Этим он дает возможность оппоненту самому прийти к правильному решению. Действовать так — и есть признак зрелости разработчика.

LinkedIn

47 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Очень полезная статья. Спасибо, за проделанный труд!

Можно на бис , но уже с Python в главной роли? А так , однозначно лайк)

Дякую! Плануємо охопити різні технології, і Python серед перших.

А що ПХП ще не помер?

На ДОУ зараз 393 вакансії ПХП та 322 вакансії Java. Мабуть, агонія :D

jobs.dou.ua/vacancies/?category=PHP
jobs.dou.ua/vacancies/?category=Java

Нет, ну честно, я не специально, но это довольно забавное совпадение
www.instantshift.com/...​why-choose-yii-framework

Кто не знает — один из ведущих блогов на web-dev тематику.

И? samdark там в первом же комментарии дал ссылку на то, что обсуждение и разработка третей версии в самом разгаре. Я ни к чему не призываю. Знание фреймворков, по моему скромному мнению, вообще не самоцель. Для синьёра вообще как таковое знание конкретного фреймворка — это две недели работы с документацией и примерами.

Насчет знания фреймворков — тут полностью согласен

Если в компании нет англоговорящих сотрудников, с которыми надо общаться, работая над одним проектом, а в требованиях вакансии указан высокий уровень разговорного английского — то для меня это главный маркер бодишопа!
И никакие +700 лично для меня не компенсируют нервотрепки и других недостатков аутстаффинга, как минимум +1500 — и я еще буду думать.
При нормальном аутсорсе, когда продается не разработчик, а услуга по разработке проекта — у конторы всегда есть операционный персонал для разговоров с заказчиками : продажники, ПМы и т.п.
А разработчику вполне хватит умения читать/писать на английском, не тратить свои нервы на «разговоры» с заказчиками и получать среднерыночную оплату, понимая, что ему в данном случае вполне обосновано достается половина того, что платит заказчик, т.к. свою половину контора в данном случае вполне отрабатывает.
Т.е. при аутстафе должно быть не +700, а +50% как минимум, ибо в этом случае контора не делает ничего кроме поиска клиентов, а потом просто оставляет себе половину от выплат клиента, переводя другую половину разработчику, на этом ее деятельность по сути заканчивается.

Не соглашусь. Сравнивая два последних места, Епам в Минске и CHECK24 в Германии, впечатления у меня гораздо лучше об аутсорсинге в Епам, чем в продуктовом чеке. Во втором полно микроменеджмента, ужасного кода и тимлидов, которые впервые видят свой технологический стек. Туда же таймеры, переделки по пять раз из-за некомпетентных PO. В целом ч24 компания из разряда распила инвестиций в Германии. Всего этого я не видел в аутсорсинге.
Похожий негативный опыт и о другой, Минской , продуктовой компании.

Если вы как и я — так же «обеими руками» за аутсорсинг, то с чем именно вы несогласны?

Какая разница сколько процентов получает контора, если за твои обязанности тебе платят устраивающую тебя сумму? А без контакта с заказчиками будешь тратить нервы на игру в сломанный телефон.

классная визуализация!

А чо це yii російський? Він міжнародний цілком.
www.yiiframework.com/team

Так. Причому акцент на слові «міжнародний» зараз став для маркетологів nginx справою принципу. Тому що з точки зору технологій вони номер один в своїй ніші worldwide, але російське походження впливає на сприйняття. Але все одно вони залишаються гордістю Росії, і я вирішив таким чином зробити комплімент сусідній країні ;)

Если идеологически не нравится Nginx — HAProxy в помощь ))) Не нравится HaProxy — выносите статику в CDN, а всё API заворачивайте через L2 load balancer на backend со Swoole или ReactPHP.
P.S.: Выбор есть всегда, правда он может быть херовый или очень херовый...

Мені здається, що навіть ідеоголічно з nginx жодних проблем немає. Вони чітко показали свою позицію: «Ми хочемо бути міжнародною компанією».

Хоча зараз навіть Яндекс зареєстрований в Нідерландах. Так само багато з компаній, які на ДОУ прийнято називати українськими, зареєстровані за кордоном.

Але в медіа як правило не кажуть «кіпрська компанія Міжнародні Авіалінії України», хоча вона і «кіпрська».

От хз... При всей моей идеологичности, nginx никогда не попадал в категорию ’ну его нафиг’
Всегда его воспринимал как международный продукт, хоть и с российскими корнями

В жодному місці я не писав «ну его нафиг». Чомусь люди сприймають слово «російський» як звинувачення. Але для росіян це предмет гордості не менше, ніж для українців PetCube, що зареєстрований в Каліфорнії.

Вибачте, але ми одне одного не так напевне зрозуміли
— у мене є моя власна категорія «ну його в дупу», туди потрапляє майже все россійське,
Але от Nginx не потрапляє, бо я його ніколи російським не сприймав, це не yandex або хабр

IntellJ от JetBrains також в дупу або сприймати worldwide?

Ну власне, ним я майже не користуюсь, ну і ясно що тріал

Так у нгінкса, все ж, один основний засновник, розробник та ідеолог, а у уіі — типова опенсорсна команда, а засновник взагалі китаєць, то що, він був китайським?) там, судячи з усього, з України розробників зараз чи не більше, ніж з рашки, а звідти от хіба Макаров.
Що більше популярний в екс совку, китаї і Індії — це так.
Але все ж, вважаю некоректно називати його російським, на відміну від нгінкса, де це спірне питання

Классика жанра

Вакансия: водитель.
Требования: профессиональные навыки в управлении легковыми и грузовыми автомобилями, троллейбусами, трамваями, поездами метрополитена и фуникулёра, экскаваторами и бульдозерами, спецмашинами на гусеничном ходу, боевыми машинами пехоты и современными легкими/средними танками, находящимися на вооружении стран СНГ и НАТО. Навыки раллийного и экстремального вождения обязательны. Опыт управления болидами «Формулы 1» — приветствуется. Знания и опыт ремонта поршневых и роторных двигателей, автоматических и ручных трансмиссий, систем зажигания, бортовых компьютеров, антиблокировочных систем, навигационных систем и автомобильных аудиосистем ведущих производителей. Опыт проведения кузовных и окрасочных работ — приветствуется. Претенденты должны иметь сертификаты Mercedes, BMW, General Motors, а также справки об участии в крупных международных соревнованиях не более, чем двухлетней давности.Зарплата: определяется по результатам собеседования."

Угу. Только еще «зарплата — по результатам заезда на треке» а работа — «водить автобус по бездорожью».
А еще украинские «сеньйоры» считают, что не стоит работать с большинством проектов, поскольку там

фреймворки епохи фараонів Єгипту

А также украинские эксперты ставят в один ряд апач(многоцелевой сервер)и nginx(прокси).
Ну и считают «нескладным » Wordpress и так, по мелочи

CodeIgniter та CakePHP на більшості проектів? А на яких саме? У яких компаній є такі проекти?

Так вы ж сами пишите, что в требованиях стоят — значит — используются, не?

В Україні 0.

Те, що ми не отримуємо такі проекти на аутсорсинг, може свідчити про відсутність актуальних проектів на цих технологіях. Можливо, їх вказують у вакансіях, щоб дати шанс розробникам, що загубилися в часі.

Да, и с каких пор Nginx стал не многоцелевым? Из коробки умеет не только классическое проксирование, но LB + проксирование TCP/UDP в чистом виде. Я бы вообще из связки выкидывал Apach как анахронизм эпохи говнокодеров на PHP. Nginx + php-fpm вам в помощь, не нравится такое — покупайте коммерческое Nginx+
P.S.: Уж лучше самому выбирать с чем работать а с чем — нет, чем из-под палки шевелить то что мёртвое изначально и хвататься за всё подряд...

Вот. php-fpm тогда надо сравнивать с апачем, не?

Я з вами повністю погоджуюсь. Єдиний нюанс в тому, що роботодавці вже порівняли php-fpm з апачем, проігнорувавши перший у вакансіях як в Україні, так і в Каліфорнії. Тому в категорії «технології серверів» поруч з ним не опинився ніхто, крім nginx.

Не находите, что сравнивать менеджер процессов с Web-сервером как-то не корректно? Тем более что тот же Apache «из коробки» вяжется с php-fpm и вопрос исключительно в архитектуре Web-сервера.

Найважливіший скіл для PHP розробника: JavaScript
¯\_(ツ)_/¯

На самом деле в JavaScript нет ничего сложного кроме придурковатого исторически сложившегося дизайна в части замыканий и костылей по изобретению классов, а способность связать Front-End с Back-End добавляет автономности и самостоятельности разработчику + ЗП. Дизайн с картинками пусть натягивают дизайнеры, а принять/обработать/отправить данные и выплюнуть их во что-то визуальное — ума много не нужно, тем более такой навык позволяет самом у прощупать всю коммуникацию приложения со своим API

Ем.. А в цьому топіку хтось скаржився, що JavaScript складний?

IMHO: в важный скил для PHP я бы писал MySQL, memcache, Redis, PgSQL, серверы очередей, Nginx, Apache но никак не JavaScript...

Где-то пыхеры апишки разрабатывают, там js не нужен, а где-то верстку подключают и клиентскую логику пишут, тут как раз js.
Так что it depends, как говорят.

Back-End без БД, кэшей, очередей и механизмов раздачи никому не нужен, тут уж сколько JS к больному месту не прикладывай...

только скрипач apache не нужен

Согласен, не нужен, но для расширения кругозора не помешает, да и вообще...

Чет тут срача не хватает :)

придурковатого исторически сложившегося дизайна в части замыканий и костылей по изобретению классов

Вот каждый раз после JS, все что связано с callable/closure в РНР вызывает дикое негодование и JS кажется хорошим

Дело вкуса, иногда вкус бывает плохой )))

иногда вкус бывает плохой

Я бы это назвал не общепринятый
А хороший вкус рискует оказаться не более чем стереотипом :)

Также как и мода %)

Подписаться на комментарии