Могу ли я повеселиться с FizzBuzz, когда меня спросят на собеседовании? [закрыто]

FizzBuzz — это распространенный вопрос на доске для программирования собеседований:

Напишите программу, которая печатает числа от 1 до 100. Но для числа, кратного трем, вместо числа печатайте «Шипение», а для числа, кратного пяти, печатайте «Жужжание». Для чисел, кратных как трем, так и пяти, выведите «FizzBuzz».

Стандартный ответ имеет высокую читаемость и использует цикл. Как бы отнеслись к этому интервьюеры, если бы я повеселился с этим распространенным вопросом? Например, я пишу все это в одну строку или запутываю каким-то сумасшедшим синтаксисом? Будут ли они думать: «Это весело! Тебя наняли!» Или они выгнали бы меня на обочину за то, что я не показал, что умею писать цикл?

Этот вопрос был вдохновлен https://codereview.stackexchange.com/questions/49058/single-line-fizzbuzz-solution-in-linq и https://codegolf.stackexchange.com/questions/88/obfuscated-fizzbuzz-golf . .

Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат .

Ответы (12)

Будут ли они думать: «Это весело! Тебя наняли!» Или они выгнали бы меня на обочину за то, что я не показал, что умею писать цикл?

Вот в чем проблема с этой мыслью — вы не можете заранее знать, как ваш интервьюер воспримет такое веселье.

Некоторые работодатели сочтут вас забавным, остроумным и, вероятно, с вами будет весело работать.

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

И невозможно узнать, что они подумают, пока вы не попробуете.

Мы часто думаем, что мы смешнее и гораздо умнее, чем на самом деле кажемся другим. Так что, если вы не чувствуете себя очень удачливым или если вы действительно не хотите эту работу, зачем делать такую ​​ставку, если вам это не нужно?

Играйте прямо во время собеседований и приберегите трюки и веселье после того, как вас наймут.

Некоторые считают вас забавным и остроумным, а сотрудники какой-то другой компании заслуживают удовольствия от работы с вами :-)
Не только эти точки, но и запутанный код трудно читать. Если бы мне пришлось просматривать запутанный код, я бы его выбросил. Нет возможности его оценить. Тем не менее , использование некоторых приемов (таких как, например, операция, которая может уменьшить размер кода, время и сложность) может быть полезным и показать, что вы доминируете над языком.
@IsmaelMiguel В большинстве языков, используемых в производственных системах, такие трюки редко используются в реальном мире, их трудно читать и сложно поддерживать. Чистый и минималистичный код — это хорошо. Свопы XOR и другие махинации — нет.
@Lilienthal Ну, не совсем так. Вы можете использовать функцию генерации диапазона с функцией для просмотра всех результатов и изменения соответствующих значений на FizzBuzz(очень обобщенные). Это можно легко сделать в C# с помощью LINQ и в PHP с помощью самых стандартных функций. Это не всегда плохо. И это 2 языка, используемые в производственном коде.
Этот ответ точно правильный. Их реакция позволит вам узнать все, что вам нужно знать о компании и о том, стоит ли тратить ваше время на работу с ними.
@IsmaelMiguel: чтобы обобщить то, что (я думаю), вы говорите: спрашивающий упоминает, что это легко сделать с помощью цикла, и это правда. Но некоторые языки предлагают альтернативы явным циклам, которые не являются простыми «трюками», это сильные альтернативные подходы. Использование таких подходов не должно привести к провалу собеседования при условии, что полученный код «хорош», потому что, если вы привыкли к LINQ или к функциональному программированию, то цикл — это неуклюжий хак :-) Есть еще разница между использованием законный подход без явных циклов, которые могут быть забавными, по сравнению с «развлечением», делая что-то вредное.
@SteveJessop То, что я сказал, примерно об этом, да. Но сказал чище.

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

Я думаю, что это лучший ответ. Таким образом, если они просят о веселом способе и им это не нравится, они все равно могут спросить, как бы вы это сделали на работе.
Это был бы и мой ответ. «Вы хотите, чтобы было чисто и лаконично или весело и нечитабельно?» и я бы принял их ответ во внимание, когда думал о присоединении. Был ли ответ веселым или показался строгим?
@Чад, зачем мне нанимать кого-то, кто думает, что «работа здесь будет скучной по сравнению с другими вещами в моей жизни»?

