Сообщений 157    Оценка 642 [+1/-2]         Оценить  
Система Orphus

Искусство интервью

Автор: Джоэль Спольски (Joel Spolsky)
Источник: "Технология Клиент-Сервер"

Версия текста: 1.0.1
Вступление
Невозможный вопрос
Функция C
Удовлетворены ли вы?
Вопрос по дизайну
Вызов
Есть ли у вас вопросы?

Нанимать нужных людей крайне критично. Для нашей фирмы чрезвычайно важен поиск толковых сотрудников. В нашей отрасли работают три типа людей. На одном конце шкалы находится серая масса, не обладающая даже базовыми навыками этой работы. Их просто распознать и отсеять, часто для этого достаточно просмотреть резюме и задать пару простых вопросов. На другом же полюсе находятся суперзвезды, пишущие для забавы по выходным компиляторы Lisp для Palm Pilot на ассемблере. А между этими крайними случаями находится большое количество "maybes", которые, возможно, что-то могут. Сложность в отделении суперзвезд от maybes, поскольку нанимаем только суперзвезд. Вот какая техника используется для этого.

Вот, главный критерий для приема на работу в нашей компании:

Умный человек, способный решать проблемы (Smart, and Gets Things Done).

Вот. Это все, что нам нужно. Запомните это. Повторяйте ежедневно перед сном. Наша цель - нанять людей со способностями, а не с конкретным набором знаний. Любые знания, которыми могут обладать люди, в любом случае технологически устареют через несколько лет, поэтому лучше нанимать обучаемых людей, чем готовых SQL-программистов.

Умный - понятие, которое трудно формализовать, но некоторые вопросы помогают его опознать. Умение решать проблемы - это критично. Умные люди, не умеющие справляться с проблемами, часто имеют степени и работают в больших компаниях, где их никто не слушает из-за их полной непрактичности. Они скорее станут думать об академическом подходе к проблеме, а не о выпуске продукта в срок. Их можно опознать по любви к поиску теоретического сходства между двумя крайне различающимися концепциями. Например, они могут заявить "Таблицы - это, в сущности, особый случай языка программирования", затем исчезнуть на неделю и написать потрясающую статью о теоретических атрибутах вычислительной лингвистики электронных таблиц как языка программирования. Это круто, но бесполезно.

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

Важнейшее правило интервьюирования гласит: примите решение.

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

Других решений быть не может. Никогда не говорите:"Нанимать, но не в мою группу". Это невежливо, так как предполагает, что кандидат, недостаточно умный для работы с вами, подойдет этим бездарям из другой группы. Если вы заметите, что собираетесь ляпнуть что-то вроде этого, переведите это механически в "не нанимать", и все в порядке. Даже если вы столкнулись с кандидатом, великолепно делающим 1 конкретную вещь, но для вас не подходящим - это значит "не нанимать". Обстоятельства меняются так часто, что нам нужны люди, способные работать везде. Если вам попадется узкий специалист, очень, очень, очень хорошо знающий SQL, но абсолютно неспособный обучиться чему-то другому, не нанимайте. У таких людей в нашей фирме нет будущего.

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

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

Проводя интервью, не думайте, что если вы откажете слишком многим, наша фирма не найдет кого принять на работу. Это не ваша проблема. Это проблема рекрутеров, это проблема отдела кадров, это проблема Джоеля, но это не ваша проблема. Спросите себя, что хуже - если мы станем большой конторой с кучей дураков, или останемся маленькими, но высококачественными? Конечно, важно искать хороших сотрудников, и все должны рассматривать это как часть своей деятельности. Но в процессе интервью лучше думать, что у нас есть прорва классных кандидатов. Никогда не снижайте стандартов, как бы сложно ни было найти хороших сотрудников.

Но как же принять это самое решение? Приходится постоянно спрашивать себя: А он умный? Он может решать проблемы? Чтобы получить ответ, нужно задавать правильные вопросы.

Просто для смеха, вот наихудший вопрос для интервью: " В чем разница между varchar и varchar2 в Oracle 8i?" Это ужасный вопрос. Нет никакой возможной или вообразимой связи между людьми, знающими конкретный бесполезный пустяк, и людьми, действительно нужными нашей компании. Кого волнует, в чем эта разница? Это можно выяснить в Сети за 15 секунд!

Правда, есть и худшие вопросы. Я еще скажу об этом позже.

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

