ChatGPTやGithub Copilotの普及により、面接で行っているコーディングテスト(コーディング試験)もやり方を考える必要がでてきました。
ただ、あまりその点に言及した記事がなかったため、ひとまず現時点で思いつく対策を挙げてみました。
前提
所属している組織は関係なく、個人の見解です。
開発業務がメインですが、中途/新卒問わず面接官として参加することがあります。
応募者としてはここ数年参加したことがありません。
コーディングテストは事前にお渡しするものと、ライブコーディングどちらも実施したことがあります。
ライブコーディング中はできれば画面を共有していただき、コーディング中の思考をなるべく口に出していただくようにお願いしています。
そもそもAI利用を許可するかしないか
まず大前提として、AIを使わない場合のコーディング能力を測りたいのか、使った場合の測りたいのかを決める必要があります。
現場での使用が許可されていない場合は必然的に前者になりますし、使用できる場合であっても、現状の普及率なら候補者同士の比較をしやすくするために同じ条件でテストをしてもらうのもありだと思います。
AI利用を許可しない場合
ライブコーディングなら手元を見せて貰うだけなので特に変わりません。
事前課題のタイプは、課題と専用のオンラインエディタと課題がセットになったタイプのサービスでは、コピペなどを検知する仕組みもあるらしいのでそういったもので検知できそうです。
AI利用を許可する場合
今までであれば、候補者の開発スタイルを知るために簡単な要件を伝えて1からコードを書いて貰うということでもある程度能力を測ることができました。
ただ、AI使用可能であればプロンプトに要件放り込んで終わり!となってしまうことが多いので、別のアプローチが必要になってきます。
生成されたコードを適切に理解して説明できるのであればそれでよし、というのであればそれはそれでいいと思いますが、難易度は若干下がってしまうと思います。
スクラッチは止めて既存コードの変更にする方法
現時点では数ファイル以上の規模のソースコードを全部AIに読み込ませるのは現実的ではないと思いますので、既存のプロジェクトを用意しておき、その上に機能追加や変更を課題として実施するやり方です。
デメリットとして、ディレクトリの切り方やテストの書き方などが既存のプロジェクトに引きずられるため、候補者自体のスタイルが見えにくくなります。
近いうちにAI側が進化してプロジェクト内の全ソースコードを平気で読み込むようになるかもしれません。
問題解決能力の方にフォーカスする方法
例えばフロントエンドエンジニア志望であれば、webサイトのプロジェクトを渡して遅いのを改善して貰うなどのやり方です。
ボトルネックの特定ならば、Pagespeed、Chrome DevTools、ブラウザ拡張等の使用、ログの確認や追加などいくつもの方法がありますし、
解決方法も同様に、重い処理を単純に早くする以外にも並列処理や圧縮、待ち時間に遊ぶミニゲームまでなんでもありです。
デメリットとしては試験の難易度が高く、候補者が何もできない可能性がでてくること、
自由度が高いので面接する側にも判断をするだけの知識が求められること、
純粋なコーディング能力は見えにくくなる可能性があることなどがあります。
一般的な方法ではない書き方を要求する方法
端的に言えば競技プログラミングやコードゴルフを行ってもらうやり方です。
デメリットとしてはやや実務能力が図りにくくなることと、
近いうちにAI側が進化して対応してくる可能性があることです。
最後に
観測できた範囲だと、最近のエンジニア志望の学生の過半数は分からないことをChatGPTに聞くくらいに一般化しており、また個人的にも今後はGithub copilotが使えない職場には行くつもりがないくらい気に入っているので、コーディングテストでもそれを活用することを前提としたものに適応していくべきだと思います。
参考
株式会社ゆめみサーバサイドコーディング試験模試(2023年度版)の回答例とフィードバック例
本試験でのChatGPTの使用は禁止されているそうですが、実際にChatGPTで回答した場合とその評価を紹介されています。
ChatGPTと競技プログラミングにトライ【Python】【ChatGPT】
ChatGPTを使って競プロの問題を短時間でクリアしています。
HireRooの不正対策に関してに関しての説明
コーディング試験サービスでのコピペやフォーカス外れに対しての対策を紹介されています。
CodilityのChatGPTなどの不正対策機能の告知
allowing customers the option to create tests that are ChatGPT-resistantとのことですが具体的にはどんなことができるのかよく分かりませんでした。