La Vie en Lorse

敗者色の人生

良いコーディング面接と悪いコーディング面接

はじめに

21卒で就活をしているLorseです.10月から就活を始め,来年の1月末には受け終わる予定です.

この記事では,コーディング面接について思ったことを書いていきます.

コーディング面接とは

エンジニア採用の選考フローは

ES → 技術テスト → コーディング面接 → 一般的な面接(複数回) → オファー

という流れが多いです.ほぼすべての会社で技術テストは実施されますが,コーディング面接がある会社は半分ぐらいでした.

技術テストは.応募者の技術に関する知識や実装力などを問います.このテストは試験プラットフォーム上で応募者が自分の好きな時間に受けることができます.なお,技術テストといえば競技プログラミングのような問題しか出てこないと思われがちですが,普通の四択問題なども出ます. (参考:trackの試験 | track(トラック) - エンジニアのプログラミング「学習・試験」プラットフォーム)

一方,コーディング面接では面接官から問題が与えられ,その問題を解くコードをリアルタイムで書いていきます.技術テストの時点で実装力があるかどうかは分かっているので,この面接で問うべきことは,面接官との対話力,問題の細部を見る注意力,そして短時間で解決策を見つける思考力です.以下では,この点を意識して読んでください.(中途採用では更に設計力も求められますが,ポテンシャル採用では求められませんでした)

なお,以下に挙げる問題はフィクションです.

悪いコーディング面接

ある会社のコーディング面接

ソートアルゴリズムを実装しなさい

あなたは解けましたか?

話に戻ると,この問題で問えることはソートアルゴリズムを知っており,それを実装できるかどうかです. 面接官との対話はありませんし,細部を見る必要がないほど問題が単純です.また,ソートアルゴリズムを知っているかどうかで思考力は関係ありません.

さらに,この問題はその人のエンジニア的能力を測れてるでしょうか? 多くの人はソートアルゴリズムを知っていても,実際に実装したことがあるのは半分ぐらいじゃないでしょうか. なぜなら,もはやソートはエンジニアの中では自ら作るものではなく,使う道具になっているからです.エンジニアに求められる能力は自分の持っている道具を適切に使って,目的の処理を達成することじゃないでしょうか.

つまり,この問題は「ハサミをその場で作ってみろ」と言っているわけです.本来ならば「紙をキレイに切ってください.ただし,ハサミなどの用意している道具は自由に使ってもよい」という問題を出すべきです."キレイ"の定義が曖昧ということに注意でき,それを明確にするために面接官と対話をし,そしてどの道具を使えばいいか思考できるか,ということを問うことができます.

その会社が本当に道具を作る能力を要求しているのであれば,わざわざコーディング面接でやる必要はなく,技術テストで出せばいいだけです.

(たしかにソートアルゴリズムぐらい実装経験があるべきですが,ここでこのような形式で問うものではないです.)

良いコーディング面接1

別の会社のコーディング面接

  1. コードが与えられ,このコードの目的を読み取り説明する
  2. 本来の目的が伝えられ,そのコードが持つ不具合を見つけ出す
  3. その不具合を解消するためにコードを修正する

まさにコードレビューと同じプロセスですが,対話力,注意力,思考力を問うことができています.

自分の考えていることを相手にわかりやすく簡潔に説明する能力は業務において実装力とほぼ同等に大事だと思います.その能力を1回の面接で判定できるとても良い問題です.

良いコーディング面接2

さらに別の会社のコーディング面接

商品の在庫を管理するCLIアプリを作成せよ(仕様についての簡単な設計書も与えられる)

仕様の詳細についての対話力,細かな設計に対する注意力,そしてアプリ全体の適切な設計を考える思考力,すべてを総合的に問うことができます. 必要な実装力は低いですが,面接の短時間でこのアプリを作るには技術では補えない経験・能力が必要になるでしょう.

まとめ

問題が違うだけで面接の質が全く異なるように感じませんでしたか?

コーディング面接では単なる実装力ではなく,それ以外の能力を重点的に問うべきだと思います. 今後,そのようなコーディング面接が増えていくことを望みます.