Каковы плюсы и минусы для работодателя вопросов кода во время интервью? [закрыто]

16

Вопрос № 11 теста Джоэл : «Пишут ли новые кандидаты код во время собеседования?». Какие аргументы за и против, чтобы попросить новых кандидатов написать код во время собеседования и принять решение по нему?

Duros
источник
Написать код, как физически, написать его карандашом и рукой или написать, как код типа на машине?
Крис
Основной недостаток - задавать глупые или бесполезные вопросы и думать, что вы все сделали правильно. Например, кто-то прокомментировал просьбу написать связанный список.

Ответы:

13

Я не вижу минусов. Интервью состоит из множества частей, и кандидат должен быть несколько раз одобрен «по цепочке».

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

Тесты полностью зависят от позиции. Вообще, я пытаюсь исследовать:

  • Общий навык программирования. Вы можете эффективно использовать операторов? Можете ли вы представить числовую систему, у которой ось не равна 10?

  • Вы знаете, как делать то, что мы вас нанимаем?

  • Оценка вашего вклада в любые проекты с открытым исходным кодом, которые вы перечислили

Я стараюсь быть коротким и веселым. Когда я захожу в офис, я беру ответы, просматриваю их, а затем провожу дополнительное собеседование. Чтобы получить работу, вам обычно нужно пройти три собеседования.

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

Одно дело отвечать на вопросы в мета-форме, другое - фактически создавать код. Если я собираюсь нанять вас, мне действительно нужно, чтобы вы создали код.

Тим Пост
источник
Хммм ... Я считаю себя квалифицированным разработчиком. Во время моих последних трех интервью, когда меня спросили о чем-то вроде «что делает тот или иной метод» или о чем-то подобном, я решил отказаться от него. Так как я никогда не ищу работу, где я собираюсь сделать что-то, что я знаю очень хорошо. Это не интересно. Как сказал мой бывший босс: «Многоразовые? Программисты должны быть многоразовыми, программы - возможно».
2010 года
@duros Мне жаль это слышать. Хороший интервьюер должен быть в состоянии сделать процесс веселым и понимать, что другие программисты ненавидят тесты.
Тим Пост
Я не чувствую себя комфортно при тестировании. Я просто понимаю, какие возможности узнать и попробовать что-то новое, что у меня было бы, если бы они наняли меня в качестве программиста ... Во время последнего я послал интервьюера, чтобы прочитать Javadocs ...: - / Может быть, я ' м неправильно ...
дурос
10
Однажды меня попросили написать интервью для Perl. За 8 лет работы с Perl я не встречал ни одной производственной программы, использующей связанные списки. Конечно, я запутался и создал на бумаге методы insert () и remove () и объект на основе хеша, который, как я думал, сработает. Первое, что сказал интервьюер, когда он посмотрел на газету, было: «Вам не хватает нескольких точек с запятой»
leed25d
1
это другой способ на самом деле создавать код - это так, правда. Меня неоднократно удивляли люди, которые описывают правдоподобный алгоритм, но даже не могут начать сводить его к коду. Это или они перешли какой-то неалгоритмический шаг, которого нельзя избежать при написании кода.
пул
34

С извинениями Скотту Уитлоку:

Минусы:

  • никто

Плюсы:

  • Экономит много времени и душевных страданий в будущем, если вы препятствуете найму тех, кто не может программировать
  • Требует, чтобы у вас был технический специалист на собеседовании
Armand
источник
Может ли "Требуется, чтобы на собеседовании присутствовал технический специалист", можно считать мошенником?
Йикель
2
Думаю, это зависит от того, пытаетесь ли вы занять какую-то роль или просто занять кресло. Но ИМО нет, это нельзя считать мошенничеством.
Арманд
19

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

Прогулка по чему-то на доске - это программист, эквивалентный быстрому демонстрационному жонглированию.

как зовут
источник
+1 за ссылку. Я все еще думаю, что жонглирование - это не запоминание таких вещей, как сигнатуры методов или тому подобное, а просто способность думать и решать проблемы, с которыми вы никогда не сталкивались раньше ...
duros
4
За исключением того, что жонглирование является непосредственным навыком с несколькими вариантами, часто выполняемыми перед аудиторией. Программирование - тяжелая, глубокая задача, редко выполняемая как таковая. Это также намного менее продуктивно на бумаге или доске. Тем не менее, тесты псевдокода (или игнорирование простых ошибок) могут быть очень полезны.
Брюс Олдерсон
10

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

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

Проблема скорее в ложно-отрицательной стороне: приведут ли тесты кода к отклонению человека, который на самом деле лучший кандидат?

Боязнь сцены

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

Смягчение: Начните с ознакомительных вопросов об их прошлом, целях и т. д., прежде чем переходить к техническим вопросам. Возможно, начните с более простых технических вопросов, чтобы они набирали обороты. Не будь членом во время собеседования (спор о точках с запятой и т. Д.).

Это шумная мера

Интересные вопросы кода могут иметь более одного правильного ответа. Если один человек пишет правильный ответ, а другой пишет правильный и более эффективный ответ, какой вес вы должны придать этому?

