FizzBuzzをエンジニアの採用試験で出題したら半数が問題文を理解できなかったので公開します

スタッフブログ

皆様どうも、こんにちは!
こまりの情報システム責任者の桑木です。

表題の通りではありますが、この1年間ほどソフトウェアエンジニア(≒プログラマ)やマークアップエンジニア(Webコーダー)の採用試験で、いわゆるFizzBuzz問題をアレンジした課題を受験者に出題したところ、なんと半分くらいの受験者が解決に至りませんでした。しかもその理由が、単純に技量が未熟だということではなさそうなのです。

この記事では、課題の詳細と顛末などを書いていきます。

課題の実施

とりあえず、試験の時に受験者に出題した課題の内容です。

FizzBuzz(別紙参照)の解答が1番目から100番目まで記載されたテキストファイルを用意し、FizzBuzzチェッカーに読み込ませた結果が全て OK になることを目指せ。

 詳細は以下の通りである。

  • 試験は弊社が用意したリモートデスクトップ環境で行うこと

  • システム設定など自由に変更してよい

  • 必要なアプリケーション等は自由にインストールしてよい

  • ウェブの閲覧や検索なども自由にしてよい

  • FizzBuzzチェッカーは次のものを使用すること
    https://komari.co.jp/fizzbuzz/

  • 用意するテキストファイルの仕様は以下の通りである

    • 解答は半角英数とする
    • 英字の大文字小文字は区別する
    • "FizzBuzz"は間にスペースが入ってもよい
    • 解答の区切りは改行とする
    • 文字コードはUTF8やShift-JISなどASCII系の一般的な文字コードとする
  • 試験は1時間とする

  • この試験は問題解決能力を評価するためのものである。時間内にFizzBuzzチェッカーの結果が全て OK にならなくてもよいので、各自の長所をいかして自分なりに課題に取り組むこと

受験者には上の文書(課題文書)を印刷したものと、WikipediaのFizz Buzzを小見出し「FizzBuzz問題」の第1段落まで印刷したもの、合計2枚のプリントを渡して読んでもらいます。

課題の把握が完了したことを口頭で確認したら試験を開始します。

この課題文に出てくる「別紙」とはWikipediaを印刷したプリントのことです。WikipediaのページにはFizzBuzz問題のプログラム例が載ってしまっているので、その直前まで印刷してあります。

使用するコンピュータの環境は、クラウド上に新規インストールしたWindows Server 2019に管理者アカウントでリモートデスクトップ接続したものです。Chromeだけはこちらでインストールしてあります。

想定した解き方

1
2
Fizz
4
Buzz
...

という内容のテキストファイルを用意すれば良いだけなので、いくらでも方法は考えられます。しかしこれには、結果のデータを生成する方法と、それをファイルに保存する方法の2つを考える必要があります。

メモ帳で手打ちした場合は普通そのまま保存しますが、表計算ソフトやプログラムで結果を生成した場合、それらのソフトから直接ファイルとして出力するとか、出力結果をテキストエディタにコピペして保存するなどの方法が考えられます。

ソフトウェアエンジニアを新卒で採りたかった

そもそも試験でこの課題を始めたきっかけは新卒の採用試験でした。話せば長くなるので細かい経緯は割愛しますが、プログラミングそのものが未経験でもそれなりに能力を評価できる方法を考案する必要がありました。

プログラミング経験者向けの試験であれば、それこそFizzBuzz問題のように簡単なロジックを実際にプログラミングしてもらう課題が考えられます。これは文字通りの未経験者――プログラミング言語の知識がない者には不可能な課題ですが、逆にプログラミング言語の知識があればまず可能でしょう。

しかし考えてみると、プログラミング言語の仕様自体は比較的短期間で習得可能です。もちろんどんな人でも、というわけには行きません。何らかの素質は必要です。

素質があれば自力で技術書を読んで習得することも可能でしょう。逆に素質がないと、プログラミングの授業を何年か受けた結果、課題に対してそれっぽいアプローチはできるようになっても本質的に理解していないために上手くいったりいかなかったりする、ということになりかねません。

ということは、採用試験ではその素質とやらを見極めれば良いということになります。

ソフトウェアエンジニアに暗記力は不要です

課題では自由にウェブを閲覧できるようにしました。というのも、プロのソフトウェアエンジニアであっても頻繁にウェブなどで調べているからです。

