– «А как насчет крылышек? – спросил я. – Или, скажем, сияния вокруг головы? Один на тысячу!» – «А нам всего-то один и нужен», – сказал горбоносый. «А если их всего девятьсот?» – «Согласны на девять десятых».
(с) ПНВС, АиБС

Недавно мне пришлось искать себе коллег. Эта статья об удивительном, но печальном опыте поиска хорошего джуна+ (React). Увы, без тестового задания обойтись не получилось. Я сдался не сразу, пытаясь решить вопрос как-нибудь так, но...

Для ясности можете звать меня Геннадий, я не обижусь.
Для ясности можете звать меня Геннадий, я не обижусь.

Лирическое отступление.

За 20 лет своей карьеры я побывал на сотнях собеседований. Большинство из них отличались откровенно глупыми вопросам. Конечно, были и "почему люк круглый?", и "что означает буква B в слове SOLID?", и "какая у вас модель оси?". Помню, однажды HR удивила вопросом про "весь автобус спит, толька водитель не спит - как зовут водителя?"

Худшим собеседованием был опросник на ~200 (двести с лишним, принц Чарльз!) вопросов, явно плохо скопированный с какого-то американского. Среди вопросов мне особо запомнились "часто ли вас беспокоит звук осаживающегося здания?" и завуалированные намёки "бывает ли так, что ваши конечности заметно подёргиваются, когда для этого нет достаточных причин?" В конце статьи вас ждёт увлекательный топ вопросов оттуда!

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

Волна первая, или "как завалить собеседование до собеседования"

<мем про корги "хочу деняк".jpg />

Как оказалось, зарплату и место мы предложили неплохие, соискателей находилось много даже после фильтра HR-а. Первым этапом мы сделали видеосозвон и простые вопросы по резюме, что позволило в этом пёстром потоке выделить несколько групп, которые отваливались сразу:

  • волшебники 80lvl - они же выпускники курсов "Java и PHP для чайников за 3 дня" и дипломированные специалисты по составлению резюме. Люди, которые сочетают в себе Back, Front, DevOps и умеют подключить примус к малинке встречаются, но явно не с общим стажем работы 6 месяцев! Ни один сказочник не смог внятно объяснить, что все эти ключевые слова делают у него в резюме.

  • tabula rasa - "нет, примеров кода у меня нет. Нет, вообще никаких. ГитХаба нет. Всё, что я делал - под NDA. И я даже не могу вам рассказать, что был за проект и чем я там занимался, потому что гладиолус NDA. Но я очень крутой и совершенно точно вам подхожу. У нас есть такие приборы.. но мы вам о них не расскажем!"

  • динозаурусы - "знаете, последний раз я писал что-то под FoxPro или на Clipper... React? да я его выучу за день, по факту это тот же Delphi...! примеры кода есть, готов прислать вам несколько лучших кусков в ,rar-архивах, покопайтесь там, может, сумеете оценить, как вам со мной повезло." Серьёзно, куски кода в .rar, никакого Github, только экстрим!

  • злые корги - "я вас всех заранее не люблю, просто дайте деняк. Зачем вопросы? Я злюся!" Реально, таких было несколько, все очень молодые, дерзкие и крайне недовольные, что их о чём-то спрашивают. Как передать данные из компонента в другой компонент такого же уровня иерархии? Да как-нибудь уж передам, SO в помощь!

    Зато у них были хорошие стримерские микрофоны и правильная форма одежды...

Волна вторая, или "темна вода в облацех"

Проектом, который наша команда усердно пилила уже несколько месяцев, был внешне довольно стандартный каталог товаров, с поиском, фильтрами по свойствам, блекджеком и платёжными шлюзами. Хитрую начинку я, естественно, не расскажу - потому что NDA! (да, я учусь у соискателей). Но в целом мне надо было просто оценить, вменяемый ли вообще человек (первый этап) и хотя бы приблизительно - его техническую грамотность.

Для этого у меня был короткий список простых типовых вопросов вроде того, что выше - про передачу данных из компонента в компонент или просто "а вы как-нибудь документируете ваш код?" / "а git использовали когда-нибудь?", и я думал, что этого хватит.

Наивный я! Некоторые кандидаты (группа "оракулы") умудрялись растянуть собеседование минут на 40 (не шучу!), только по истечении которых становилось ясно, что пытуемый не понимает сам смысла того, что говорит. Возможно,это были мастерские скиллы стековерфлоуинга, или им кто-то подсказывал, но времени нашего они тратили кучу, причём совершенно бездарно.

Кроме них была ещё группа, получившая гордое имя "последователи М.С. Горбачёва", по древнему анекдоту:

