Що має знати Senior C++ Developer. Аналіз вакансій в Україні та Каліфорнії
Це вже п’ята стаття серії «Що має знати Senior». В попередніх випусках було розглянуто iOS/macOS, PHP, Java та Front-end. Тепер настала черга C++.
Станом на 18 жовтня на DOU було 26 вакансій Senior C++ Developer. 7 січня — ще 18 нових. У Каліфорнії в LinkedIn 19 січня — 24 вакансії, зокрема від Walt Disney, DreamWorks, Unity, Adobe,AMD та Samsung.
Розробників шукають на абсолютно різні проєкти: Artificial Intelligence, Automotive, Blockchain, Embedded, Game Development, Robotics, Windows Apps Development, 3D Printing. Не дивно, що десятки технологій трапилися лише один чи два рази. Тим не менше, вдалося знайти багато спільного для вакансій Senior C++ з різних предметних галузей.
В Україні — англійська та Linux, в Каліфорнії — освіта та комунікаційні навички
Освіта для C++ розробника відіграє помітно важливішу роль, ніж для інших спеціалізацій. В Україні профільну вищу освіту від Senior C++ вимагає 21% вакансій проти 11% від Senior Front-end та 16% від Senior Java. А в Каліфорнії цей показник для C++ взагалі зашкалює: 63%.
Знання Linux в Україні вимагають 40% вакансій проти 21% в Каліфорнії. За океаном цінують не стільки hard, скільки soft skills. Так, комунікаційні навички згадують загалом 58% вакансій Каліфорнії проти 30% в Україні. Знання технологій, на думку американських роботодавців, можна і наздогнати: знання того самого Linux 13% вакансій в CA згадали лише як плюс. В Україні це зазвичай must have.
Англійська вже звично стала навичкою номер один в Україні. Хоча вимога знання англійської на цей раз траплялася дещо рідше: 50% для C++ проти 61% для Java. Але ці цифри загалом є близькими і можна вже говорити про тенденцію, актуальну для різних IT-спеціалізацій: приблизно кожна друга вакансія в Україні вимагає знання англійської, що явно пов’язано з домінуванням аутсорсингу в структурі IT країни. О, це тягне на відкриття Америки! :D
Віджет з усіма вимогами у вакансіях Senior C++ Developer
Сірим кольором виділені додаткові вимоги. Щоб подивитися їх, натисніть у віджеті на чекбокс «Врахувати додаткові побажання»
Рівень володіння англійською: Advanced нікому не потрібен
Але який рівень володіння англійською вимагається? Насправді невисокий. Загалом рівень уточнено в 38% вакансій, з них по 18% вимагають Intermediate та Upper-Intermediate. Вимога знати на Advanced — велика рідкість, і це вже теж тенденція, яка повторюється від спеціалізації до спеціалізації.
Зростання рівня англійської може дати Senior C++ розробнику $2148 на рік проти 7-10 тисяч для інших IT-спеціалізацій. Схоже, що від плюсовика очікується, що він буде більше писати код і менше говорити :D
Правило 5 років досвіду
Отримати личку Senior теоретично можна вже з 2 роками досвіду, але таких вакансій дуже мало та вони, як правило, мають формулювання Middle/Senior C++ Software Engineer. Частіше за все роботодавці спираються на так зване правило 5 років. Причому в Каліфорнії це ще більш виражено, ніж в Україні. Маєш за плечима 5 років досвіду — можеш претендувати на роль Senior. Більший поріг, як-то 6 чи 7 років, мало хто встановлює, але буває.
Розподіл вимог до досвіду роботи Senior C++ Developer в Україні й Каліфорнії
Буде плюсом: Python
Python згадує кожна четверта вакансія як в Україні, так і в Каліфорнії. Причому 21% українських вакансій називають його як додаткове побажання. Це означає, що знайти досвідченого C++ розробника з належним рівнем знання Python — непросто, але він всім потрібен. Саме знання Python стає конкурентною перевагою на ринку праці в умовах, коли машинне навчання відіграє все більшу роль. Вчіть Python!
XCDS готова платити до 4 200 в Харкові. В компанії існує традиція The Game Day.
Career Art шукає працівника для WowApp. На нього чекає віддалена робота зі спеціалізацією на Qt, компенсація до 5 000 та 2-3-тижневий онбординг в Бухаресті (Румунія).
Brightgrove пропонує релокацію до Канади у разі успішного проходження випробувального періоду.
Ukr.netобіцяє роботу з C++17, спортзал в офісі та медичне страхування, що покриває всі види захворювань. Цікаво, чи означає це, що страховка покриє навіть лікування раку?
Delphi Software пропонує не лише індивідуальне страхування здоров’я, але і сімейне.
Безперечно, це технічно підкована людина. Сучасні стандарти С++, бібліотека STL, багатопотоковість та concurrency — це безумовний скупий мінімум.
Для Senior-розробника перш за все важливим вмінням є проектування та дизайн програмного продукту. Тому знання структур даних, алгоритмів, шаблонів проектування є необхідними.
Крім того, Senior — це не недосяжний мудрець на високому троні. Це людина, яка постійно перебуває в активній співпраці з усією командою: підказати, пояснити, порадити...
Добре, коли Senior може виступати і ментором для своїх менш досвічених колег, і активним учасником дискусій довкола архітектурних рішень. Важливо розуміти, що кожний проект диктує свої правила і вимоги.
Хороший спеціаліст — універсальний солдат — швидко вчиться і адаптується до будь-яких умов, знаходить спосіб проявити свої сильні якості, щоб якнайкраще справитися з певною задачею.
Безперечно, це технічно підкована людина. Сучасні стандарти С++, бібліотека STL, багатопотоковість та concurrency — це безумовний скупий мінімум.
Для Senior-розробника перш за все важливим вмінням є проектування та дизайн програмного продукту. Тому знання структур даних, алгоритмів, шаблонів проектування є необхідними.
Крім того, Senior — це не недосяжний мудрець на високому троні. Це людина, яка постійно перебуває в активній співпраці з усією командою: підказати, пояснити, порадити... Добре, коли Senior може виступати і ментором для своїх менш досвічених колег, і активним учасником дискусій довкола архітектурних рішень.
Важливо розуміти, що кожний проект диктує свої правила і вимоги.
Хороший спеціаліст — універсальний солдат — швидко вчиться і адаптується до будь-яких умов, знаходить спосіб проявити свої сильні якості, щоб якнайкраще справитися з певною задачею.
Для того, щоб стати Senior C++ розробником у пересічній українській компанії потрібно відносно небагато. Мінімальні вимоги — це кілька років комерційного досвіду, уміння розповісти про віртуальні деструктори та відмінності вектора від ліста, таке-сяке знання англійської і «успіх» гарантований. За моїми спостереженнями майже усі Junior’и й Middle’и так чи інакше стають Senior’ами. Це стосується не лише С++, а і будь-якої іншої мови програмування. Причому я б не називав це «девальвацією» Senior’ів: виглядає, що так було завжди.
Більш доцільно говорити про те, як стати хорошим спеціалістом. На мою думку, мова програмування — це вторинне, найголовніше — це інженерні навички. Тут я маю на увазі уміння декомпонувати складні задачі на прості, абстрагуватися від неважливих деталей, шукати корінь проблеми, розуміти, як побудована система. Тобто це фактично здатність виконати будь-яку задачу.
Але водночас варто пам’ятати, що просто зробити складно, а ось зробити просто — значно складніше. Я зустрічав багатьох чудових інженерів, які пишуть надлишково складний код. Часто такий код навіть працює, причому непогано. Працює аж до того часу, поки не виникає необхідність поміняти логіку або розширити функціональність. Потрібно пам’ятати, що код частіше читають, ніж пишуть.
Час від часу стикаюся з думкою, що знання того чи іншого фреймворку робить тебе кращим інженером. Але у світі С++ подібні ілюзії трапляються не надто часто. Адже тут досі немає єдиного універсального фреймворку, який усі використовують. Звісно, є boost, С++11 значною мірою змінив ситуацію, однак навіть зараз постійно доводиться мати справу з дуже специфічними інструментами, часто спроектованими неналежним чином.
На співбесідах у деяких компаніях задають задачі на вміння використовувати алгоритми. Радує, що на нашому ринку також починають з’являтися подібні компанії. Зрозуміло, що в повсякденній робочій практиці ми стикаємося з алгоритмічними задачами нечасто, однак саме такий формат співбесіди дає змогу зрозуміти, як мислить людина. Тобто це така собі інтелектуальна гра, яка дозволяє за короткий проміжок часу приблизно оцінити рівень інженерних і комунікативних навичок.
Тут ми плавно підійшли до іншого важливого атрибуту хорошого спеціаліста — «soft» навичок. Насамперед, це вміння працювати в команді. Слідувати прикладу протоколу TCP і бути вимогливим до себе і поблажливішим до інших. Усвідомлювати бізнесову цінність тих чи інших задач. Робити те, що потрібно і не робити зайвого. Не залишати багато технічного боргу. Документувати результати своєї роботи.
Для того, щоб стати Senior C++ розробником у пересічній українській компанії потрібно відносно небагато. Мінімальні вимоги — це кілька років комерційного досвіду, уміння розповісти про віртуальні деструктори та відмінності вектора від ліста, таке-сяке знання англійської і «успіх» гарантований. За моїми спостереженнями майже усі Junior’и й Middle’и так чи інакше стають Senior’ами. Це стосується не лише С++, а і будь-якої іншої мови програмування. Причому я б не називав це «девальвацією» Senior’ів: виглядає, що так було завжди.
Більш доцільно говорити про те, як стати хорошим спеціалістом. На мою думку, мова програмування — це вторинне, найголовніше — це інженерні навички. Тут я маю на увазі уміння декомпонувати складні задачі на прості, абстрагуватися від неважливих деталей, шукати корінь проблеми, розуміти, як побудована система. Тобто це фактично здатність виконати будь-яку задачу.
Але водночас варто пам’ятати, що просто зробити складно, а ось зробити просто — значно складніше. Я зустрічав багатьох чудових інженерів, які пишуть надлишково складний код. Часто такий код навіть працює, причому непогано. Працює аж до того часу, поки не виникає необхідність поміняти логіку або розширити функціональність. Потрібно пам’ятати, що код частіше читають, ніж пишуть.
Час від часу стикаюся з думкою, що знання того чи іншого фреймворку робить тебе кращим інженером. Але у світі С++ подібні ілюзії трапляються не надто часто. Адже тут досі немає єдиного універсального фреймворку, який усі використовують. Звісно, є boost, С++11 значною мірою змінив ситуацію, однак навіть зараз постійно доводиться мати справу з дуже специфічними інструментами, часто спроектованими неналежним чином.
На співбесідах у деяких компаніях задають задачі на вміння використовувати алгоритми. Радує, що на нашому ринку також починають з’являтися подібні компанії. Зрозуміло, що в повсякденній робочій практиці ми стикаємося з алгоритмічними задачами нечасто, однак саме такий формат співбесіди дає змогу зрозуміти, як мислить людина. Тобто це така собі інтелектуальна гра, яка дозволяє за короткий проміжок часу приблизно оцінити рівень інженерних і комунікативних навичок.
Тут ми плавно підійшли до іншого важливого атрибуту хорошого спеціаліста — «soft» навичок. Насамперед, це вміння працювати в команді. Слідувати прикладу протоколу TCP і бути вимогливим до себе і поблажливішим до інших. Усвідомлювати бізнесову цінність тих чи інших задач. Робити те, що потрібно і не робити зайвого. Не залишати багато технічного боргу. Документувати результати своєї роботи.
На мою думку, компетентний Senior C++ Developer — доволі широке поняття. C++, як необхідний та актуальний інструмент, використовується в різних сферах часом з протилежними вимогами і очікуваннями. Наприклад, в розробці ігор вкрай необхідні знання комп’ютерної графіки і часто не вітається використання темплейтної магії, але при написанні бібліотеки під будь-які типи з вимогами розширювання — все навпаки. Якщо все-таки намагатися узагальнити, то я б виділив наступне з точки зору технічних знань:
Хоча досі можна ще знайти проекти, де C++11 не використовується в повному обсязі, сьогодні він є де-факто стандартом. Звісно, в ідеалі необхідно знати, що додавали в наступних редакціях стандарту (і очікувати з нетерпінням С++20), але не завжди є можливість мати комерційний досвід з глибоким вивченням нових можливостей.
Попередній пункт містить знання стандартної бібліотеки, але зазвичай він розширюється іншими інструментами (наприклад Boost або Qt) залежно від сфери використання.
Добре розуміння на концептуальному рівні таких речей з комп’ютерних наук, як: алгоритми, структури даних, патерни, операційні системи, комп’ютерні мережі, архітектура комп’ютера.
Concurrency я б виділив окремо, оскільки проектувати систему або модуль, де все виконується паралельно — важка справа, навіть при використанні task-based підходу.
Звісно, від С++ розробника очікують витискати в певних обставинах максимум в плані продуктивності. Як правило, добрих знань і досвіду з попередніх пунктів вистачає, але окремо я б хотів зазначити, що для Senior’a такі речі, як Data Oriented Design або CPU cache friendly structures не є порожнім звуком.
Список можна продовжувати, але ж насправді, окрім сухих технічних знань, буде цінуватися ініціативний Senior Developer незалежно від технології, який вміє добре налагодити процеси (тестування, код рев’ю, документація тощо).
На мою думку, компетентний Senior C++ Developer — доволі широке поняття. C++, як необхідний та актуальний інструмент, використовується в різних сферах часом з протилежними вимогами і очікуваннями. Наприклад, в розробці ігор вкрай необхідні знання комп’ютерної графіки і часто не вітається використання темплейтної магії, але при написанні бібліотеки під будь-які типи з вимогами розширювання — все навпаки. Якщо все-таки намагатися узагальнити, то я б виділив наступне з точки зору технічних знань:
Хоча досі можна ще знайти проекти, де C++11 не використовується в повному обсязі, сьогодні він є де-факто стандартом. Звісно, в ідеалі необхідно знати, що додавали в наступних редакціях стандарту (і очікувати з нетерпінням С++20), але не завжди є можливість мати комерційний досвід з глибоким вивченням нових можливостей.
Попередній пункт містить знання стандартної бібліотеки, але зазвичай він розширюється іншими інструментами (наприклад Boost або Qt) залежно від сфери використання.
Добре розуміння на концептуальному рівні таких речей з комп’ютерних наук, як: алгоритми, структури даних, патерни, операційні системи, комп’ютерні мережі, архітектура комп’ютера.
Concurrency я б виділив окремо, оскільки проектувати систему або модуль, де все виконується паралельно — важка справа, навіть при використанні task-based підходу.
Звісно, від С++ розробника очікують витискати в певних обставинах максимум в плані продуктивності. Як правило, добрих знань і досвіду з попередніх пунктів вистачає, але окремо я б хотів зазначити, що для Senior’a такі речі, як Data Oriented Design або CPU cache friendly structures не є порожнім звуком.
Список можна продовжувати, але ж насправді, окрім сухих технічних знань, буде цінуватися ініціативний Senior Developer незалежно від технології, який вміє добре налагодити процеси (тестування, код рев’ю, документація тощо).
Вышка в вакансиях для С++, да, есть, ибо эти вакансии формируют не технические специалисты, а HR, которые добавляют стандартные пункты и ВО — один с них. Реально, когда приходишь на собеседование, то о ВО никто и не спрашивает. Пару месяцев назад искали джуниор с++ программиста, со всех кандидатов прошел парень, который бросил универ, ибо, как практикант, показывал лучшие результаты чем теоретики с ВО. Сейчас ищем middle/senior c++, уже месяца 2 не можем найти. Читаешь резюме, там вроде проффи, приходит на собеседование и не может объяснить разницу между листом и вектором. Думаете, если в сложившейся ситуации кто-то покажет себя хорошо на собеседовании, а потом скажет что у него нет ВО, то это как-то повлияет на результат принятия решения?
Прикметно, що кожен з трьох опитаних експертів має власну думку щодо того, ким має бути Senior C++. Пані Оксана більше зосереджується на софт-скілах, пан Вадим говорить про інженерні підходи, а пан Андрій — про новітні стандарти. Про що це нам говорить? — Кожен може знайти своє місце на ринку. І це чудово.
9 коментарів
Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.