Перед интервью я читаю резюме кандидата и набрасываю план интервью на клочке бумаги. Это просто список вопросов, которые я собираюсь задать. Вот типичный план интервью программиста:

До интервью я очень, очень тщательно избегаю всего, что может создать у меня предвзятое мнение о кандидате. Если вы сочтете кого-то умным до того, как он даже вошел в комнату, просто потому, что он Ph.D. из MIT, ничто из сказанного им за час не перевесит этой предвзятости. Если вы заранее решили, что он - ишак, ничто вас не переубедит. Интервью подобно очень тонкому измерению - очень трудно судить кого-то на основании часовой беседы. Но если вы что-то узнаете о кандидате до интервью, на одной чаше весов появится здоровенная гиря, и интервью будет бесполезным. Однажды, прямо перед интервью, к нам в офис зашел рекрутер и сказал: "Этого парня вы полюбите!" Это меня полностью выбило из колеи! Я должен был сказать что-то типа "если вы так уверены, что я его полюблю, что ж вы его сразу не наняли вместо траты моего времени на это интервью!" Но я был молодым и глупым, и я пошел его интервьюировать. Когда он говорил что-нибудь не шибко умное, я думал "ну, это исключение, подтверждающее правило". Я смотрел на все, что он говорил, через розовые очки. Я бы сказал "берем", даже если бы это был паршивый кандидат. И знаете что? Все бравшие интервью, кроме меня, сказали "не берем"! Итак, не слушайте рекрутеров, не спрашивайте никого о кандидате и не говорите о нем с другими интервьюерами до момента принятия решения. Это и есть научный метод!

Вступление

Фаза вступления в интервью должна расслабить кандидата. Я трачу около 30 секунд, рассказывая кандидату, кто я такой, и как буду проводить интервью. Я всегда заверяю кандидата, что нас интересует, как он подходит к проблеме, а не конкретные ответы. Кстати, в процессе интервью не стоит сидеть через стол от кандидата. Это создает формальную преграду и мешает кандидату расслабиться. Лучше поставить стол к стене, или обойти стол и сесть рядом с кандидатом. Интервью при этом проходит лучше, поскольку кандидат меньше нервничает.

Вторая часть - это вопрос о каком-нибудь проекте, в котором кандидат недавно участвовал. Если кандидат только окончил институт, спросите о теме диплома.

При интервьютировании опытных кандидатов, можно спросить о предыдущем месте работы.

В ответе на этот вопрос меня волнует одна вещь: энтузиазм. Вот хорошие признаки при обсуждении предыдущей работы:

Невозможный вопрос

Третьим в списке идет невозможный вопрос. Это забавно. Смысл в том, чтобы задать вопрос, на который у них не найдется ответа, просто чтобы посмотреть, что они будут делать. "Сколько окулистов в Сиэтле" "Сколько тонн весит монумент Вашингтона?" "Сколько заправочных станций в Лос-Анджелесе?" "Сколько настройщиков роялей в Нью-Йорке?"

Функция C

Из программистских вопросов мне больше всего нравится попросить написать небольшую функцию на С. Вот обычные задачи:

Не стоит задавать задачи, требующие более 5 строк кода; на это просто нет времени.

Рассмотрим эти задачи подробнее. #1: Перевернуть строку на месте. Каждый кандидат, с которым я общался, сперва делал это неверно. Все без исключения пытались разместить буфер и переворачивать строку в этом буфере. Вопрос, кто размещает буфер? И кто его освобождает? Задавая этот вопрос множеству кандидатов, я обнаружил любопытную вещь. Большинство людей, думающих, что они знают С, на самом деле не понимают памяти или указателей. Это до них просто не доходит. Удивительно, как эти люди работают программистами, но ведь работают же! Вот несколько способов судить о кандидате на основании этого вопроса:

Третья задача показывает, насколько хорошо они учили побитовые операторы С... но это уже навык, а не способность, и с этим им можно помочь. Интересно посмотреть, как они пишут программу, пересчитывающую все биты в байте, а потом попросить сделать это гораздо, гораздо быстрее. Действительно сообразительный кандидат создаст таблицу преобразования (lookup table) (в конце концов, там всего 256 значений), создаваемую только один раз. С хорошим кандидатом можно даже завести действительно интересную беседу о разных разменах место/скорость. Поднажмите. Скажите, что не хотите тратить время на создание таблицы при инициализации. Отличные кандидаты могут даже предложить схему кэширования, где биты считаются при первом использовании, и сохраняются в таблице преобразования, чтобы не пересчитывать их в следующий раз. Самые лучшие кандидаты попробуют изобрести способ рассчитать таблицу, используя для этого некие расширенные методы программирования.

