Когда речь заходит о вопросах «собеседования», часто возникает тема FizzBuzz. Об этом также есть пост Кодирующего Ужаса .
Теперь, если вам надоело читать сайты, подобные этому, вы, вероятно, с меньшей вероятностью попадете в демографическую группу программистов, которые найдут FizzBuzz совсем не тривиальным.
Но правда ли, что 99% программистов будут бороться с этим?
В самом деле?
Какие доказательства подтверждают это?
Некоторые примеры из реальной жизни будут очень полезны для ответа на этот вопрос.
Ответы:
99%? Нет. Значительный процент? Да. Из моего личного опыта интервьюирования людей я могу засвидетельствовать это. Это может показаться незначительным для вас, но есть много людей в области программирования, которые в течение многих лет более или менее притворялись, что подали заявку на позиции не начального уровня и потерпели неудачу.
Даже если вы МОЖЕТЕ легко решить эту проблему, но вы дадите мне огромную уверенность в том, что вас попросят выполнить такую черную задачу, это будет считаться против вас. Быть в команде означает, что иногда приходится делать то, что вам не нравится, но это необходимо. Если сразу, прежде чем мы даже начали работать вместе, вы думаете, что было бы лучше попытаться утвердить свой особый статус того, чтобы быть выше, чем делать то, что я просил вас сделать, тогда это будет действовать против вас.
Меня не волнует, насколько элегантно ваше решение (хотя это было бы неплохо), но вид, что вы делаете удар по доске и обсуждаете ее, показывает мне, что вы, по крайней мере, готовы нанести удар , Если вы возмущаетесь и говорите что-то вроде: «Я решаю проблемы, а не обезьяна кода!» тогда вы будете сбиты колышком.
У меня были просто собеседники, отказывающиеся даже начинать попытки. Просто откажись. Нет. Не буду этого делать Я задаю еще один или два вежливых вопроса, благодарю их за потраченное время и заканчиваю интервью.
Я говорю это как менеджер и как разработчик.
источник
Я думаю, что 99% программистов, которые претендуют на работу (и не получают ее), могут бороться за это. Но не 99% программистов, которые продуктивно держат работу.
Такова природа нашего современного процесса поиска работы. Многие люди, которые обращаются, не имеют квалификации.
Этот пост Coding Horror также говорит о том, как мы преподаем информатику в наши дни. В прошлом (особенно в MIT) вы должны были изучать такие вещи, как Lisp, что в значительной степени требует от вас понимания таких понятий, как рекурсия.
В настоящее время людей учат Java, потому что он широко используется в промышленности, и акцент сместился на синтаксис, а не на глубокое программирование. Я не люблю Java; на самом деле, я думаю, что это идеальный первый язык программирования. Но я не видел, чтобы мои преподаватели учили его глубоким принципам программирования.
источник
Я ненавижу это говорить, но
Основная причина, по которой я не смог получить ответы на вопросы по программированию, - это ошибка автора, а не автора.
Я хорошо помню одно интервью, в котором меня спрашивали, как создать определенный алгоритм поиска в коллекции, который будет работать в постоянное время (одинаковое количество просмотров независимо от того, сколько элементов в коллекции). Я шарил и шарил на нем 20 минут, прежде чем сдаться. Именно тогда этот гений, проводивший собеседование, продолжил демонстрировать ответ как нечто, действующее почти постоянно, но все же не постоянно. Немного похоже на высказывание «Дайте мне ответ ноль», а затем принять 0,1.
Если не считать того, что я видел слишком много случаев, когда кто-то из опрошенных задает вопрос, который не соответствует следующим критериям:
Серьезно (1), я думаю, что просить людей писать код в устной части интервью глупо.
Серьезно (2), я думаю, что брать интервью у людей, не прося их написать код, также глупо.
Серьезно (3), вы должны либо дать им «домашнюю работу», попросить их принести образцы кода, либо дать им ноутбук и пару вопросов и тихий офис для работы над ними. Затем оставьте их в покое, пока они над ними работают. Я обычно придерживаюсь последнего подхода, так как он ограничивает их способность получать помощь извне (читерство), и я могу ограничить время.
источник
int? result; for (int i = 0; i < int.MaxValue; i++) { T item = (i < array.Length) ? array[i] : someDummyItem; if (item == whatWereLookingFor) result = i; } return result;
- постоянное время :)Все, что вам нужно сделать, это поиск по FizzBuzz. Там была огромная волна постов в блоге. Говоря в общем, блоггер сказал: «Я сказал людям написать это [на каком-то языке], и вот такие ошибки они совершили», а затем перечислил некоторые подводные камни. Веселье начинается в комментариях, где люди говорят: «Ха! Это тривиально на [каком-то другом языке], все, что вам нужно написать, это:», а затем код. Следующий комментарий всегда находит ошибки в первом. Похоже, что некоторые очень хорошие разработчики не понимают это с первого раза, на любом языке. Некоторые из ошибок:
Когда я нанимаю, я прошу людей написать для меня код на доске, ничего более сложного (я знаю, вы не думаете, что это сложно), и многие кандидаты терпят неудачу. Я имею в виду то, что пишу в стиле «если», «потом», «конец» и «если», но также ставлю фигурные скобки (я думаю, это просто для безопасности) или пишу на C # (и сначала спрашиваю, C #?), Но нигде не должно быть ни одной точки с запятой. Не заводи меня на логические ошибки!
источник
Я прочитал статью о кодирующем ужасе, о которой вы упомянули, и мое мнение таково, что Джефф прав ... но когда он последний раз брал интервью?
Когда вы проходите собеседование, вы, как правило, находитесь в состоянии сильного стресса, и вам часто приходится отвечать на теоретические вопросы (без интеллигенции, без Google, без резких уточнений, ... только ваша память обеспокоена стрессом). То же самое в тестах. Стресс не помогает тебе.
Я заметил, что единственный способ узнать, подходит ли кто-то на должность, - это поработать с ним какое-то время ... Просто возьмите последние 10 человек, которых вы наняли, из 100 (может быть, больше), сколько было действительно хорошо нанимать???
Работодатель должен нанять решателя проблем, а не обезьяну, которая знает о модулях.
Вы не можете тестировать «на время всех заявителей», поэтому необходимо провести с ними собеседование. Вот почему я сосредотачиваю свои вопросы на этом (решение проблем) и делаю прошлые контрольные проверки.
Мое мнение таково, что FizzBuzz опасен для компании, которая ищет разработчиков для поддержания своего роста.
источник
Недавно мне было поручено опросить более 50 программистов на руководящую должность, где они будут работать в основном с PHP.
Я бросил проблему fizzbuzz на экзамене, главным образом, чтобы развлечься, и потому что я хотел десять хороших вопросов и имел только девять. В то время я намеревался показать людям, что мы тоже можем повеселиться, даже на вопросах интервью.
80% заявителей решили проблему, но не использовали оператор модуля.
15% соискателей не смогли решить проблему.
5% заявителей решили проблему с помощью оператора модуля.
Хотя моя выборка довольно ограничена (50 кандидатов из одной страны), я могу вам сказать, что:
95% из них имели степень бакалавра или выше в учебной программе CS (университеты здесь конкурируют, пытаясь сделать звучание CS более впечатляющим).
Я был действительно поражен. Ну, напуган .. но поражен. Я не думал, что смогу приблизиться к воспроизведению результатов, так как проблема стала настолько популярной. Это показывает, что 5% моих кандидатов могут не быть супер-программистами, но, по крайней мере, они читают блоги, связанные с программированием.
источник
x - (x/y)*y
?В моем последнем раунде приема на работу у меня было 3 строителя с 0, я повторяю ноль, образование в области программирования или опыт работы на должность разработчика программного обеспечения. * Так что это дно ствола. Если вы предполагаете нормальное распределение навыков, то вы можете видеть, как средний уровень квалификации будет довольно низким, и даже «выше среднего» (среди заявителей) все равно будет относительно плохим.
Теперь, если вы ошарашиваете только тех кандидатов, у которых были какие-то навыки программирования, вы обнаружите, что теперь у вас есть:
Кроме того, некоторые вопросы «fizzbuzz», которые я видел, относятся к конкретным доменам. Вы можете постепенно развиваться с языком / фреймворком x в течение ряда лет (отсюда и z-летний опыт работы с x) и не сталкиваться с определенными его частями (например, разработчики библиотек не слишком много знают о разработке компонентов пользовательского интерфейса).
Аналогичным образом, многие разработчики в настоящее время занимаются разработкой обслуживания, поэтому их навыки в области архитектуры / дизайна могут быть слабыми в некоторых областях.
Теперь я не уверен, что 99% является точным, но IME все еще довольно высок. По крайней мере, в диапазоне 80%.
* Нет, мы не звонили и даже не давали второй взгляд на эти приложения.
источник
Да, действительно. Вероятно, не 99%, но все еще довольно высоко. Раньше я брала интервью у студентов по информатике для стажировок и найма на полную ставку. Я брал интервью у 25 студентов в колледже. Нам сказали не задавать одни и те же вопросы, потому что студенты говорили. Я быстро понял, что это не имеет значения, потому что из 25 человек я получу только 3 или 4 ученика, которые смогут ответить на мой первый вопрос. "Напиши strcmp"
Я попросил их написать функцию для сравнения двух строк. Возможно использовать функцию для сортировки слов по словарю. Вы будете поражены количеством студентов, которые не понимают, как сравнивать два слова, не говоря уже о том, как написать функцию. И некоторые из этих студентов утверждали, что они получили все оценки в CSc.
Дело в том, что программирование ОЧЕНЬ СЛОЖНО. Многим нравится думать, что они умеют программировать, но они этого не делают.
источник
Некоторые мысли:
Я бы не стал возражать против кого-то, если в их программе были какие-то ошибки, но у них явно была правильная идея. Отладка является частью программирования.
Я думаю, это грустно, что так много людей обращаются за работой, они не знают, что не могут сделать. Сдается мне как проблема с экономикой.
Очень легко задавать людям плохие вопросы, где единственный «правильный» ответ - это тот, который дал бы интервьюер.
источник
Этот тест очень хорошо охватывает несколько вещей, которые я хочу знать о программисте, которого я мог бы нанять:
Чтобы уточнить последний пункт, существует множество решений для Fizz-Buzz. Вы идете на удобочитаемость? Скорость? Краткость? Вы пытаетесь закончить написание программы быстро? То, как программист атакует эту простую проблему, очень показательно. Если программист не может выбрать решение и довести его до конца, что это говорит вам о том, как этот человек будет выполнять реальную задачу?
источник
К сожалению, многим людям с впечатляюще выглядящими резюме не хватает базовых навыков программирования. Я видел много случаев, когда люди, которые перечисляли C и C ++ в своих резюме, не могли ответить на основные вопросы об указателях.
источник
Есть два типа людей, которые я надеюсь, что FizzBuzz поможет мне избежать.
В любом случае, меня не волнует идеальная реализация. Тест, который вам нужно провести с людьми, претендующими на вакансии разработчика, заключается в том, что они могут программировать вообще.
Тем не менее, я бы, вероятно, не стал бы заниматься этим конкретным тестом по нескольким причинам. Во-первых, это очень хорошо известно, и любая из вышеперечисленных групп будет быстро попробовать. Во-вторых, я бы предпочел использовать вопросы на экране телефона Стива Йегге, чтобы отсеять непрограммистов, прежде чем мы дойдем до того, чтобы их вводить . Если кто-то узнает эти вопросы, это будет означать, что они читали блог Стива Йегге, который подсказывал мне, что они были в топ 1% разработчиков, которые серьезно относятся к своей профессии и, безусловно, требуют интервью. Точно так же, если бы у кого-то был хороший представитель здесь или на ТАК, я был бы склонен взять у них интервью.
источник
Трудно поверить, что разработчики не смогут кодировать FizzBuzz, пока вы не увидите «девятку-пять», которые копируют и вставляют свои работы вместе и сознательно стараются не писать код. Я не мог поверить в это, когда услышал, как один из наших старших разработчиков учил C # с 3-летним «опытом», как пользоваться словарем. Интерфейсы? Шаблоны проектирования? стандартный вывод? YAGNI? Мой ведущий никогда не слышал о YAGNI! Удивительно, что эти люди не знают.
Я верю в это сейчас. Я также думаю, что слишком много разработчиков просто делают достаточно.
источник
Я думаю, что одна из причин, почему это такой популярный вопрос, заключается в том, что есть более чем один способ ответить на него, и в зависимости от того, какой путь выберет кандидат, вы сможете получить представление о том, как они кодируют. Некоторые отличные примеры можно увидеть здесь, если у вас 10K повторений на Stack Overflow.
Что касается статистики 99%, проверьте, откуда это число. Это, вероятно, предвзято. Если это основано на интервьюировании программистов начального уровня для их первой работы, тогда да, я вижу, что это возможно, особенно если большинство их кандидатов выходят из колледжа. На самом деле я могу думать о ком-то, кто, вероятно, выписал бы условие «100 if» как решение этой проблемы.
источник
Я нахожу утверждение, что 99% программистов не могут программировать или решать простой тест на кодирование, сильно преувеличены. В случае теста FizzBuzz вы либо сталкивались с этой проблемой раньше и можете легко решить ее с помощью оператора по модулю, либо вы не сталкивались с ней раньше и будете бороться с ней. Он ничего не говорит интервьюеру о ваших навыках программирования.
Я думаю, что проблема со многими программистами, которые, очевидно, оставляют плохое впечатление на собеседовании, заключается в природе технических методов интервьюирования. Интервьюеры ожидают, что кандидаты запоминают и мгновенно воспроизводят синтаксис языка, детали и вычислительную сложность структур данных, аппаратных архитектур, шаблонов проектирования и т. Д. И т. Д. Область компьютерных наук / разработки программного обеспечения огромна. Невозможно и незаметно пытаться запомнить все.
В реальном мире ключом является способность понять поставленную перед вами задачу программирования / проектирования и узнать, где можно найти информацию (вашу IDE, справочные страницы, книги, Google и т. Д.), Как решить вашу проблему. Это то, что интервьюеры никогда не проверяют.
источник
Я все еще сравнительно младший программист (я кодировал деньги в течение ~ 2 лет и в некотором профессиональном качестве программировал в качестве дополнительной ответственности около 2 до этого), поэтому использую достаточное количество соли.
У меня есть некоторый опыт в создании первого экрана для кодировщиков для проекта крупного предприятия (мы вроде знали, что проект обречен, но в любом случае, они хотели заплатить). Как единственный программист в фирме, занимающейся наймом, мне было поручено рассмотреть резюме и отбор кандидатов.
Это было для правительственного проекта, так что,
возможно,это не привлекло самых талантливых кандидатов, но я не получил ни одного приложения от кого-либо с учетной записью github, у которого фактически был показан код, ни от кого, у которого был портфель, поэтому я использовал fizzbuzz ( буквально точная проблема) в качестве первого прохода для всех, кто выглядел так, как будто они могут программировать.Я предвосхитил это псевдо-извинением, заявив, что я знаю, что это глупо, но я просто хотел увидеть любой работающий код, и, если они захотят, они могли бы послать другой пример равной или большей ценности или чего-то еще, но этого fizzbuzz было бы достаточно.
Результат: я не получил ни одного ответа, который был бы на самом деле правильным, и это было бы сногсшибательно, учитывая количество ответов в Интернете. Никто даже не удосужился заняться плагиатом. Мы должны были просто нанять людей, которые ранее работали над неудачными предыдущими итерациями проекта.
После первоначального шока от этого упражнения и разочарования в связи с тем, как пошло государственное программное обеспечение / заключение контрактов, я почувствовал себя гораздо лучше, когда у меня были такие навыки, такие маленькие победы?
Редактировать: Под неправильным я не подразумеваю ошибку «один за другим» (то есть я просил 100, а не 99) или какую-то другую невинную ошибку, которую легко исправить. Я имею в виду, что он не работает, либо не будет запускаться / компилироваться / и т. Д., Либо ясно показывал, что проблема просто не была прочитана и понята, также значительная часть отозвала приложение, и никто не отправил какой-то другой код.
источник