評価設計

AIに強いプログラミング面接問題の設計方法

ClarityHire Team(Editorial)15 min read

AIを禁止することはできません。設計で対応することはできます。

2026年、候補者にAIアシスタントの使用を厳禁させることを求めるのは、もはや形式的なものでしかありません。ChatGPTが別のタブで開いている状態で候補者がクリアできる水準は、競合企業が採用の基準として設定している水準と同じです。問題は「AIの使用をどう検出するか」ではありません。その方法は仕事の半分に過ぎず、コーディング面接でのChatGPT検出方法で詳しく説明しています。もう半分は、候補者がLLMを利用できる状態でも崩壊しない問題を設計することです。

このガイドでは後者の半分について説明します。AIが有効な状態でも実際のシグナルを生み出し、AIの支援がご自身が採用したいスキルに直結するようなコーディング面接問題の書き方です。

標準的な問題がもはや機能しない理由

典型的なLeetCode問題には、LLMにとって自明にしてしまう3つの特性があります。

  1. 学習データセットに含まれている。 古典的な二ポインタ法、スライディングウィンドウ、動的計画法のすべての問題は、インターネット上で答えられ、説明され、何度も再説明されています。
  2. 入力が明確に指定されている。 2つの整数配列、ターゲット値、インデックスを返す。モデルは正確に何を出力すべきかを知っています。
  3. 出力がバイナリである。 テストが成功するか失敗するか。候補者が答えを正当化する必要はありません。

この3つの特性をすべて持つ問題は、2026年においては、プログラミングスキルチェックではなく、ChatGPTのスキルチェックです。各特性を削除するほど、問題は外注しにくくなります。

原則1: LLMがまだ見たことのないコードに問題を固定する

学習データセット優位性を排除する最もきれいな方法は、候補者に特定のコードベース内で作業させることです。LLMは凡庸なグラフトラバーサルを書くことができます。しかし、2つのモジュールが見たことのない内部規約を使用している400行のレポジトリを確実に拡張することはできません。

実際にはこのようになります。

  • バグを修正する。 200~400行のレポジトリに非自明なバグがあります。症状は与えられていますが、原因は与えられていません。候補者は読み、仮説を立て、テストし、パッチを当てる必要があります。私たちはLeetcodeなしの面接ガイドでこのフォーマットの概要を説明しています。
  • 機能を拡張する。 機能するアプリに小さく、明確に範囲が定義された機能リクエストがあります。diffの品質が評価対象です。LLMはもっともらしいdiffを生成することができますが、diffが既存の規約に適合し、既存のテストが最初の実行で成功することを保証することはできません。
  • 制約下でのリファクタリング。 「このファイルは600行で読みにくい。動作を変えずに3つのファイルに分割してください。テストは引き続きパスする必要があります。」正しい答えは判断の問題です。暗記する正規解はありません。

これらのフォーマットは、LLMがそのレポジトリを見たことがないため、学習データセット優位性を無効にします。候補者が未知のコードをナビゲートする能力がシグナルになります。

原則2: 意図的に入力を曖昧にする

LLMは、仕様が正確な場合に最も強力です。仕様に人間が気づいて質問するような情報が不足している場合に最も弱いです。

標準的な問題: 「注文のCSVが与えられています。月間売上を計算してください。」

外注しにくいバージョン: 「注文のCSVがあります。月間売上を計算してください。返金である行もあり、負の金額として表現されています。部分返金である行もあり、別のstatus値を使用しています。廃止になった製品ラインの行もあり、実際には出荷されていません。これらのどれを含めるべきか決定し、コードを書く前にあなたの理由を説明してください。」

理由付けのステップが評価対象です。LLMは幸んで標準的なケースを処理するコードを生成し、残りを静かに削除します。真のエンジニアは立ち止まり、曖昧さを列挙し、明確化の質問をします。または、彼らが立てた仮定を文書化します。

候補者の明確化と仮定を、その後のコードとは別に評価してください。明確化リストは実装よりも偽造が難しいです。

原則3: コードの周囲の会話に重点を移す

提出物は答えではなく、サンプルです。LLMは提出物を生成することはできます。候補者だけが、ライブの質疑応答の下で、それを正当化することができます。

