Карьера
Alex Key
1137

Собеседуем кандидата на должность Senior Software Developer

Я провел не одну сотню собеседований как с одной стороны, так и с другой. В этой статье я хотел бы поделиться своими опытом, наблюдениями и интересными моментами. Возможно, кого-то это убережет от ошибок, неверных выводов и потерянного времени.

В закладки

Что за птица — Senior?

Итак, Senior Software Developer(aka Старший Разработчик) — это разработчик со значительным опытом(от 5 лет) и глубокими знаниями в коммерческой разработке софта. Опыт работы разработки за деньги — это необходимое, но недостаточное условие. Обязательно нужно поучаствовавать в каком-нибудь проекте уровня Enterprise, а если еще и с самого начала — вообще прекрасно, это дает незабываемый опыт и широкий кругозор. Senior от Middle отличается прежде всего тем, что может довести любую задачу до состояния production-ready. Он четко знает, что можно сделать, а что нельзя. Способен уловить момент, когда в ПО пора делать рефакторинг или просто переписывать с нуля. Пишет достаточно качественный код без критических и архитектурных ошибок.

Ошибочно считать, что Senior работает быстрее Middle. В моей практике было немало случаев, когда Middle выполнял несложные задачи быстрее. Но Senior практически всегда работает качественнее и быстрее на сложных задачах, когда можно применить накопленный опыт, избежать ошибок и потери времени на этапе разработки, сопровождения и развития.

Основная цель собеседования

Как это ни странно, но порой собеседующие не следуют основной цели собеседования — определить, будет ли разработчик полезен команде и насколько эта польза соотносится с затратами на данного разработчика. Вместо этого, собеседующий часто выявляет чего разработчик не знает, вместо того, чтобы выяснить, что он знает и умеет. В следствие этого он приходит к неверным выводам со всеми вытекающими последствиями.

Кто должен собеседовать?

Здесь единственно правильный ответ — непосредственный будущий начальник aka Team Lead. Частая ошибка — собеседовать по 2-3 человека со стороны собеседующего, задавая перекрестные и непоследовательные вопросы. Это все создает ненужный стресс для собеседуемого и мешает установлению психологического контакта.

Атмосфера

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

Узнаем компетенции

Как я уже написал в «Целях», важно узнать сильные стороны собеседуемого, с чем он работал ранее, на чем съел собаку, какие подходы использовал, какие челенжи встретил по дороге.

Ключевые компетенции для Senior-разработчика:

  • Алгоритмы.
  • Архитектура, шаблоны проектирования.
  • Базы данных.
  • Параллельное выполнение и синхронизация работы процессов.
  • Основы производительности ПО.
  • Дебаг и логирование.

Для разработчика важную роль играет понимание как это работает, знание концепций и особенностей, нежели знание конкретного инструмента. Например, если он досконально разобрался с MySQL, то ему не составит большого труда разобраться и с Postgres. В большинстве случаев для разработчика уровня Senior не составит труда быстро изучить любой инструмент.

Очень часто собеседующие переходят на какие-то хорошо им знакомые частности, вот случаи из реальной практики:

  • Каким образом используя SQL удалить одну строку, если под критерии выборки попадает больше одной?
  • Какой командой git откатить последний коммит?
  • Какие методы объекта Object в Java Вы знаете? Тут могут быть другие варианты в других языках — то, что хорошо знает собеседующий.

Эти вопросы также из разряда «подкинуть монетку в воздух», их знание или незнание никаких объективных выводов об опыте разработчика делать не позволяет.

Есть также отдельная категория «остроумных» любителей дурацких вопросов и задач на проверку «толковости», реальные примеры:

  • Почему люк круглый?
  • Как налить ровно 4 литра воды в одно ведро, если есть два ведра — 3 и 5 литров?
  • Решите какую-нибудь головомку, например соберите кубик Рубика.

Проблема с такими вопросами — отсеиваются не только люди с низким IQ, но и значительная часть толковых ребят, просто не готовых к таким вопросам или находящихся под стрессом. Здесь вместо толковых ребят нередко проходят далее те, которые уже знают ответы и решения стандартных вопросов и задач.

Ищем мотивацию

Есть такой часто задаваемый вопрос со стороны собеседущего — «Почему Вы хотите работать у нас?». Подразумевается, что собеседуемый честно и откровенно раскроет свою мотивацию — «Хочу больше денег» или «Все лучше, чем там, где я сейчас». Но для собеседуемого такой вопрос может вызвать буквальное непонимание и он редко отвечает откровенно. Поэтому про мотивацию лучше выяснить косвенными вопросами.

Какие бывают мотивации:

  • Деньги. Самая популярная мотивация, но зачастую не принято в этом признаваться. Хорошо работает для семейных и тех, кто привык много тратить или очень хочется накопить.
  • Интересные задачи. Когда людям реально нравится их работа и они готовы работать сверхурочно и в выходные не требуя дополнительной оплаты.
  • Прокачать новые скилы. Индустрия не стоит на месте и постоянно приходится их прокачивать, чтобы оставаться востребованным на рынке труда.
  • Карьерный рост. Одна из главных мотиваций работы в стартапе.
  • Известная или хайповая компания. Возможность быть частью ее и пожинать плоды ее известности.