Журналист: Михаил Сергеивич, почему вы не носите шорты?
Горбачёв: Ну, мы с Раисой Максимовной обычно ходим пешком.

Мозг интервьюера клинит напрочь, потому что ответ формально дан, но смысла в нём нет. Хороший панч. На ком-то сработает. Кстати, код они пишут соответствующий. К примеру вместо того, чтобы просто взять константу из Store, оборачивают этот нехитрый процесс в useEffect, в нём в setTimeout, там анонимная функция.. так что вроде бы тёмная магия работает, но нафига и зачем - не разобрать.

Где-то на второй сотне резюме и нескольких десятков созвонов я понял, что так наша подводная лодка не взлетит. Нужен фильтр посерьёзнее.

Волна третья, или "у меня не было другого выхода"

Признаюсь, я отчаялся и приуныл. Я понял, что не хочу тратить время на ложные срабатывания, а сроки уже начинали подгорать приобретать дополнительную степень прожарки. Поэтому я запилил небольшое тестовое задание. Каюсь, оно могло занять не 15 минут, а дольше, но упрощать ещё сильнее мне не хотелось.

Требовалось сделать интерфейс для отображения фигур восьми цветов взяв данные из предоставленного json, примерно так:

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

Казалось бы, что может пойти не так? О, дважды наивный я! Для 90% кандидатов эта задача оказалась то ли слишком сложна, то ли слишком скучна, то ли всё сразу: кто-то путал цвета, приравнивая синий к зелёному, а тёмный к красному.

Кто-то использовал copy-paste там, где можно было пройтись циклом по массиву, кто-то не осилил прочитать данные из json, нагородив плетень из запрошенных технологий (увы, не работающий корректно). Отступы? Ну, как c SO скопировалось, такие и отступы! Многие, как выяснилось, не понимают, чем checkbox отличается от radio - если верить резюме, фронтендеры опытом работы год-два. * facepalm *

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

Финал: успешный успех через небольшой epic fail

< падал прошлогодний снег__мужик-с-ёлкой.jpg />

Он всё-таки раздбыл ёлку. Но была уже весна, и он отнёс её обратно.

Успешно решивший тестовое кандидат оказался молодцом: четко понял ТЗ, не поленился открыть json и увидеть в нём пару подвохов (вот такой я коварный, да!) и не постеснялся написать пару уточнений вместе с кодом. Кодстайл аккуратный, в копипастинге не замечен, комментариев оставил в меру. Подвохи, кстати, никто кроме него не упомянул вообще.

Одна капелька дёгтя всё же случилась: я не смог запустить его проект! Он что-то намудрил с зависимостями, а я не стал разбираться. Но по коду и так было всё ясно, и мы его быстро взяли. Работаем уже на втором проекте с ним, отличный боевой товарищ.

Как итог:

Интервьюерам - хорошее, релевантное тестовое задание экономит огромную кучу времени и позволяет быстро отсеять 90% неадекватных и неподходящих. Да, задание должно быть максимально простым. Я всё же слегка переборщил, наверное, 8 цветов это очень много.

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

Из стандартных советов:

  • держите хотя бы пару пет-проектов на GitHub;

  • даже под NDA можно в общих словах рассказать, в чём ваша сила;

  • то, что делала ваша команда и что делали вы конкретно - две большие разницы;

  • люди, которые вас собеседуют, впоследствии могут стать вашими коллегами. Не будьте с ними слишком суровы.

Успешных вам собеседований!

Бонус: ещё 15 идиотских вопросов из тех 200 пунктов

Оказывается, у меня сохранился список, аж с 2009 года! Нумерация сохранена.

Наслаждайтесь, это великолепно!

79) Считаете ли Вы, что современная система "тюрем без решеток"обречена на неудачу?

84) Верно ли, что Вы выбрасываете вещи, а потом обнаруживаете,что они Вам нужны?

93) Иногда Вы задумываетесь, а есть ли кому-нибудь действительно до Вас дело?

99) Если бы Вы участвовали во вторжении в другую страну, стали бы Вы сочувствовать тем гражданам этой страны, которые отказываются нести военную службу из-за своих религиозных или нравственных убеждений?

123) Бывает ли когда-нибудь так, что Вас беспокоит шум ветра или звук "осаживающегося" здания?

110) Когда вы проходите мимо красивого ребенка, Вы не смотрите на него и не улыбаетесь, а скрываете свой интерес?

29) Когда вы охотитесь или ловите рыбу, беспокоит ли Вас мысль о той боли,которую вы причиняете дичи, наживке на крючке или рыбе?

