- PVSM.RU - https://www.pvsm.ru -
Регулярно встречаю посты, в том числе и на хабре (Иллюзия эффективной разработки: проектирование [1], Красной таблетки не существует [2]) в которых говорится о том, что одни программисты эффективней в десять раз чем другие и о том, что выбор людей может оказаться важнее организации процесса работы и выбора технологий.
Когда мне пришлось проводить собеседования, я сильно задумался о том, как же отличить Чака Нориса эффективного профессионала в области веб-разработки, от тех, кто будет мешаться у него под ногами.
Этот пост — собрание субъективных мыслей на данную тему, а так же набор конкретных технических вопросов и задач, которые, на мой взгляд, лучше помогают кандидату проявить свои профессиональные качества на интервью.
Сначала хочу определить, что означает для меня «эффективность».
Под эффективностью я подразумевю относительную эффективность: конечную пользу (business value), которую может приносить кандидат, работая в конкретной роли на нашем проекте, по сравнению с другими соискателями.
Один и тот же человек будет по-разному эффективен в разных проектах, даже если занимается схожими вещами. Например, кому-то agile проекты подходят больше, кому-то меньше. Относительная эффективность кандидата может меняться в любую сторону, даже по ходу одного проекта.
Поэтому я согласен с теми, кто утверждал, что в конечном итоге, понять эффективность можно только в бою, на испытательном сроке, т.к. учесть все факторы заранее слишком сложно.
Но интервью проводить все равно нужно. Не будем же мы брать всех желающих на испытательный срок без разговоров.
Реалии нашего HR процесса таковы, что технические собеседования проводятся, в основном, по телефону. Потому что кандидаты бывают из разных городов и даже стран, потому что интервьюеров бывает несколько, также возможно из разных стран. Даже в условиях одного мегаполиса, поездка на личное интервью съедает много времени у кандидата, а на телефонное собеседование люди соглашаются легче.
Телефонное интервью должно быть коротким — через час ухо устает, через два – уже готово отвалиться.
Чтобы получать дополнительную информацию для принятия решения, пробовали давать тестовое задание перед телефонным собеседованием. Не заработало. Стало на порядок меньше тех, кто доходил до интервью, а сколько — нибудь вменяемых специалистов среди них — ещё меньше. Действительно, зачем грамотному разработчику выполнять задание до собеседования, когда его и так отрывают с руками и ногами? И мы отказались от этой идеи.
Сначала, проводя интервью с соискателем, я придерживался хорошего «правила №1» от Joel Spolsky
«Лучше упустить настоящего профи, чем взять неэффективного сотрудника и потом с ним мучиться».
Поэтому отсеивал всех «подозрительных» и при любых сомнениях.
Через какое-то время я понял, что идеальных кандидатов слишком мало (а может они существуют только в моем воображении), и в любом из них можно, при желании, найти что-то подозрительное.
Тогда я создал общий список вопросов, для сравнения кандидатов по ответам на одни и те же пункты, чтобы придти к более объективным количественным оценкам, нежели «подозрительное» шестое чувство, которое позволяет лишь отсеять кандидата, но никак не сравнивать их между собой.
Чем меньше времени на интервью, тем сложнее оказалось выбрать вопросы, потому что каждый из них должен позволить кандидату максимально проявить свой профессионализм не требуя долгих объяснений.
Чтобы найти идеальный баланс, надо определиться — какие факторы будут решающими в вопросе эффективности кандидата на нашем проекте?
Основным фактором я выбрал умение разбираться в проблемах и придумывать решения в своей области (пресловутые problem solving skills), проще говоря, думалка должна быть прокаченной.
Это позволит быстрее отлаживаться и находить причины багов, чувствовать возможные неполадки, придумывать простые решения сложных бизнес проблем (или критически оценивать предложенные), замечать непродуктивность и автоматизировать рутиные действия, приводя к экономии времени и драматически влияя на эффективность.
Второй фактор — личные качества человека, такие как собранность, коммуникабельность, ответственность и т.п. Может они даже важнее, но их оценкой занимаются другие люди и на другом интервью, я могу их оценить лишь субъективно, по критерию «подозрительно», никаких дополнительных вопросов для этого не задаю.
Третий — это кроссфункциональные навыки. Для нас идеален «человек-оркестр». Такой, чтобы разбирался в чем-то одном хорошо, но также умел тестировать, собирать аналитику, общаться с клиентом, и делать UI, и backend, и писать SQL запросы, и разрабатывать схему БД, предлагать архитектурные решения.
Это идеал, конечно. Всё досконально знать и уметь нельзя, но широкий опыт и навыки в разных направлениях должны позволить лучше общаться всей команде, понимать и помогать друг другу, находить решения сообща. Это страхует от пробуксовки проекта при внезапном увольнении одного сотрудника и может сыграть ключевую роль в успехе проекта, особенно для маленьких команд типа нашей, насчитывающей в разные времена 3-5 человек.
Именно поэтому я решил спрашивать в разных областях по чуть-чуть, и выяснять весь имеющийся опыт и желание кандидата развиваться по каждому направлению.
И только на последнем месте идет знание используемых нами технологий, которое позволяет быстрее «вкатиться» в проект. Но, на мой взгляд, эти знания не будут влиять на эффективность в долгосрочной перспективе. Мало того, что технологии, и даже языки, могут поменяться в любой момент, так ещё и требование конкретных знаний сильно сокращает наш выбор. Все это может привести к тому, что на безуспешные поиски будет потрачено слишком много времени. Что в свою очередь вынудит нас нанять уже не слишком профессионального сотрудника, который, как говорится, подвернется под руку.
Таким образом, я искал простые, посильные без удачи и озарения задачи, которые имеют несколько решений или уровней глубины ответа. Все это направлено на то, чтобы можно было оценить ответ количественно, по выбранным решениям, по скорости, по стройности изложения мыслей.
У Joel Spolsky есть лозунг/критерий найма: «Smart & Gets things done» (Я бы перевел как «Умный и Практичный»). Все вышесказанное относится к части Smart, часть Gets things done означает способность придумать не только «идеальное» решение, а выбрать практичное решение, учитывая потребности и возможности заказчика. Для этого необходимо оставаться сфокусированным на бизнес- проблемах клиента и целях проекта, а не на собственном исследовательско-изобретательском интересе. Так что, идеальный вопрос/задача должен проявлять оба критерия: «Smart» и «Gets things done».
И вот какие вопросы я нашел:
Все эти активности требуют высочайшего уровня понимания предмета, и что еще более важно, умения и желания передать свои знания. Поэтому любой ответ «да» это очень большой плюс. Ответы «нет» минусом не являются.
Ответ «да» может говорить о том, что человек любит свое дело, а не просто из-за денег страдает на работе. К тому же в персональных IT проектах часто приходится всем заниматься самому, а это говорит о важном кроссфункциональном опыте.
Ответ «нет» минусом не является.
Вопросы 1 и 2 позаимствованы из поста Nikos Maravitsas, в котором он предлагает свою методику оценки кандидатов, за что ему спасибо.
Хочу сказать, что в текущем проекте мы никогда не даем оценки в часах (а только оцениваем порядок сложности задачи), но на этот вопрос я слышал оценки от 3-5 минут до 4 часов. И даже больше «так как нужно написать unit тесты» Вот так рождается расхождение эффективности на порядок.
Возможные решения:
• JQuery выражение, можно выполнить в firebug или аналоге и получить готовый результат. Займет 2 минуты. Если Вы назвали данный подход, не имея уверенных знаний jQuery, тогда еще больший плюс.
• XPath выражение. Хороший способ, если вы знаете, куда это выражение вводить, например команду xmllint в линукс или знаете о соответствующей функции в Вашем любимом IDE. Кроме того, что нужно знать (или быстро придумать) куда это выражение вводить, нужно понимать, что xml и html вещи разные. Если Вы и это понимаете, тогда нужно знать, работает ли xmllint/IDE с html, если не уверены, можно придумать способ конвертации html -> xml. Способ «Погуглить» сканает, но весьма хорошо, если слышали о tidy. Отдельно проверяю адекватность оценки по времени на составление и отладку xpath выражения.
• RegExp – пройтись регулярным выражением по файлу и выделить все «жирные» теги. Тут проверяю соображалку – куда будем вводить регулярное выражение (в какой программе/команде)? При незнании, начинаем для этого писать программу на любимом языке. Потом проверяю понимание о «жадности» регулярных выражений. И, наконец, сопоставляю оценку кандидата со сложностью решения. То есть, если кандидат делает выбор – писать программу на java (еще и с юнит тестами для этого случая) и вообще плохо понимает regexp, при этом дает мизерную оценку – то это точно минус.
• Пишем программу на любимом языке, которая выделяет текст между «жирными» тегами. Прошу рассказать алгоритм того, как это сделать, включая то, как будет идти обращение к исходным данным. Это вполне нормальный вариант, если алгоритм рассказывается быстро и четко, а оценка соответствует уверенности кандидата. Если же человек путается в простых вещах, которые не требуют никакого особого знания или опыта, то это повод применить правило «лучше не взять, чем взять и мучиться»
• Вручную. Вообще отличный вариант. Потому что оценка меньше и предсказуемее, чем те оценки, которые часто слышу для других вариантов. Однозначный плюс, если оценка на этот вариант адекватна, еще лучше, если используем regexp для оборачивания в кавычки и разделения запятыми. Два плюса, если меня спрашивают: «А на сколько критична ошибка в одном символе при копировании?» Это именно тот случай, когда за счет маленького уточнения требований, мы можем в несколько раз сократить стоимость решения. Вообще, чем больше разумных уточняющих вопросов от кандидата, тем лучше.
Если же человек не может оценить время на такую «ручную» работу адекватно, или вообще наотрез отказывается рассматривать такой вариант – явный минус.
На мой взгляд, именно такие вопросы, проявляют оба критерия «Smart» и «Gets things done» наилучшим образом.
В начале, я всегда объясняю – что я хочу проверить вопросом, чтобы люди специально не отсекали более простые варианты.
Дальше пара задачек на программирование, ну куда ж без этого. Только надо учитывать, что решать их приходится, держа телефон у уха.
Эта задачка мне нравится тем, что в ней есть очевидное решение (практика это подтверждает), однако, не оптимальное. Я смотрю на то, может ли человек понять, что оно не оптимально самостоятельно, и как быстро добираемся до оптимального решения. В большинстве случаев добираемся, и
Но если у Вас плохое настроение, то можно напомнить, что числа то рандомные и их много, и заставить решать задачу исходя из теории вероятности.
Тогда ответ должен быть существенно меньше, чем O(N*log K). Какой? Я и сам не знаю.
<span> и <div>
. Многие знают, а объяснить толком не могут, путаются, это минус.Вот, в общем то, и все основные вопросы моего технического собеседования, на которые уходит час-полтора. Если остается время, то копаем вглубь и вширь, спрашиваю про предыдущие проекты, но обычно этих вопросов достаточно, чтобы принять решение по моей конкретной вакансии. (В Вашем случае, конечно, все будет по-другому).
Если кто-то знает вопросы, которые могут лучше проявить эффективность web программиста, добро пожаловать в комменты.
Удачи на собеседованиях.
Автор: susliks
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/sobesedovanie/15994
Ссылки в тексте:
[1] Иллюзия эффективной разработки: проектирование: http://habrahabr.ru/post/151811/
[2] Красной таблетки не существует: http://habrahabr.ru/post/151902/
[3] мышления: http://www.braintools.ru
Нажмите здесь для печати.