Это напоминает мне The Fizz Buzz from Outer Space . В то время как этот потенциальный сотрудник думал, что ему будут аплодировать за его нестандартность, он думал, что на самом деле это подчеркивает худшие черты. Помимо того, что он выглядел дерзким и претенциозным, его также было трудно понять, и это вызвало большие споры о том, действительно ли он понял стоящую перед ним задачу. Вскоре стало очевидно, что он не подходит для этой работы. Кроме того, кандидат на программирование должен уже знать, что работодатель ожидает увидеть несложное решение, которое показывает, что он практичный программист. Не отклоняйтесь от цели и ожидаемого результата, если вы намеренно не хотите провалить собеседование.

Вы даже не дали бы соискателю шанс объяснить свой код и, возможно, подсказали бы ему сделать это «нормальным» способом? Вот почему хороших программистов трудно найти.
@JeffO: Если программисты намеренно скрывают свои навыки, их будет трудно найти.
@JeffO кодер, который кодирует не «нормальным» способом, генерируя ненадежный код, которому не хватает ремонтопригодности и гибкости, потому что он слишком «умный», НЕ является хорошим кодером для производственной группы. Обычно такие программисты лучше работают как «волки-одиночки», делая целые небольшие проекты самостоятельно. Умный код хорош, но имеет свое место, и хороший программист знает, когда вернуться к менее причудливому коду. Кто-то, кто пишет умный код для Fizzbuzz, сгенерирует какой-то ужасно сложный (в обслуживании, чтении и т. д.) код, когда его спросят: «Эй, не напишешь здесь быструю сортировку, она нам понадобится?».
@JeffO Спросите себя, хотите ли вы, чтобы его код или стратегии были в вашей кодовой базе? Вы идете на собеседование, вы одеваетесь для работы, которую хотите. Это ничем не отличается. Код для работы, которую вы хотите.
@TMN - Почему вы пришли к такому выводу? Опять же, вы даете им понять, что предпочитаете стандартный способ, и если они не могут этого сделать, вы можете заключить, что они некомпетентны, но не раньше.
@Patrice - Почему так сложно попросить их сделать это обычным способом? Каждый, кто идет на собеседование, не умеет читать мысли. Не так уж сложно определить, есть ли у них какое-то отвращение к правильному поведению, и вы можете не нанимать их. Вы рискуете упустить качественных кандидатов, если не захотите сказать им, чего ожидаете.
@baconface - Вот почему я предлагаю вам не просто выбрасывать этого человека без какой-либо обратной связи. Никто не собирается делать все идеально. Я бы предпочел нанять кого-то, кто готов внести изменения после исправления. Если они решат не вносить исправления или не смогут, то я решаю их не нанимать. Я не оставляю никакой двусмысленности в отношении того, что я ищу в новом найме.
@JeffO, на какую работу тебя нанимают? акробатический кодер или кодер? Серьезно, производственный код есть производственный код. В своей повседневной деятельности я не скажу вам: «О, закодируй меня быстрой сортировкой… но обычным способом», не так ли? Если я должен указать вам, какой код реализовать, это потому, что вы не знаете. Если ты не знаешь, мне не следовало тебя нанимать. Если вы не можете догадаться, что в профессиональной среде ваш код должен быть простым, удобным в сопровождении, читабельным, гибким и надежным... тогда вам может потребоваться пересмотреть свои показатели для оценки вашего кода.
@JeffO: Есть разные способы быть некомпетентным. Одной из них является непонимание цели простой задачи программирования.

Может быть вариант показать умное решение FizzBuzz или вариант. Сначала покажите действительно чистое простое решение.

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

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

Когда я проходил собеседование по поводу работы в Linux-системах, мне дали «шипение», потому что это то, что есть на их собеседованиях для программистов. (В этой компании работает много кодеров)

Поэтому я ответил на это с помощью сценария оболочки bash, а не блефовал через какой-то псевдокод. Это означало, что мой ответ был актуальным и полезным для этой должности.

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

Боюсь, @paparazzi прав. Никто не любит умников.

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

Выражайте свое недовольство заданием в свободное время.

Я не уверен, как это ответ, а не комментарий к другому ответу.
В то время это был законный ответ, основанный на комментарии. Если вы не находите, что это добавляет ценности, не голосуйте.
Ага, понятно. Я предположил, что указанный пост был ответом, а не комментарием.

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