44) Случается ли иногда так, что жизнь кажется Вам нереальной - как будто все происходит во сне?

62) Верно ли, что Вы часто сидите и размышляете о смерти, болезни, боли и горе?

19) Считаете ли Вы, что на социальное обеспечение расходуется слишком много денег?

13) Случается ли время от времени, что у Вас судорожно подергиваются мышцы,тогда как для этого нет никаких логических объяснений?

33) Верно ли, что когда происходит что-то неожиданное, некоторые из Ваших мышц подергиваются?

105) Медленно ли Вы едите?

113) Хорошо ли Вы спите?

120) Часто ли Вы улыбаетесь?

51) Попадаете ли Вы время от времени в неприятности?

52) Кажется ли Вам, что жизнь - штука стоящая?

Комментарии (13)


  1. TuktarovMarat
    07.10.2022 11:11
    -1

    Сколько денег предлагали?


    1. mSnus Автор
      07.10.2022 13:03

      Средне по рынку)


  1. EugeneVRN
    07.10.2022 11:25

    def answer (i):
    for i in (79, 113, 51, 52):
    return True
    for i in (84, 93, 99, 123, 110, 29, 44, 62, 19, 13, 33, 105, 120):
    return False

    Ну что я прошел?


    1. mSnus Автор
      07.10.2022 13:09

      Как минимум, было не лениво перебивать номера вопросов, статью прочитали .. осталось только уточнить, кто вы по знаку Зодиака


    1. AMDmi3
      07.10.2022 13:30
      +3

      Думаю что нет. Это вернет True для любого вопроса.


      1. EugeneVRN
        07.10.2022 13:54

        Да, вы правы я не тестил, косяк

        Ну это легко исправить:

        if int(i) in (79, 113, 51, 32):

        return True

        elif int(i) in (80, 93, 99, 123, 110, 29, 44, 62, 19, 13, 33, 105, 120):

        return False


  1. panzerfaust
    07.10.2022 11:34
    +3

    нет, примеров кода у меня нет. Нет, вообще никаких. ГитХаба нет. Всё,
    что я делал - под NDA. И я даже не могу вам рассказать, что был за
    проект и чем я там занимался, потому что гладиолус NDA

    Что-то мне кажется, вы или хитрите или преувеличиваете. Да, код всегда под NDA, никто не обязан его вам показывать. Тем паче настоящий боевой код это коллективное творчество. Заливать его на личный гитхаб не только незаконно, но и некрасиво. И иметь пет-проекты тоже никто не обязан. У нас на сеньорскую команду из 30 разрабов ладно если у 1-2 найдется что-то "хоббийное" на гитхабе. Видимо, с точки зрения Истинных © Сеньоров-Помидоров мы просто никто.

    Но я еще ни разу не видел, чтобы кандидат отказывался рассказать о своих рутинах под предлогом NDA. Сам за последние полгода ~40 собесов провел. Если не выпытывать имена, пароли и явки, то без проблем рассказывают в общих чертах архитектуру, проблемы, решения. Как правило уже на этом этапе понятно, кто тащил, а кто "делал таски и правил баги".


    1. mSnus Автор
      07.10.2022 13:02
      +1

      В том и дело, что за NDA пытаются скрыть отсутствие опыта. Если у человека есть какой-то опыт разработки, то подобных ситуаций и не возникает. Ха, они наверняка думают, что "таски" - это среднее между таксой и хаски!


    1. Ivan22
      07.10.2022 13:21

      так это все релевантно для джунов,и ГитХаб и пет-проекты. Остальным уже не нужно, они уже в дамках.


  1. MrWandeder
    07.10.2022 12:58
    +1

    Спасибо, познавательно, с точки зрения джуна в поиске оффера.

    А список вопросов в конце - вообще заряд настроения на весь день :D


  1. SergeyKaydarov
    07.10.2022 14:33

    Как титулованный джун соглашусь, что тестовое задание нужно. У джуна может быть в резюме стек, который он в какой-то мере знает, но эту меру сам не особо сознаёт, т.к. сравнить не с кем и оценить некому.

    И резюме у джуна: вот стек, вот гитхаб. Что он ещё о себе расскажет? И HR будет сидеть и гадать по такому резюме, и придумывать "фильтр", который будет сродни рандому.


  1. Jour
    07.10.2022 14:33
    +1

    Бонус: ещё 15 идиотских вопросов из тех 200 пунктов

    Это оксфордский тест саентологов) могу скинуть весь + ответы


    1. mSnus Автор
      07.10.2022 14:34
      +2

      Саентологов! о_О Хорошо, что я к ним не пошёл!