В некоторой степени это похоже на проблему с некоторыми «загадочными» вопросами: у человека либо есть понимание, либо нет, и вы получаете почти двоичный результат. Интеллект, вероятно, влияет на вероятность такого понимания, но выборка только несколько раз дает грубую оценку.

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

Это не очень представительный

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

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

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

Кто-нибудь может решить это

Нет, очевидно нет. Как отмечается в известном посте FizzBuzz , проблемы, которые вы можете подумать, являются тривиальной ловушкой не только для новых выпускников, но и для людей с многолетним опытом работы в отрасли. Я не знаю почему. Либо тест кода является плохой мерой (что возможно, хотя я думаю, что это маловероятно), либо они не вносили значительного вклада в проекты в своем резюме, либо они много делали, копируя и вставляя не алгоритмический код (что возможно.)

Стоит признать, что вы действительно можете многое сделать без написания алгоритмического кода. Люди зарабатывают большие деньги на приложениях, ценность которых заключается в графике или бизнес-логике, а не в том, что вы можете назвать «программированием», и это нормально. Но если вам действительно нужны программисты, это не очень подходит.

Это не может быть хорошо откалиброван

Если вы зададите вопрос, ответ может показаться вам простым. Однако, если вам задают какой-либо другой сопоставимый вопрос на ровном месте или вопрос, который не искажен в соответствии с вашими конкретными интересами и опытом, он может оказаться гораздо сложнее.

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

Это слишком похоже на пустяки

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

Поэтому ответ на этот вопрос довольно прост: не задавайте тривиальных вопросов и не зацикливайтесь на тривиальных ошибках. Напомните кандидату, как называется API, или дайте ему посмотреть его; исправить синтаксические ошибки; не проверяйте людей, запоминающих определения структуры данных.

Как вы сравниваете?

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

poolie
источник
7

Один из доводов, о которых я могу подумать, заключается в том, что трудно "кодировать вслух" перед другими людьми. Мне трудно даже печатать, когда кто-то смотрит через мое плечо, и я не одинок. Я замечаю, что когда кто-то зовет меня на свою рабочую станцию, чтобы помочь с чем-то, они внезапно начинают делать опечатки, выбирают неправильное завершение кода, даже делают прямые ошибки - ничего такого, что они бы сделали, если бы я не сидел прямо там. Черт, я видел, как люди начали использовать меню для операций вырезания и вставки только потому, что они находились под наблюдением. Это не нормальное поведение, и программисты, о которых я говорю, отличные программисты и к тому же довольно умные.

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

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

Робусто
источник
4
Это нормально, хотя. Цель вопроса интервьюирования в области кодирования не состоит в том, чтобы проверить способность печатать или даже совершенное знание API. Опечатки и тому подобное можно игнорировать, и вместо этого вы сосредотачиваетесь на мыслительном процессе кандидата и знакомстве с основами программирования. Например, однажды я участвовал в интервью, которое показало полную неспособность кандидата думать на несколько шагов вперед (они решали одну маленькую проблему, понимали, что создали другую проблему и т. Д.).
Адам Лир
2
«Трудно кодировать перед другими людьми»? Хорошо. Я нанимаю только людей, которые могут делать сложные вещи. Одним из них является возможность обсуждать код (то есть программу) с (перед) другими людьми.
Кевин Клайн
1
@kevin cline: Ты упустил мою точку зрения. Вас волнует, как люди получают результаты, или вы хотите, чтобы они получали результаты только в соответствии с вашими прихотями? Множество людей могут хорошо писать код в командной среде, но им нужно «в одиночку», чтобы работать с максимальной эффективностью. Похоже, вы такой парень, который бы не нанял Марка Цукерберга, потому что ему нужно было «подключиться» для максимальной производительности.
Робусто
1
@Robusto: Я не задаю глубокие вопросы в интервью. Мне просто нужно увидеть, как кто-то решит простую проблему за несколько минут. И мне нужны люди, которые могут работать в команде. Это означает способность и готовность говорить о коде. Конечно, я могу скучать по великому программисту, который просто не выдерживает давления интервью. Ничего страшного. Но плохой прокат губителен.
Кевин Клайн
6

Минусы: нет. Каждый раз, когда вы тратите настройку ПК, разработку теста кода и его проверку, вы избавите себя от невыразимой головной боли в будущем.

Плюсы: «Доверяй, но проверяй», - Рональд Рейган. Так много раз я видел и слышал о людях, которые, в конце концов, отпускали с позиции, где в интервью вы подумали, что получили рок-звезду. Доказательство в пудинге; Я хочу посмотреть, что они могут сделать. Он будет представлять, что произойдет, если вы потратите время и деньги, нанимая кого-то и ставя перед ним новый проект.

жёстко
источник
4

Минусы:

  • Требует, чтобы у вас был технический специалист на собеседовании

Плюсы:

  • Экономит много времени и душевных страданий в будущем, если вы препятствуете найму тех, кто не может программировать
