На RSDN затронули тему, которая некоторое время назад меня изрядно беспокоила: тестовые задания для соискателей. Тов.Gradient интересуется, зачем нужны задания, зачем нужны объемные задания и т.д.
К моменту начала написания данных строк в теме не засветился ни один работодатель (upd. очень толково там отписался ув.тов.Коденок). А я недавно в этом качестве выступал. Поэтому скажу пару-тройку своих слов на эту тему.
Довольно подробно я освещал вопрос тестовых задач, которые выдаются соискателю до собеседования, в прошлом году. Но там упор сделан на противопоставлении маленькой задачки на собеседовании и более объемной задачи перед собеседованием. Поэтому тема не совсем раскрыта.
Итак, зачем нужны тестовые задания?
Тестовые задания нужны для того, чтобы узнать:
- умеет ли человек программировать;
- есть ли у человека устоявшийся подход к разработки программ (в простейшем случае – придерживается ли он какой-то нотации);
- умеет ли человек тестировать программы;
- умеет ли человек вникать в поставленную перед ним задачу;
- умеет ли человек критически относиться к написанному им коду;
- размер достойной оплаты человека на время испытательного срока.
Я считаю, что ни собеседование, ни конкретная маленькая задача на собеседовании не могут дать ответы на эти вопросы. Если взять человека на испытательный срок, то все нужные ответы будут получены.
Но что делать, если вакансия одна, а соискателей пять человек и каждый из них более-менее одинаково отвечает на вопросы на собеседовании?
Что делать, если мы предлагаем на испытательный срок сумму в N денежек, а человек хочет N+M?
Как оценить затраты на испытательный срок новичка, который с испытательным сроком не справляется? Это же не только его зарплата. Это время коллег, которое тратится на введение нового человека в курс дела. Это время, которое было упущено компанией на плохого соискателя. В конце-концов, когда человек не справляется с испытательным сроком – это стресс. Например, для меня, как для принимающего решение об увольнении.
Резюмируя. Когда я получаю решение тестового задания, я уже вижу, плохой ли это программист или нет. Если не плохой, то на собеседовании остается выяснить только его вменяемость. Если он вменяемый, то путь к испытательному сроку открыт. При этом я уже могу приблизительно оценить, сколько этому человеку нужно платить на время испытательного срока (чтобы и человека не обидеть, и не переплачивать).
Следующий вопрос: разве поиск сотрудника не заходит в тупик, отпугивая большинство претендентов заданиями?
Есть два подхода к найму сотрудника. Первый – это переманивание. Кто-то работал с кем-то, дал хорошую рекомендацию, взял на себя ответственность. Тут тестовые задания не нужны и не применяются.
Второй подход – это объявление о вакансии. Приходят совершенно незнакомые люди, о некоторых из которых даже нет возможности навести справки. Их нужно проверять. Посему даются тестовые задания. Может быть какой-то процент слишком дорого ценящих себя супер-пупер программистов или, напротив, недооценивающих себя, не отзываются на вакансию из-за тестового задания.
Ну и фиг с ними. Лично мне не нужны ни “звезды”, ни “задроты”. Нужны нормальные, адекватные люди. Которые умеют программировать, любят это делать и не боятся свои умения продемонстрировать.
Тем более, что есть еще один фактор: мы работаем в провинции. Не самые последние работодатели в своем городе. Можем ставить условия. Не нравится – ну походи по рынку, поищи более выгодные предложения.
Практика показывает, что в тупик не заходим. Вакансии закрываем. Работали бы мы в Москве или Питере, возможно, поступали бы по другому. А может и нет.
Следующий вопрос: зачем нужны объемные задания (8+ часов)?
Затем, что нельзя оценить человека на программе из 50-100 строк. Должно быть, как минимум, строк 300-500 (речь о C++). А программу в 300 строк, с нормальным дизайном, с тестами и комментариями, за пару часов не напишешь. Даже не спроектируешь. Поэтому лучше дать человеку побольше времени, чтобы он потом не мог оправдываться аргументами вроде “мне времени не хватило”.
Ну и затрону еще несколько вопросов, которые не были озвучены Gradient-ом.
Присваивают ли работодатели результаты труда соискателя? Т.е. дали тестовую задачку, человек ее решил, мы взяли решение и использовали у себя в продакшене, а человеку сказали: “Спасибо, но вы нам не подходите!”
Мы так не делаем. Тестовое задание я даю такое, которое нам в работе нигде не нужно. Это чистая тестовая задачка, без какой-либо перспективы промышленного применения.
Является ли выполнение тестового задания показателем того, что человек готов быть рабом компании?
А человек сам для себя решить это в состоянии? Допустим, тестовое задание он выполняет хорошо и мы делаем ему предложение. Конкретное. Он что, не может выдвинуть свои условия или не согласиться с чем-то?
Когда он уже работает, он что не может принимать решения сам? Браться за какой-то кусок работы или нет. Соглашаться с озвученными строками или нет. Выходить в выходные на работу в случае аврала или нет, например. Отказываться от очередного отпуска или нет. Просить повышение зарплаты или нет.
Как все это коррелирует с тестовым заданием? Если подразумевается, что человек, который соглашается на выполнение тестового задания, это безропотная скотинка, то я лично так не считаю. Я даю тестовое задание, чтобы оценить человека как программиста. Способность к “прогибанию” и “работе за гроши” я не оцениваю.
Брать безропотных людей, не имеющих собственного мнения или не способных его донести и защитить, очень стремно. Они будут делать только то, что им скажешь. А не скажешь, не будут. Лучше в своей команде их не держать.
Вот как-то так. Еще раз повторю: условия у нас специфические. Возможно, в крупном городе с большим рынком специалистов, мы вели бы себя иначе. Возможно. Но не факт.
В конце-концов, глупо брать в цирк жонглера, не убедившись в том, что он умеет жонглировать. А программирование – это не цирк, здесь способности кандидата за пару часов не проверишь. И лично я считаю странным, что человек, умеющий программировать, не хочет продемонстрировать свои умения при таком важном и нечастом событии, как смена работы.