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」と表示するという、非常にシンプルなものです。

なのに、なぜか「プログラマーとして最低限の試験」みたいな扱いをされることが多いです。面接でも出されますし、SNSでは「FizzBuzzも書けないやつが…」的なマウントもチラホラ。

でも、ちょっと待ってください。

本当に「FizzBuzzが書けなかった=プログラミングできない」と言い切れるんでしょうか?


できるか、じゃなくて、できる“状態”があるか

たしかにFizzBuzzは、構文の理解や基本的な論理思考が求められます。だから「基礎の確認」に使われることも納得です。

でも、ですよ。

環境が違えば、結果も違います。

たとえば、

  • 初対面の面接官の前で緊張しているとき
  • 急にホワイトボードを渡されて、手元にエディタがないとき
  • 「あれ、moduloって何だっけ?」って急に出てこないとき

…そういうの、ありませんか? 人間ですからね。あると思います。

だから、「FizzBuzzを書けるかどうか」っていうよりも、「FizzBuzzを書ける状態に自分を持っていけるかどうか」のほうが、実は大事なんじゃないかなと思うんです。


よくある「訓練すればOK」というアドバイスの落とし穴

この話になると、「だから毎日練習しろ!」ってアドバイス、出てきがちです。

たしかに、反復練習でスラスラ書けるようになるのは事実ですし、それ自体は良いことです。でも、「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 で構築されています。
テーマ StackJimmy によって設計されています。