Featured image of post FizzBuzz

FizzBuzz

Что же такое FizzBuzz в конце концов?

Всем привет!

Сегодня я хотел бы написать о “FizzBuzz”.

И те, кто скажет: “А, я знаю это!”, и те, кто подумает: “Вроде слышал, но не совсем понимаю”, пожалуйста, останьтесь со мной ненадолго. Это займет всего пару минут, и, возможно, вы скажете “Ага, понятно”.


Действительно ли “Вы не программист, если не можете написать FizzBuzz”?

В общих чертах, FizzBuzz выглядит вот так.

1
2
3
4
5
6
7
8
9
for i in range(1, 101):
    if i % 15 == 0:
        print("FizzBuzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)

Да, это та самая знаменитая “проблема FizzBuzz”.

Вы перебираете числа от 1 до 100 по порядку,
если число кратно 3, выводите “Fizz”, если кратно 5, выводите “Buzz”,
а если кратно обоим, выводите “FizzBuzz”. Всё очень просто.

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

Но подождите минутку.

Действительно ли можно утверждать, что “не можешь написать FizzBuzz = не умеешь программировать”?


Дело не в том, можете ли вы это сделать, а в том, находитесь ли вы в “состоянии” это сделать

Конечно, для решения FizzBuzz требуется понимание синтаксиса и базовое логическое мышление. Поэтому вполне логично использовать его для “проверки основ”.

Но послушайте.

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

Например,

  • Когда вы нервничаете перед интервьюером, которого видите впервые
  • Когда вам внезапно дают маркер и доску, а под рукой нет редактора кода
  • Когда вы вдруг не можете вспомнить: “Подождите, а как работает оператор остатка от деления (modulo)?”

… Разве такого не бывает? Мы же люди, в конце концов. Я думаю, такое случается.

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


Ловушка популярного совета “Просто тренируйтесь, и всё будет хорошо”

Когда заходит речь об этом, часто звучит совет “Так тренируйтесь каждый день!”.

Действительно, благодаря регулярным тренировкам вы сможете писать код быстро и без запинок, и само по себе это хорошо. Но если исходить из предпосылки “если не можешь написать FizzBuzz, ты профнепригоден”, это может превратиться в обычный страх.

Другими словами, легко попасть в ловушку мышления, где вы чувствуете: “Я ошибся = я ни на что не годен”.

Например, когда вы просыпаете утром, разве вы не склонны думать: “Я такой ленивый…”? Но возможно, ваше тело просто сильно устало.

То же самое и с FizzBuzz.


И всё же, FizzBuzz — это действительно хороший вопрос

Не поймите меня неправильно, в самой задаче FizzBuzz нет ничего плохого.

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

1
2
3
4
5
6
7
for i in range(1, 101):
    output = ""
    if i % 3 == 0:
        output += "Fizz"
    if i % 5 == 0:
        output += "Buzz"
    print(output or i)

Это пример того, как “можно написать без if-elif-else”. Выглядит немного элегантнее, не так ли?

Другими словами, FizzBuzz — это не только про то, “смогли ли вы это сделать”, но и отличная отправная точка для понимания того, “как вы пишете” и “насколько глубоко вы понимаете процесс”.


В заключение

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

Даже если у вас не получилось его написать, это может просто означать, что “именно в этот момент вы были не в форме”, и часто, если вы спокойно подумаете об этом позже, у вас всё получится.

Не торопитесь, давайте двигаться шаг за шагом.

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

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

comments powered by Disqus
Создано при помощи Hugo
Тема Stack, дизайн Jimmy