現代のソフトウェア開発でマニュアルなど何らかのドキュメントを参照せずにプログラミングすることは稀です。言語の最低限の仕様はさすがに覚える必要がありますが、頻繁に使わない機能などはその都度調べても問題ないことが多いです。むしろ、戻り値の正確な仕様などを曖昧な記憶力に頼ってプログラミングする方が危険だといえます。

少しでも曖昧な部分があればその都度調べれば良いんです。何度も調べていればそのうち自然と覚えます。

とはいえ、ウェブを検索しても書いてあることが理解できないのは困るので、採用試験ではあえて技術的な用語を使用することで、わざと調べさせて理解力を見るのもよさそうです。「テキストファイル」や「文字コード」など、簡単なものから専門的なものまでいくつか仕込んでみました。

自力で解決できる能力

FizzBuzz問題自体はプログラミングができれば、そんなに難しい問題ではありません。FizzBuzzを解くために必要なプログラミング言語の知識も非常に限定的です。極端な話1週間くらいあれば、プログラミング未経験者であってもウェブ上の情報で自主学習して解くことは可能であると思います。

しかし、現実の試験でそんなに待つわけにはいかないので、まずプログラミングしなくても解けるようにFizzBuzzの結果をテキストファイルで用意すれば良いようにアレンジしました。つまりテキストエディタで手打ちしても良いことにしました。

とはいえ、可能な限り自由な方法で解いてもらいたいので、「これこれな内容のテキストファイルを作成してアレコレせよ」というような指示的な課題文にならないよう、間接的にすべきことを伝える文にしました。

また、OfficeやVisual Studioなどをインストールしていないクリーンな環境を用意しました。これも自由な方法で解いてもらいたいというのと、エンジニア志望ならさすがに必要なソフトをダウンロードしてインストールするくらいできるだろう、という理由です。

その結果どうなったか

そういったいくつかの要素と、採用試験にふさわしい体裁と威厳らしさを盛り込んだ結果が前述の課題文になります。厳密には途中で一度修正したものですが。この課題をエンジニア職の採用面接で1年間ほど実施しました。最初はソフトウェアエンジニアの試験に使うつもりで用意した課題でしたが、プログラミング経験不要の課題なのでマークアップエンジニアなどの試験にも使用しました。

結果として課題を解決できた受験者は全体の約半数でした。解決できた受験者のほとんどは、ほぼ迷うことなく解決していました。試行錯誤した結果、諦めて手入力で解決した受験者もいましたが。

実施する前の想定としては、プログラミングや表計算ソフトであれこれ試行錯誤した結果、時間切れで解決に至らない惜しいパターンもあるだろうな、と思っていましたが、このパターンは1人もいませんでした。

解決できなかった受験者によく見られる行動として、

  • まずGoogleで「FizzBuzz」と検索して検索結果上位のページ(FizzBuzz問題やってみた系の記事)をいくつか眺める
  • FizzBuzzやってみた系のページから、ソースコードをメモ帳にコピペしてFizzBuzzチェッカーに読み込ませる
  • そういったページに表示されている実行結果はスルー
  • 開始からしばらく経つまでFizzBuzzチェッカーのURLを開かない
    などがあげられます。

そう、解決できなかった受験者は、そもそも課題文を理解していなかったのです。あまりにも課題文が悪文過ぎたかと思って、わかりにくい箇所を一度修正したのですが状況は全く同じでした。これはつまり「教科書が読めない子どもたち」と同じ問題だと気付かされました。結局は日本語の読解力だったのです。

今後の課題

この試験方法が適切だったかどうかは、正直なところまだわかりません。ただ少なくともあまりにもあんまりな受験者を判別することはできたと思います。

それとFizzBuzz問題をベースにしたことはある種の賭けでした。バズったのが2007年とはいえ受験者に知られている可能性は大いにありました。まぁ、結果的に誰も知らなかったんですが、このことは逆説的に言えば、FizzBuzz問題を知っている時点で色々自力で調べられるエンジニアだ、と言えなくもありません。

さて、試験で使用する課題はこの1年を機に似たような別の課題に変更することにしました。この記事を公開するためです。この記事は、弊社の求人にエントリーする前に見てほしいなぁ、と思いながら書きました。FizzBuzzチェッカーには課題文中のURLから実際にアクセス可能なので興味のある方はやってみてください。