FizzBuzz тест

Сегодня я впервые написал FizzBuzz тест.

Узнал я про него из ежегодного опроса stackoverflow. Они интересовались прямо: «Have you ever been asked to solve FizzBuzz in an interview?». Пройдя по вполне рабочей ссылке, я оказался на странице, которая поясняла, что Fizz-Buzz тест – это тест, который мгновенно отфильтровывает 99.5% слабых кандидатов на работу программиста.

Напишите программу, которая выводит на экран числа от 1 до 100. Для множителей 3 выведите на экран Fizz вместо числа, а для множителей 5 – Buzz. Для чисел являющихся множителями одновременно и 3, и 5 выведите на экран FizzBuzz.

Серьзно? 99.5%?

Крайне удивленный, я создал файл kappa.py и накидал код, который выполнял задание полностью. На страничке code golf залил его и получил результат – успешно, 253 символа, время выполнения 0.023026 секунды.

Далее я решил прочесть объяснение что же не так с этим тестом (spoilers ahead).

Оказалось все довольно просто:
  • При выполнении этого теста кандидатам приходиться делать то, на что у них нет механической копипасты с лекций и семинаров.
  • Эту задачу нельзя линейно запрограммировать по ходу задания – если человек просто идет по тексту и пишет if-else условия по пути, то под конец он оказывается в ловушке деления и на 3, и на 5.
Как же это показательно – получается, что системы образования учат человека чему-то, что они называют “программированием”, а на выходе получают тех, кто не может даже простенький цикл с условиями написать. Потом такие ребята с красивыми дипломчиками приходят устраиваться на работу в сфере, где тебе просто нужно писать код, а они-то не могут! И HR недоумевает что же это такое, и менеджеры, а программисты просто смотрят на это в печали.

P.S. Довольно интересно смотреть на разные другие решения этого теста. Меня, например, поразило в одном из примеров использование символа перевода каретки для решения.
#include <iostream>
int main()
{
  for(int i = 1; i <= 100; ++i)
  {
    std::cout << i << '\r'; // return to beginning of line for overwriting with "Fizz" or "Buzz"
    if(i % 3 == 0) std::cout << "Fizz";
    if(i % 5 == 0) std::cout << "Buzz";
    std::cout << '\n';
  }
  return 0;
}

Комментарии

Популярные сообщения из этого блога

Школа 21, Бассейн, первый экзамен, четвертый день и Састантуа

Школа 21, Бассейн, день первый

Школа 21, до Бассейна, день первый