この方向に進む2つの方法があります。

  • 非同期その後同期。 最初にテイクホームまたは非同期コーディングラウンドを実行し、次に30分のライブラウンドをスケジュールして、候補者が提出物について説明します。彼らに拡張させたり、制約を変更したり、なぜ1つのデータ構造を別のものよりも選んだのかを議論させたりしてください。私たちはテイクホーム提出物のフォローアップ質問でこのフォーマットを解析しました。
  • 候補者自身のコードでライブペアリング。 面接の途中で要件を1つ変更し、あなたの前でリファクタリングするように求めます。元のLLMソリューションから貼り付けた候補者は、再度プロンプトなしでそれを進化させるのに苦労するでしょう。

ClarityHireでは、ライブラウンドをコード一貫性チェックで計器化しているため、面接官は候補者のコードのどの部分がLLM生成に見えて、どの部分が手書きに見えるかを知った状態で面接に臨みます。その後、会話はそれらの疑わしいセクションを具体的にターゲットにすることができます。

原則4: AIの支援が問題ではなく機能である問題を選ぶ

あなたの求人票に「このロールではAIツールを毎日使用します」と書かれている場合は、候補者が実際にそれらをどのように使用しているかを観察できる問題を設計してください。これは、彼らが答えを貼り付けることを許可するのと同じではありません。

  • 帰属との公開書。 明確に述べてください。「ChatGPTまたはドキュメントを使用してもかまいません。使用したすべてのプロンプトと、ソリューションのどの部分がそれを生成したかを文書化してください。」強い候補者はモデルを外科的に使用します。弱い候補者は同じ壊れた関数に5回プロンプトを入力します。トレースがシグナルです。
  • AIを対戦相手として。 候補者に、AIが生成したバグのある関数を開始点として与えます。彼らの仕事は、何が悪いのか、なぜなのか、そしてそれをどのように修正するのかを特定することです。これは、役割が実際に必要とするスキルをテストします。出荷する前にAI出力を批判的にレビューする能力です。
  • AIを支援するデバッグ。 彼らに本当のバグがある見慣れないレポジトリを渡し、ツール使用を許可し、彼らが原因をどのようにピンポイントするかを見てください。モデルを狭い質問に依存するエンジニア(「このスタックトレースは何ですか?」)は、ファイル全体を貼り付けて祈るエンジニアとはまったく異なります。

私たちはオープンブックコーディング評価でこのフォーマットの全体像を探索しています。

原則5: 予防と検出を組み合わせる。どちらか一方に頼らない

最も適切に設計された問題でも、シグナルを1つの方向にのみ漏らします。上記の設計上の選択肢と受動的な完全性シグナルを組み合わせてください。

それぞれは単独では弱いです。一緒に彼らは不正行為の費用を仕事の費用よりも高くします。

問題を配信する前の短いチェックリスト

2026年に面接官の前に「コーディング問題を出す前に、自分に尋ねてください。

  1. ChatGPTは問題ステートメント単独でこれを解くことができますか?はいの場合、設計を変更するか、ループでのウェイトを減らしてください。
  2. 明確化の質問に報いるという曖昧さはありますか?いいえの場合、曖昧さを追加してください。
  3. 候補者はライブでソリューションを正当化または進化させる必要がありますか?いいえの場合、フォローアップをスケジュールしてください。
  4. 彼らがAIの使用方法を測定していますか、それとも彼らが使用しないふりをしていますか?どちらにせよ、候補者に正直に伝えてください。
  5. 同じ人が提出を作成し、フォローアップを実行したことを確認する完全性シグナルがありますか?いいえの場合、1つ追加してください。

次のステップ

現在のコーディングラウンドが、テイクホームドロップボックスを備えた単一のLeetCodeスタイルの問題である場合、あなたはこの時点で工学をテストしていません。上記のフォーマットの1つを選択し、その中に1つの問題を書き、候補者の前に置く前に3つの内部エンジニアで実行してください。最初のバージョンは簡単すぎるか不明確すぎるでしょう。3番目は実際のシグナルを生み出すものになるでしょう。

ループ内で非同期が適切な場所についての広い文脈については、非同期対ライブ技術面接を参照してください。この同じ問題の検出半分については、コーディング面接でのChatGPT検出方法から開始してください。

ai-resistant interviewsコーディング評価設計chatgpt面接設計

関連記事