вторник, 19 февраля 2013 г.

"Кот в мешке" или готовимся к собеседованию

Готовимся к собеседованию

Какие вопросы задают на собеседовании? Какие вопросы задавать на собеседовании? Если вы – программист, и в данный момент ищете новую работу, то, наверняка, вы уже перерыли весь интернет, подготавливаясь к очередному собеседованию. А если вы проводите собеседование, то вопрос «что спрашивать», думаю, вряд ли вас беспокоит. Все мы горазды что-нибудь у кого-нибудь спросить. 

Собеседования, которые проводил я, подбирая людей, были примитивны и носили скорее формальный характер. Поэтому гораздо больший опыт я получил, набивая собственные шишки на собеседованиях. И теперь, уже собрав некоторые свои «кандидатские» наблюдения, я пришел к удивительному выводу, что действительно дельное и обоюдно интересное собеседование – это редкость. (Спасибо, капитан очевидность). Предлагаю, обсудить этот вопрос, продумав интересное собеседование для кандидата на роль разработчика ASP.NET C# и одновременно полезное для работодателя.

Для начала поговорим о котах

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

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

Свой

Самые великолепные вопросы, которые я когда-либо слышал на собеседовании: «Какие  книги  вы читаете? Какие блоги и сайты вы посещаете? Каким проектом вы гордитесь?» Друзья, согласитесь,  приятно осознавать, что перед вами настоящий увлеченный своим делом собрат, который любит читать, писать код, мыслить, а самое главное - постоянно учиться и расти. Это вдохновляет.

Язык программирования C#

В корне наших возможностей – возможности языка программирования. Пожалуй, не стоит отрицать тот факт, что программирование на языке C# подразумевает знание языка C#. Как бы фантастически это не звучало, но это так. Поэтому для начала заготовьте порядка 10 вопросов о структурах и классах, интерфейсах, наследовании, сборщике мусора, ссылочных типах и упаковке, рефлексии и делегатах. Вопросы должны провоцировать рассуждение, цеплять смежные темы. Очень хороши вопросы, содержащие сравнение. Напишите все на английском языке, чтобы не было путаницы в терминах. В виде бонуса, вы таким образом проверите базовые знания английского.

Чужой код

Было бы неплохо сделать несколько примеров с выдержками из кода и дать кандидату задание определить, например, компилируется код или нет. Желательно, пусть объяснит почему. Это вообще полезная вещь. Такое занятие, как читать чужой код, входит в ежедневную практику программиста. Хороший программист не просто читает код, а читает его с претензией. Ошибки надо уметь выявлять до того, как они выпадут на экране пользователя веселыми каракулями. Поэтому чтение кода надо обязательно развивать, а у кандидатов - проверять.

Алгоритм

В продолжение темы, предложите написать какой-нибудь маленький алгоритм. Например, сортировку или «реверс» строки. Дайте лист бумаги и ручку. Это очень простое, но важное задание. Кандидату надо быть готовым уметь писать строки кода на бумаге. Конечно, это умение никогда не пригодиться, но если вдруг когда-нибудь Visual Studio отвалиться и notepad вернет свои утраченные позиции, появится шанс проявить свой талант. А на самом деле, мы, конечно же, хотим узнать, умеет ли человек решать поставленную перед ним задачу, не боится ли он за свои алгоритмы и насколько они прекрасны.

Бензоколонка

Маленькое лирическое отступление. Очень интересно задать неожиданный вопрос. Например, «Скажите, а как вы бы подсчитали, сколько бензоколонок в городе?» Если перед человеком поставлена задача, надо уметь ее решить. Имеет смысл лишь скорость мышления и подход: кандидату желательно не разводить руками и не делать гримасу безысходности, надо уметь решать поставленную задачу, какой бы странной она не казалась, и каким бы не традиционным было ее решение. Конечно, рационализм приветствуется.

Шаблоны проектирования

А теперь, пожалуй, самая важная часть заглядывания в мешок. Если кандидат знает принципы проектирования классов, то есть шанс, что он будет их применять на практике. Спросите, какие шаблоны проектирования ему известны, и что такое SOLID. Встречал ли он на улице кого-нибудь из GoF. Что такое MVC. Чем MVC отличается от MVP. Важно знать, понимает ли кандидат IoC. Как вариант, можно опять же прибегнуть к помощи папируса, и попросить написать реализацию какого-нибудь шаблона, не надо мудрить, пусть будет, например, Singleton (или даже лучше несколько штук).

Зачем это надо

Данные подходы позволяют избегать книжных вопросов. Ведь, задавая вопросы, ответом на которые будут просто определения терминов, мы сами провоцируем кандидата рыть в своей голове «энциклопедические» знания, которые нам вовсе не нужны. Это же не экзамен в ВУЗе и не передача «О, счастливчик». Нам важно увидеть, что кандидат раскрепощен и уверенно применяет в определенном контексте свою теоретическую и практическую базу знаний.

«Middle»-бонусы

Определите для себя то, что вы считаете необходимым, а что будет бонусом. Если вы будете  задавать вопросы и предлагать выполнить задания по SQL, jQuery, Silverlight или SharePoint или еще что-нибудь, пусть это будет один вопрос в одну тему. Если это для вас «Middle» важно – задайте вопрос из категории «Middle» сложно.

Я бы задал еще пару вопросов…

Собеседование не стоит затягивать и включать всевозможные вопросы по смежным языкам и технологиям. Я думаю, главное, в определенный момент понять, кто перед вами – уже понятная личность или все еще «кот в мешке». Вы просто должны увидеть это в определенный момент. Ведь принятый вами на работу человек, даже на несколько месяцев, уже успеет написать пару сотен (а то и тысяч) строк кода, что скажется на вас, ваших коллегах и, что самое страшное – повлияет на проект. А проект – это святое.

Вывод

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

1 комментарий:

  1. Мне понравилось, очень конструктивно. Сразу вспомнились наши с тобой ("примитивные", ахаха, как точно!) собеседования. Правда, и выбора у нас особого не было. Хочу отметить, что вместо "неожиданных вопросов" не стоит предлагать традиционные логические задачи (нужен действительно интересный необычный вопрос): если человек быстро решает логическую задачу, то он уже очень давно ходит по собеседованиям))

    ОтветитьУдалить