Що має знаті 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-Intermediate & Intermediate — 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, впроваджувати в проектах. Не скрізь, але потрібно вміння писати технічний дизайн. Потрібно вміти доносити своє бачення. Вміння розбити завдання та уточнити вимоги так, щоб потрапляти в естімейт. Вміти інтегрувати рішення з різними системами.
Самокритика дуже важлива на позиції сеньйора. Він повинен критично ставитися до своїх реалізацій і по можливості їх покращувати до такого рівня, коли код стає легко підтримуємо і читаємо іншими людьми. Він повинен брати участь у повчанні молодших розробників. Важливо вміти робити складний рефакторинг, вам часом буде зустрічатися код, який буде настільки жахливий, що захочеться його переписати, а часу ніхто не дасть, тільки рефакторіть по трохи, щоб полегшити наступні зміни.
По стеку, на мою думку, потрібен досвід роботи з одним з поширених фреймворків та глибоке розуміння його структури і роботи, вміння відтворити його компоненти, досвід роботи з MV* патернами. Також досконально знати одну з популярних реляційних БД (MySQL, PostgreSQL) і досвід тюнінгу запитів, досвід роботи і знання noSQL-рішень (які бувають типи і для чого використовуються). Звичайно, потрібно добре знати і застосовувати на практиці різні парадигми програмування там, де це доречно.
Знати JavaScript крім PHP. Чистий JS зараз вже практично не зустрічається, зазвичай в наважок йде фреймворк, тому знати, як сучасні JS-фреймворки працюють, потрібно. Контейнеризація давно вже не в новинку і використовується в проектах командами, тому користуватися Docker треба вміти. Вміння працювати в UNIX-системах і знання bash — це те, без чого не обійтися. Вміти правильно визначати межі сервісів.
Різні принципи розробки та патерни потрібно знати і дотримуватися їх на практиці, якщо це виправдано. У сеньйора не повинно виникати труднощів з інженерними практиками, принципами та підходами, він їх застосовував і зможе пояснити, навіщо вони, і має своє бачення, де їх використовувати і чому.
Потрібно вміти писати тести, використовуючи PHPUnit. Знати про існування різних типів тестів, selenium. Потрібно вміти користуватися різного роду допоміжними тулами: XDebug, Blackfire (або XHProf). Вміти правильно писати і читати логи. Знати про існування стандартів PHP, впроваджувати в проектах. Не скрізь, але потрібно вміння писати технічний дизайн. Потрібно вміти доносити своє бачення. Вміння розбити завдання та уточнити вимоги так, щоб потрапляти в естімейт. Вміти інтегрувати рішення з різними системами.
Олександр Тумановський , Tech Lead в Beetroot
PHP-сеньйор повинен розуміти кінцеву мету використання того чи іншого пакету, фреймворку або частини фреймворку, щоб вибрати оптимальне рішення. Для цього дуже важливо вміти ставити питання «навіщо?». І в першу чергу ставити його самому собі: «Чому я вибираю саме це рішення поставленої задачі?», «Є це рішення найоптимальнішим?», «А чи правильно сама вимога, яку я намагаюся вирішити?».
Я б не радив зациклюватися на одному фреймворку, в тому числі і на популярних, як, наприклад, Symfony або Zend. Будь фреймворк — це обмеження. Розробник, що працює тільки в одному фреймворку, навіть маючи величезний досвід, рано чи пізно зіткнеться з задачею, що не вирішується можливостями цього фреймворку. Крім того, завжди є ризик, що розробники фреймворку або компонента перестануть його розвивати, як це сталося з Propel.
Тому потрібно розуміти, як працює компонент і вміти створювати свій. Здатність знаходити золоту середину з усього пропонованого готового функціоналу і не боятися створювати рішення самостійно — це те, що відрізняє сеньйора від менш досвідчених розробників.
PHP-сеньйор повинен розуміти кінцеву мету використання того чи іншого пакету, фреймворку або частини фреймворку, щоб вибрати оптимальне рішення. Для цього дуже важливо вміти ставити питання «навіщо?». І в першу чергу ставити його самому собі: «Чому я вибираю саме це рішення поставленої задачі?», «Є це рішення найоптимальнішим?», «А чи правильно сама вимога, яку я намагаюся вирішити?».
Я б не радив зациклюватися на одному фреймворку, в тому числі і на популярних, як, наприклад, Symfony або Zend. Будь фреймворк — це обмеження. Розробник, що працює тільки в одному фреймворку, навіть маючи величезний досвід, рано чи пізно зіткнеться з задачею, що не вирішується можливостями цього фреймворку. Крім того, завжди є ризик, що розробники фреймворку або компонента перестануть його розвивати, як це сталося з Propel.
Тому потрібно розуміти, як працює компонент і вміти створювати свій. Здатність знаходити золоту середину з усього пропонованого готового функціоналу і не боятися створювати рішення самостійно — це те, що відрізняє сеньйора від менш досвідчених розробників.
Олександр Скакунів , Senior Software Engineer в Perfectial
Будь сеньйор, не тільки РНР, по-перше, вздовж і впоперек розуміє інструментарій, яким користується. Наприклад, він може не тільки розповісти, як правильно використовується той або інший підхід або фреймворк, але і у разі неправильного його використання, як без нього можна обійтися і чим це обернеться. Це те, що відрізняє розумного від мудрого — розумний знає як робити, мудрий знає, як не робити. Це приходить з досвідом — без цього ми отримуємо «23-річних сеньйорів», яких можна віднести до категорії «розумних, але ще не мудрих».
По-друге, сеньйор вміє це знання прокоммуницировать. Наприклад, навіть знаючи більш відповідне рішення, він не стане з виряченими очима доводити свою правоту, а якщо його не розуміють, обзивати опонентів «хворими " виродками». Сеньйор все це вже проходив, тому просто ставить точний питання — як система поведе себе в проблемних ситуаціях А і Б. Дискусія переходить в конструктивну площину. Цим він дає можливість опоненту самому прийти до правильногорішення. Діяти так — і є ознака зрілості розробника.
Будь сеньйор, не тільки РНР, по-перше, вздовж і впоперек розуміє інструментарій, яким користується. Наприклад, він може не тільки розповісти, як правильно використовується той або інший підхід або фреймворк, але і у разі неправильного його використання, як без нього можна обійтися і чим це обернеться. Це те, що відрізняє розумного від мудрого — розумний знає як робити, мудрий знає, як не робити. Це приходить з досвідом — без цього ми отримуємо «23-річних сеньйорів», яких можна віднести до категорії «розумних, але ще не мудрих».
По-друге, сеньйор вміє це знання прокоммуницировать. Наприклад, навіть знаючи більш відповідне рішення, він не стане з виряченими очима доводити свою правоту, а якщо його не розуміють, обзивати опонентів «хворими " виродками». Сеньйор все це вже проходив, тому просто ставить точний питання — як система поведе себе в проблемних ситуаціях А і Б. Дискусія переходить в конструктивну площину. Цим він дає можливість опоненту самому прийти до правильногорішення. Діяти так — і є ознака зрілості розробника.
Опубліковано: 25/02/19 @ 11:29
Розділ php
Рекомендуємо:
Просів трафік після змін на сайті НИМ – як відновити?
Information Security дайджест #13: Лллакинамбур
Hello World у Computer Vision: визначаємо швидкість руху авто на кордоні з Польщею
Віра в ідею, culture fit і самонавчання: що вимагають від кандидатів каліфорнійські стартапи
Огляд Essential SAFe: про методологію людською мовою