1から順に数を印刷、ただし3で割り切れる場合は"Fizz"を、5で割り切れるならば"Buzz"を、3と5で割り切れるならば"FizzBuzz"を出力するプログラムを作成する「FizzBuzz」問題。プログラマーの適正を簡単に判別するためのテストとして知られています。
ところが最近は、FizzBuzz問題の知名度が上昇し、暗記したコードをそのまま使って問題を解くプログラマー志望者も現れ、問題の有効性が薄れてきている様子。
そこで、開発者兼起業家のDavid Elbe氏は、FizzBuzzテストの代わりとなる5つの代替テストを提案しています。
その問題は以下の通りです。
1.アナグラム
2つの引数を取り、引数がアナグラム(どちらも全く同じ文字を含んでいる)ならばtrueを、そうでないならばfalseを返す関数をかけ。
アナグラムとは、全く同じ文字の組み合わせからなる異なる単語のこと。アナグラムの意味を知っているかどうかが重要ではなく、問題をどのような手順で解くのかが重要です。
例えば最初に文字列の長さをチェックし、そのあとでアルファベットでソートする…、あるいは配列を用意して比較するなど、プログラマが問題を解けるか、解けるとしたらどれくらいスマートに解けるかを知るための問題です。
2.税金計算
金額(ドル)と、税率を引数にとり、答えの金額をセントとして配列で返せ。
基本的な数学の力を知ることができます。プログラミングは数学とは無関係ではありません。
3.バグフィックス
以下のコードに含まれるの3つのバグを指摘せよ。
def fix_spelling(name)
if(name = 'twittr')
name = 'twitter'
else
fix_spelling(name)
end
return 'name'
end
Rubyのメソッドです。コードに潜む怪しい匂いを嗅ぎつけることができるかどうかで、プログラミングの経験を確認することができます。
答えは、"=="のかわりに"="が使われている。常に'name'がreturnされている、潜在的な無限再帰の可能性。
4. ボックスサイズ
単位がセンチメートルの3つの引数をとり、体積を計算しリットルとして返す関数をかけ。
メートル法に慣れていないアメリカ人の知識を確認するという意図があるようです。もとからメートル法の日本人ならば楽勝かも?
5. 最悪のFizz Buzz
最悪の - しかし動作する - FizzBuzzプログラムをかけ。
志願者をリラックスさせ和ませるための問題です。プログラマの創造性を知ることが出来るかもしれません。
結論
David Elbe氏は、開発者を雇用する際、これらの問題を解けた開発者に対し面接を行うことで、時間と労力を大幅に節約しているそうです。
フィルタリングのための問題はどうあるべきか、Hacker Newsでも議論が交わされています。気になる方は確認してみてください。