Наблюдая, как кто-нибудь пишет код, используйте эти полезные приемы:

Удовлетворены ли вы?

Вы скорее всего увидите баги в их коде. Тут мы подходим к вопросу 5. Нравится ли вам ваш код? Вы можете захотеть спросить "Ну, и где здесь баг?" Типичный Вопрос С Открытым Концом. Все программисты ошибаются, в этом нет ничего особенного, но они должны уметь находить свои ошибки. В случае строковых функций они почти всегда забывают завершить новую строку нулем. Почти во всех функциях они любят ошибаться на единицу при подсчетах. Иногда они забывают точку с запятой. Их функции не работают корректно со строкой нулевой длины, или вызывают GPF при неудаче malloc... Очень, очень редко попадается кандидат, с первого раза не сделавший ни одной ошибки. В этом случае все еще забавнее. "У вас тут ошибка!" - после чего он внимательно просматривает свой код, а вы посмотрите, может ли он мягко и дипломатично заявить, что его код абсолютно верен. В общем, всегда полезно спросить кандидата, доволен ли он своим кодом, прежде чем двинуться дальше.

Вопрос по дизайну

Часть 6. Вопрос по дизайну. Попросите кандидата что-нибудь спроектировать. Jabe Blumenthal, первоначальный дизайнер Excel, любил просить кандидатов спроектировать домик. Он говорил, что встречались кандидаты, немедленно рисующие квадрат. Квадрат! Это были явные "не берем". Что, собственно, нам нужно от этого вопроса?

Что приводит нас к #7, вызову.

Вызов

Это весело. В процессе интервью нужно дождаться, пока кандидат не скажет чего-нибудь абсолютно, бесспорно верного. Тут надо сказать "минуточку, минуточку" и пару минут поиграть в адвоката дьявола. Поспорьте с ним, твердо зная, что он прав.

Известно, что во время интервью стороны находятся не в равном положении. Есть риск, что кандидат просто не отважится спорить с вами. Но хорошие кандидаты, как правило, мгновенно "заводятся", и забывают, что они на интервью. Они непременно постараются вас переубедить. Это и есть люди, которые нам нужны.

Есть ли у вас вопросы?

Последний вопрос к кандидату - есть ли у него вопросы. Некоторые пытаются посмотреть, насколько умны вопросы, задаваемые кандидатами. Это стандартная техника из руководства по проведению интервью. Для меня их вопросы не имеют значения. К этому моменту я уже принял решение. Дело еще и в том, что за день кандидат должен поговорить с 5-6 людьми, и трудно задать 5-6 людям разные умные вопросы. Так что если у них нет вопросов, это хорошо.

Я обязательно оставляю 5 минут в конце интервью на рекламу нашей фирмы. Это очень важно, даже если вы не собираетесь брать этого человека на работу. Если вам повезло найти действительно хорошего кандидата, следует сделать все возможное, чтобы он захотел работать в Fog Creek. Если же это плохой кандидат, нужно, чтобы он ушел в восторге от компании. Это можно рассматривать так: люди - это не только потенциальные сотрудники, но и потенциальные клиенты. Они - ваши потенциальные рекрутеры. Если они сочтут вашу компанию "классным местом", они приведут к вам своих друзей.

Да, я обещал дать вам примеры плохих вопросов.

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

Не задавайте голововоломных вопросов, например, как сложить 4 равносторонних треугольника из 6 спичек. Знает кандидат верный ответ, или нет - вы все равно не узнаете ничего о его уме или способности решать проблемы.

Интервью - это больше искусство, чем наука, но если держать в голове принцип Умный/Способный решать проблемы, все упрощается. Если получится, расспросите своих коллег об их любимых вопросах, и об ответах, которые им нужны. В кафетерии 16 корпуса в Редмонде это уже много лет любимая тема для разговоров за ланчем.


Впервые статья была опубликована в журнале <Технология Клиент-Сервер>.
Эту и множество других статей по программированию, разработке БД, многоуровневым технологиям (COM, CORBA, .Net, J2EE) и CASE-средствам вы можете найти на сайте www.optim.su и на страницах журнала.
    Сообщений 157    Оценка 642 [+1/-2]         Оценить