Рассмотрим сходство fizz buzz с другими, более практичными задачами программирования. Предоставьте интервьюеру возможность изменить параметры вопроса. Предложите написать альтернативное решение, которое подходит для работы. Какие интерфейсы должны быть у fizz buzz, подходящие для разных парадигм программирования?

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

Да, тогда вы можете задавать более творческие вопросы. Единственная ценность FizzBuzz — отсеять те, которые точно не подойдут.
@xxbbcc Fizz buzz полезен для этого, но я не согласен, что это его единственная ценность. Каждый день мы видим сообщения в блогах, жалующиеся на то, что сложные вопросы для интервью одинаково глупы. Потому что многие программисты не сталкиваются со сложными программными задачами «перевернуть это дерево!», «реализовать решето E!». Вместо этого они выполняют операции CRUD. Хорошие проектируют хорошие интерфейсы для глупых простых операций, потому что они знают, что их представление об «очевидности» не совпадает с представлением клиента, даже если этот клиент является пользователем API. Жужжание Fizz дает мне знать, серьезно ли хороший кодер отнесется к «глупым» частям работы.
Это совсем не мой опыт в отношении FizzBuzz. Это вопрос, который нужно задавать, как бы он ни был плох, но он мало что говорит вам о том, что знает кандидат и как он/она работает. Я считаю, что решение проблем, указывая на проблему в примерах кода, работает лучше.
@xxbbcc эмпирически, ты прав. Никто никогда не давал мне по-настоящему вразумительного ответа на шипение. Люди, которые вообще проходят через это, просто пытаются пройти через это. Но ОП спрашивает, должен ли он / она быть креативным. Мой ответ: «Да, просто будьте профессионально креативны».
Я бы сказал нет, не подходите к вопросу как FizzBuzz — никто не ищет творчества. Все знают, что это плохой вопрос. Если вы хотите проверить, насколько креативен кандидат, спросите о проблемах и нескольких альтернативных решениях, чтобы увидеть, какие варианты может предложить кандидат. Вам вообще не нужен код для творчества. Лично я предпочитаю креативных мыслителей творческим программистам.
У меня странное ощущение, что мы могли бы продолжить этот разговор некоторое время и в конце концов обнаружить, что мы даже не согласны с тем, что на самом деле означает «творческий». Давайте согласимся не согласиться.
Да, думаю, это стало довольно очевидно. :)

1) Скажите, что вы уже видели FizzBuzz.

2) Сделайте самое простое решение.

3) Упомяните, что вы знаете о других остроумных решениях.

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

+1 за честность и за то, что сказали им, что видели FizzBuzz раньше. Если соискатель честен со мной, я в 10 раз чаще рекомендую его для найма. Плюс, если бы я знал, что кто-то знает это, мне было бы более интересно увидеть интересные варианты решения, которые они также могут знать.

FizzBuzz — очень простое упражнение, которое, я надеюсь, не так уж распространено.

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

В остальном это неинтересно, так что просто покончим с этим и перейдем к сути интервью.

Это не оригинальный пост, в котором это описано. По-видимому, это здесь (ссылка из статьи, на которую вы ссылались): imranontech.com/2007/01/24/…
Расскажи мне об этом. У нас был парень из колледжа, который не знал разницы между сабвуфером и функцией.
@RichardU Это просто. Один из них может запустить ядерные ракеты и уничтожить Северную Корею. Другой - подводная лодка.
@RichardU: На каком языке? В Perl, например, разницы нет.
@KeithThompson в VB, VBA функция возвращает значение, а подпрограмма — нет.
Это устраняет много мякины даже сегодня. Он также выявляет кандидатов, которые считают, что некоторые задачи им не по плечу. ОП, вероятно, будет примером последнего.

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

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

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

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

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

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

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

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

Я думаю, что неуместно использовать fizzbuzz, чтобы показать, что вы забавны или умны.

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

  • Вы можете написать fizzbuzz, который будет объектно-ориентированным и расширяемым.

  • Вы можете написать fizzbuzz, который будет функциональным.

  • Вы могли бы написать fizzbuzz с учетом оптимизации.

  • Вы можете написать fizzbuzz, который включает в себя тесты.

  • Вы можете написать fizzbuzz API.

  • Вы можете написать git-клон существующего fizzbuzz (но потом написать его самостоятельно, чтобы убедиться, что вы можете кодировать)

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