Чего не стоит спрашивать у Senior Developer

  • Как работает редко нужный алгоритм XXX(например, quicksort). Зачем спрашивать то, что не нужно в повседневной работе разработчика, но гуглится за 5 секунд?
  • Владеете ли Вы несложным иструментом YYY(например git). Я еще не встречал разработчика, который бы не освоил базовые возможности git, нужные для повседневной работы, за день-два.
  • Умеете ли писать тесты. Вопрос со звездочкой. Сам процесс написания тестов — несложен, а вот научиться понимать, что именно нужно тестировать и в каком объеме — тут нужна длительная практика. На деле же достаточно одного опытного тестописателя в команде, который сможет контролировать этот процесс в эффективной манере.
  • Что такое Agile/Kanban/Scrum. Методологию, как будет вестись разработка, выбирает Team Lead, соответственно рядовым исполнителям знать ее досконально не обязательно, а базовые принципы постигаются за считанные дни.

Типы Senior-разработчиков

Чтобы понять мотивацию и способности конкретного разработчика, необходимо выделить типы, ему присущие. Я выделил следующие, часто встречающиеся типы:

  • Креативщик или Увлеченный. Его прет от самой работы, нетривиальных задач, там, где нужно что-то изобрести. Иногда получаются велосипеды, но с ростом компетенций производит весьма качественные продукты. Основная мотивация — интересные проекты и задачи.
  • Рутинщик. Способен выполнять весьма рутинную работу не снижая производительности со временем и не требуя какой-либо мотивации.
  • Супергерой. Выполнит задачу любой ценой, даже если не хватает компетенций и времени. Часто лепит из говна и палок но с ростом компетенций получается что-то более-менее приличное. Очень ценный для стартапов и требовательных начальников.
  • Грамотный. Его на мякине не проведешь, хайпом не обманешь, всегда старается постичь суть технологий и задач, мыслит глубоко и структурно. Ценный сотрудник в любом проекте.
  • Поверхностный. Нахватается умных слов, подходов, изучит(поверхностно) хайповые технологии и тулзы и пытается все это применить в проекте, насыпая большими горстями, даже если можно обойтись малым. Свойственно на заре карьеры и просто ведомым и впечатлительным товарищам.
  • Заложник настроения. Есть настроение — работа так кипит, что только подноси снаряды, нет настроения — больше будет делать задумчивый вид и философствовать, чем работать.
  • Карьерист. Четко нацелен на карьерный рост. Нет роста больше года — потенциальный кандидат на вылет.
  • Консерватор. Любитель стабильности и традиций, негативно относится ко всем этим новомодным штучкам, инструментам и подходам.
  • Манимен. Работает там, где больше платят, поэтому лояльность к компании довольно низка. Любит премии, бонусы, бесплатные ништяки и прочие финансовые мотивации.

Зачастую, у конкретного индивидуума сочетается несколько типов в различных пропорциях. Со временем типы и их пропорции у человека изменяются, а также есть индивидуумы, которые могут адаптироваться под задачи(свойственно Супергероям). Замечено, что с возрастом доля Консерватора растет у многих, Креативщик может выгореть, а Поверхностный может вырасти в Грамотного.

Психологическое состояние

К сожалению, иногда у Senior-разработчиков развиваются совсем не те навыки и может испортиться характер, что сильно затрудняет взаимопонимание и эффективную командную работу.

Нередко встречаются такие состояния:

  • Жизнь — тлен. Иногда бывает так, что написанный код не идет в production по каким-то причинам (например по бизнес-решениям) или живет недолго(стартап или неумелое управление). Это серьезно деморализует со всеми вытекающими. Тут надо не путать со здоровым обычным цинизмом ввиду опыта работы.
  • Постигший дзен. За годы в статичном Enterprise-проекте разработчик изучает его вдоль и поперек и у него складывается ощущение, что он теперь редкий специалист. На самом деле его навыки и умения за пределами этого проекта почти не стоят ничего, налицо переоценка своих возможностей разработчиком.
  • Недооцененный и неуверенный. Череда неудачных проектов, плохого управления и прочих рисков заставляют разработчика сомневаться в своих способностях и умениях, хотя на деле он может оказаться весьма способным и ценным сотрудником. Часто недооценивает себя по зарплате и/или должности.
  • Переоцененный. В контраст недооцененному и неуверенному этот индивидуум словил удачный проект или серию, который прошел крайне удачно и на этой волне сильно переоценивает свои способности и возможности.

А как же тестовое задание?

Проблема в коротком тестовом задании(2-3 часа) в том, что по его результатам нельзя сделать никаких определенных выводов, обладает ли автор опытом разработки уровня Senior или нет. С таким же успехом Вы можете просто подкинуть монетку в воздух.

Выводы

По итогам собеседования должно сложиться объективное впечатление о разработчике:

  • Какие у него сильные стороны.
  • Как он может усилить команду.
  • Сколько ему времени нужно для выхода на «крейсерскую скорость».
  • Насколько желаемая зп соответствует вышеуказанным пунктам.
  • Есть ли психологический контакт и совместимость с командой.

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

