コーディング問題の難易度とレビューの粒度をどうそろえるか
問題については、Trackが用意している700問以上の問題にほとんど目を通したうえで選んでいるそうだ。難易度は、コーディングテストを実施している他の会社よりも簡単になっている。問題が解けるかどうかではなく、ちゃんとリファクタリングしたコードや、自分はこういうポリシーで書いたというコードをみたいからだ。
「難しい問題だと、どうしても書きかけのコードになりがちで、評価しにくいです。実際に動いたコード同士だと比較しやすいですが、『これはちゃんと動くはずだけど今のところ動いてない部品です』みたいなコードだと判断が難しくなります」
そのために、プログラミング経験者であればイメージがつきやすい簡単な問題を用意している。力技でも書けるし、ちゃんと書くこともできるような問題だ。難しくて手が出ない問題だと応募する気にもならないが、腕に自信があるなら「応募してみようかな」というところを狙っているそうだ。
「解答できるプログラミング言語は、弊社でレビュー可能なものを複数用意しています。学生に人気のあるPythonも入れてあります」
こうして応募された解答は、機械的な採点で足切りをしたあと、複数のエンジニアによるレビューを実施している。面接官同士で、レビューの粒度をそろえるために次図のような工夫をしている。
ゆめみでは、現在サーバーサイドのレビューを16人ほどで実施している。各プログラミング言語で模範解答と観点ごとに項目を分けた評価テンプレートを用意している。さらに必ず2名以上でレビューし、評価が難しい場合は3人目の評価を仰いでいる。
「この解答は面白そうだとか、この書き方はよくないかなといった評価の分かれる解答は、オープンな評価会で検討・共有しています。これは、私たちを含めてかなり勉強になりました」
実践コードレビュー:サンプル問題の内容は
ここでいよいよサンプル問題の解答について具体的なコードレビュー内容を解説した。問題は、サーバーサイドエンジニア応募者向けの模試である。サンプル問題は次の通り。
「対象のプレイログは、肥大化して数千行を超えることがあります。上限は特に書いていないのでメモリのことを考慮する必要があります。プレイヤー総数は1万人を超えません。また、同点の平均スコアのプレイヤーが存在した場合、rankingに同じ数字が割り当てられます。この場合、10名以上のランキングが作られます」
解答したコードは、ギブリーのビジネスサイドでプログラミングを学習しているメンバーが書いたものだという。準備しておいたテストパターンで解答を機械採点すると通過率100%となった。これで次のコードレビューに進むことになる。