Скотт Уитлок
источник
25
Если вы берете интервью у разработчиков без участия технических специалистов, вы все равно обречены.
Дэвид Торнли
@ Дэвид: Я согласен, я думаю, что плюсы здесь намного перевешивают минусы, но это был единственный «минус», о котором я мог подумать.
Скотт Уитлок
4

Когда я брал интервью для моей текущей работы, мне дали список вопросов, чтобы написать код рекрутером. Я был очень впечатлен, потому что вопросы, очевидно, были написаны кем-то, кто имел глубокие знания SQL, поэтому он работает в обоих направлениях.

Ларри Коулман
источник
2

Вы действительно хотите, чтобы человек записал код на собеседовании - еще лучше, попросите его объединить программу с участником вашей команды на Х времени (все, что вы можете себе позволить с удобством времени / рабочей силы).

Это в значительной степени единственный способ узнать, может ли этот человек писать код или нет.

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

Мы начали использовать эту политику найма и очень довольны результатами.

Мартейн Вербург
источник
+1 для парного тестирования: доказывает способность работать с товарищем по команде / и / способность кодировать.
Брюс Олдерсон
2

Вы судите птицу по перьям, а программиста - по ее коду.

Когда я начинал с текущей компанией, в которой я работаю, они попросили меня написать некоторый код C, который генерирует или проверяет бит четности некоторого двоичного ввода (в зависимости от того, кодируете ли вы или декодируете). Это был вопрос собеседования именно потому, что такого рода проблемы решаются во время работы. Конечно, я думаю не о проверке четности, а о работе на низком уровне.

конечная станция
источник
2

Все ответы на данный момент (которые я прочитал) не касались того факта, что тест Джоэля НЕ является (просто) списком лучших практик для предпринимателей, а является контрольным списком для облегчения вашей оценки потенциального работодателя .

Дело в том ... если они тщательно проверяют свои кандидаты, то они, вероятно, нанимают людей, которые знают свое дело ... это значит для вас

  1. меньше головной боли, а также
  2. повышенный шанс узнать что-то от ваших коллег

вместо исправления ошибок после них ...

Раффаэль
источник
1

Я бы сказал:

Pros

  • Демонстрирует, что кандидат обладает, по крайней мере, сносным знанием программирования, так как резюме могут быть изготовлены / украшены
  • Если интервьюер обсуждает код с кандидатом, в отличие от того, что он больше похож на письменный тест, это может быть хорошим индикатором того, как вы «общаетесь» в социальных сетях, и если кандидат хорошо подходит для компании / компании, и команда хороша подходит для кандидата

Cons

  • Может быть оскорбительным для кандидатов, если вопросы представляют собой бессмысленную бессмысленную чепуху, которая никогда не возникнет во время работы (например, «Напиши пузырьковую сортировку», когда все современные фреймворки, которые можно было бы использовать в работе, имеют встроенную сортировку «Перевернуть строку»). «когда есть встроенный Reverseметод или аналогичный, или для письменных тестов такие вещи, как« Каковы аргументы Fooметода Barкласса », когда любой идиот может Google это или использовать документацию), в отличие от вопросов архитектуры / дизайна, которые показывают кандидат может добиться цели и решить проблемы бизнеса .
Уэйн Молина
источник
1
Я думаю, что «Перевернуть строку» - отличный стартовый вопрос в интервью по кодированию. Если они не знают, с чего начать (а огромное количество людей не знают), вы, вероятно, не захотите их нанимать. Если они используют встроенный метод, это хорошо - он говорит вам, что не будет пытаться создать свое собственное колесо, если оно будет предоставлено, - но затем представит гипотетическую ситуацию, когда во встроенном методе есть ошибка, чтобы они нужно писать самостоятельно. Затем вы можете использовать их код в качестве отправной точки для задания других вопросов, таких как исправление ошибок, использование памяти, время работы и т. Д.
Gabe
0

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

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

Дэвид Торнли
источник
3
Что удивило бы вас еще больше, так это то, как много людей не смогли ответить на этот основной вопрос, чем кто мог.
HLGEM
0

Программирование - это высокотехнологичный навык с кучей четких «результатов». Кандидат может или не может доставить их. Так что нет никаких «минусов» в том, чтобы задавать технические вопросы. Это полностью для того, чтобы сказать: «покажи мне код для этого приложения или« покажи код для приложения, которое ты уже написал ».

НЕ выполнение этого может привести к такому результату, как следующий: богатый человек взял интервью у репетитора, чтобы научить его детей играть в шахматы (как упражнение, расширяющее сознание). Учитель открыл клетчатую доску и начал говорить о 64 клетках, но не коснулся шахматной фигуры. В любом случае, отец был вынужден нанять репетитора. А репетитор научил детей играть в CHECKERS.

Том Ау
источник
Это просто показывает пример некомпетентного интервьюера, а не необходимость играть в шахматы на собеседовании. Богатый человек мог просто попросить меня «объяснить Кастлинг» или что-то в этом роде, и сразу получить представление о том, что знал репетитор.
GrandmasterB