В рамках процесса собеседования мы первоначально просим кандидатов сделать «FizzBuzz», в настоящее время процент кандидатов, которые могут правильно ответить на FizzBuzz, значительно возрос - это может быть связано с его популярностью в сети.
Около года назад, как второй вопрос, мы начали задавать вопрос, очень похожий на оригинальный FizzBuzz. Этот вопрос был разработан так, чтобы быть простым, как первоначальный FizzBuzz, а также для оценки конкретной способности кандидата, в частности способности упорядоченно и логически расставлять приоритеты и наборы «бизнес-правил», которые были предоставлены в некоторых произвольный порядок. Формулировка вопроса поначалу кажется немного двусмысленной, что может затруднить работу носителей английского языка, но если продуманное решение может быть правильно решено - это также дает кандидату возможность задать вопросы для уточнения, что всегда хорошо ,
Мы находим это очень важным навыком для разработчика, поскольку разработка программного обеспечения обычно основывается на функциональных требованиях, которые выводятся в произвольном порядке с течением времени, что может накладывать ограничения и условия на другие области программного обеспечения без явного указания, и это работа проницательного разработчика по крайней мере исследовать потенциальные проблемы и конфликты в отношении реализации.
Мы обнаружили, что немногим более 65% кандидатов (размер выборки 38), прошедших FizzBuzz, полностью провалили FizzBuzz v2.0. Обычно эти кандидаты обнаруживаются позже в процессе, но, похоже, это хороший способ обнаружить их рано.
Мой вопрос не в том, является ли FizzBuzz устаревшим, а в том, какие факторы могут способствовать столь большому количеству кандидатов, которые не смогли ответить на вопрос FizzBuzz v2.
- Вопрос слишком двусмысленный?
- Снижает ли стресс среда собеседования способность критически мыслить до такой степени, что не может выполнить такую тривиальную задачу?
Вопрос:
Напишите подпрограмму на вашем любимом языке программирования, которая будет принимать список строк в качестве входных данных, и для каждой строки в списке будет выполняться одно из следующих действий:
- Печатайте только Fizz, если строка содержит букву A
- Печатать только Buzz, если строка содержит букву B
- Печатать только BuzzBuzz, если строка содержит как A, так и B
- Печатайте только FizzFizz, если строка не содержит ни A, ни B
- Печатать только FizzBuzz, если строка содержит только один A и только один B
Некоторые типичные вопросы, задаваемые кандидатами:
- Должно ли оно быть чувствительным к регистру?
- Означает ли «содержит А и В», А должен предшествовать B
- Что должно быть напечатано, если ни один из пунктов не достигнут?
- Что должно произойти, если может быть выполнено более одного условия?
Мы обнаружили, что подавляющее большинство кандидатов, которые успешно завершили вопрос, вообще ничего не спрашивали, они просто делали это, как и FizzBuzz.
Ответы:
Он может стать гораздо лучшим тестом, чем FIZZBUZZ, но если у вас есть представление о правильном ответе, это худший тест в мире. Эти тесты имеют очень небольшое значение в интервью для начала.
Если кандидат отвечает «правильно», не задавая вопроса, то у вас есть проблема, что при выборе кандидата будет выбран неправильный тип программиста. Он не может определить неоднозначные требования или не может понять, что большинство людей не могут написать однозначные требования. , Не имеет значения, является ли программа технически совершенной во всех аспектах, скорее всего, он из тех парней, которые будут поставлять программное обеспечение со словами: «Мне все равно, не то, что вы хотели, это то, что вы просили».
Часть теста здесь является приоритетным порядком правил. Вы не указываете это. Ввод "ABC" может печатать Fizz, Buzz, BuzzBuzz или FizzBuzz - любой из них является правильным
Кандидат, которого я выберу, - это тот, кто понял (в основном) правильно, но задал много вопросов и, в идеале, сделал много «пустяков» на белой доске.
Например, я бы изучил мое понимание этих требований, предоставив вам серию образцов текстов и спросив вас, что вы ожидаете напечатать и почему. - Обсуждение моего примера ввода «Азбука» должно привести к некоторым полезным для вас инсайтам.
Точно так же, как FIZZBUZZ, результат этого теста настолько же хорош, насколько ваши наблюдения о том, как был получен результат, - результат не имеет значения.
Я бы немного подправил - просто чтобы сделать его более интересным - убрал «единственное». Это описано в строке выше («напечатайте одно из следующего»), и посмотрите, сколько людей спрашивают об этом. Если кандидат пропускает «только» и у вас есть время, укажите на это и посмотрите, что произойдет. Если он имеет дело с «только», уберите его из требования и заставьте их изменить код.
источник
Слово «только» в ваших требованиях создает противоречие во всех вопросах.
Таким образом, ваш вопрос проверяет требования, собранные в условиях стресса, вы уверены, что хотите проверить эту комбинацию навыков?
Если вы хотите проверить сбор требований, я бы предложил сделать ОДИН из вопросов двусмысленным. Если вы хотите заменить FizzBuzz, уберите двусмысленность.
Приоритизация бизнес-правил может быть осуществлена только с учетом специфики предметной области - если вы не включите некоторый простой контекст для того, что вы делаете (возможно, они являются купонами, которые нужно использовать для различных значений), у разработчика нет никаких оснований для принятия собственного решения.
Но требование кого-то попросить разъяснений, когда это имеет значительный риск нежелательного результата, возможно, не лучший способ оценить его умение распознавать пределы своих знаний. Они могут подумать, что безопаснее угадать и ошибиться, чем указать, что вы некомпетентны в написании требований, или если ни один из интервьюеров не является разработчиком, будучи помеченным как имеющий плохое отношение.
источник
С неоднозначностью требований нельзя правильно завершить v2.0, не задавая вопросов.
источник
Если вы хотите устранить двусмысленность, вы можете изменить требования на:
Напишите подпрограмму на вашем любимом языке программирования, которая будет принимать список строк в качестве входных данных, и для каждой строки в списке сделайте следующее:
источник
Да, вопрос слишком неоднозначный, чтобы на него можно было ответить без разъяснений. Однако дополнительное правило, гласящее, что в случаях, когда применяются несколько правил, ваша программа должна выбрать наиболее конкретную вещь, должна устранить неоднозначность.
Скорее всего, это признак того, что кандидат «забивает» FizzBuzz: стресс или нет, программа очень проста.
Я думаю, что модифицированный FizzBuzz не сравним с оригинальным, потому что его идеальное решение отличается: хотя цепочка
if-then-else
остается приемлемой, я думаю, что решение на основе таблиц больше подходит для этой проблемы:Размер проблемного пространства -
3x3
нет2x2
, поэтому он сопоставляется с таблицей гораздо легче, чем исходный FizzBuzz. На самом деле, я считаю, что решение исходной проблемы FizzBuzz на основе таблиц труднее для понимания.источник
Две вещи здесь:
источник
Я видел процессы интервью, которые побуждают программистов мыслить вслух и задавать вопросы, чтобы увидеть их мыслительный процесс. Мне нравится этот процесс лучше.
Я прочитал этот fizzbuzz v2.0, и я бы спросил там о требованиях № 3 и № 5. Я не знаю о других людях, но нахожусь в инженерном деле, я не хочу никакой двусмысленности, поэтому я задаю вопрос. Потому что позже по линии (закодировано и все) я не хочу выяснять, что я должен был сделать предположение, и это было неправильно.
источник
Возможно, самый простой способ избежать двусмысленности - показать несколько примеров:
"A" возвращает "Fizz" "aAbA" возвращает "Fizz" "B" возвращает "Buzz" "aBbB" возвращает "Buzz" "AB" возвращает "FizzBuzz" "ABaabb" возвращает "BuzzBuzz" "" возвращает "FizzFizz" "ab "возвращает" FizzFizz "
источник
Вместо того, чтобы ставить кандидату противоречивые / неясные требования, просто спросите его, как они справляются с этими ситуациями. В противном случае вы заставляете себя выглядеть некомпетентным или, что еще хуже, ставите компетентных людей на предательский баланс «как мне получить ответы, которые мне нужны, не подразумевая, что этот вопрос на собеседовании или человек, задающий его, глуп?»
В любом случае, это раздражает, как и все. Интервью - это процесс согласования, и под этим я подразумеваю улицу с двусторонним движением. Прямые вопросы и ясность намерений намного важнее, чем навязывание кандидата под давлением IMO. FizzBuzz - хороший пример кодового вопроса, потому что он короткий и приятный. Не используйте его напрямую. Напишите простые вопросы, как это, которые следуют этой модели.
Но для FFS не надо придумывать и скрывать настоящий тест за другим тестом. Просто спросите людей, как они справляются с этой чертовой проблемой. Опытный разработчик неоднократно сталкивался с неоднозначными требованиями и с удовольствием расскажет вам свои стратегии. Вы могли бы даже чему-то научиться.
И не думайте, что все хотят использовать доску или это удобный период рукописного ввода. Некоторые из нас печатали с 12 лет (большое спасибо Space Quest). Я даже не могу думать прямо с ручкой или маркером в руке. Это 20-freaking-13, что с досками уже? Когда люди протягивают мне ручку и бумагу и просят пройти кодовый тест, трудно сдержать смех.
источник
Я думаю, что это хороший вопрос для интервью. Требования неясны, как это часто бывает в реальности. Вы проверяете, достаточно ли сообразителен кандидат, чтобы понять это (даже в состоянии стресса), что он / она не боится задавать вопросы, которые он сочтет необходимыми, и способен поставить требования в разумную структуру. И это немного говорит об их возможностях программирования, хотя вы должны также поставить некоторые более сложные проблемы, содержащие рекурсию и указатели, так как эта проблема слишком проста.
Однако я немного беспокоюсь о том, что «успешные» кандидаты не задают вопросов. Я постараюсь выяснить, поняли ли они, что в некоторых случаях вы можете применить до 4 правил, и что в этом вопросе нет ничего, что могло бы разрешить эту двусмысленность, и попросили их объяснить, как они с этим справились. Возможно, ваш вопрос не настолько двусмысленный, чтобы заставить их задавать вопросы, или, возможно, вам следует попросить их мыслить вслух.
Кстати: мне странно, что вы говорите о «правильном решении». Если вы зададите такой вопрос, то вы можете напечатать «Fizz», «Buzz», «BuzzBuzz» или «FizzBuzz», если вы получили «AB». Так что ИМХО любое решение без вопросов просто неправильно.
источник