P.S. Все моменты в одной статье не изложишь, поэтому если у Вас есть вопросы или хотите что-то обсудить — пишите в комментариях или на email.

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Alex Key", "author_type": "self", "tags": [], "comments": 10, "likes": 6, "favorites": 33, "is_advertisement": false, "subsite_label": "hr", "id": 96873, "is_wide": false, "is_ugc": true, "date": "Wed, 11 Dec 2019 15:40:18 +0300", "is_special": false }
Создать объявление на vc.ru
Онлайн-курс по Digital PR от Nimax
3 февраля Онлайн 14 900 ₽
0
{ "id": 96873, "author_id": 368288, "diff_limit": 1000, "urls": {"diff":"\/comments\/96873\/get","add":"\/comments\/96873\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/96873"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199121, "last_count_and_date": null }
10 комментариев
Популярные
По порядку
Написать комментарий...
5

Позиция Senior Software Developer является одной из самых сакрализированных позиций, если не самая. Описание обычно похоже на описание героя народного эпоса или описания "настоящего мужчины" в женcких бульварных романах. 

Единственный достоверный признак отличия позиций senior  от middle это размер компенсации, это применимо для всех компаний. Если вам сказать, что есть два разработчика Вася и Петя в компании "Рога и копыта", Вася имеет лычку Senior, Петя лычку Middle, то не зная других деталей достоверно можно только утверждать, что Вася получает большую зп чем Петя.

В реальности, то что из себя представляет человек с грейдом Senior сильно отличается в разных компаниях, проектах, иногда даже между разными командами в одном проекте. Проблема в том, что чаще всего это последняя "линейная" позиция разработчика, дальше уже тимлид или архитектор. И градаций уже внутри грейда Senior - нет. Нет Senior Senior  или Junior Senior. Многие компания начинают создавать свои отдельные системы грейдов, чтобы решить эту проблему или делать дополнительные линейные грейды после синьера.

Ответить
1

Частенько бывает такое: человек работает долго, таски свои делает, годков ему уже накапало достаточно. Его бац и "повышают" до сеньора. У него ничего не поменялось, работать он лучше не стал но тайтл имеет. В другой компании могут дать тайтл вместо денег. Вот тебе, Вася, ведро гемороя и шилдик. Иди, Вася, не подведи!
Даже деньги не показатель, неоднократно видел как зарплаты 2х сеньоров отличались в 1,5-3 раза. Это никак не связано с колличеством пользы, которую они приносили.

Именно по этому 90% синьоров можно и нужно называть мидлами. Ну либо вообще не обращать внимание на шилдики: хоть горшком назови... но тогда нужно знать как сильного программиста назвать...

Ответить
–1

если сеньор это тот кто любую задачу доведет до прода то:
А) кто такой мидл и чем он лучше джуна?
Б) как "рутинщик" сможет довести нечетко поставленную задачу до прода?

в типажах каша. Вызванная странным делением на сеньоров и мидлов. Типажи это многомерная история.

По самому собесу сеньоров:
1) узнаем что делал
2) узнаем границы компетенции по фундоментальным темам.
4) узнаем мотивацию.

Смотрим как эти качества могут усилить команду. Решит ли он те вопросы, которые стоят перед командой.
Продаем это видиние кандидату. Чтобы он сам хотел прийти к вам в команду.
Уходим "думать" если решили брать, он весьма вероятно согласится.

Ответить
1

Сергей, вся данная статья - исключительно про Senior. Написана исключительно по личному опыту, Ваш опыт может быть совершенно другой.

как "рутинщик" сможет довести нечетко поставленную задачу до прода?

"Рутинщик" - это человек, которого не напрягают рутинные задачи. Например, подключать платежные системы в течение нескольких месяцев.

Ответить
0

Я всего лишь указал на косяки в логике. Что с этим делать решать вам.

Ответить
0

Интересная точка зрения. "Почему вы хотите работать у нас?" - Ответ "А почему вы решили, что вам нужен именно senior для данных задач?"

Ответить
0

Все же уровень должности (сеньор, миддл) не может жить отдельно от самой должности (стек разработки)

Зачем сеньору фронтэндщику знать базы данных?

Ответить
0

Любому сеньору надо знать бд. Другой вопрос, насколько глубоко.

Ответить
0

 Senior ... четко знает, что можно сделать, а что нельзя.

По моему мнению Senior это как раз тот, кто может сделать любую сложную задачу, причем в большинстве случаев предложить даже несколько вариантов ее решения со своими плюсами и минусами.
Естественно, что для сложно реализуемых задач ему понадобится больше ресурсов, которых может и не оказаться у бизнеса, но это уже не его проблема.
Это как раз главное отличие сеньора от мидла - сеньор может всё!

Ответить
–1

Что за птица — Senior?
Это Синьор Помидор

Ответить
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovx", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "disable": true, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cgxmr", "p2": "gnwc" } } } ] { "page_type": "default" }