ホワイトボードコーディングを支える技術

ホワイトボードコーディングとは ?

プログラマとして就職活動や転職活動をしていると頻繁に課される選考試験の 1 つです. その名前のとおり, ひととおり面接を終えたあと, ホワイトボードに得意なプログラミング言語でコード, あるいは, 擬似コードを記述する試験です. (個人的な見解として) GAFA レベルでもない限り, 課される問題自体はそれほど難しいものではありません. しかし, 意外と (特に, 初めての場合) できないものです … 原因は以下のどれかに該当するのではないでしょうか ?

  • 選考試験という空気や緊張感
  • ホワイトボードという普段慣れないツールでコーディング
  • デバッグをしつつ進めることができない

対照的に, 事前にコーディング試験をする場合もあります. こちらは, 普段使い慣れたツールで, 自宅など好きな場所で回答していいので, いつもどおりコーディングすれば実力は発揮できるはずです.

普段慣れない環境, ツールだととたんにできなくなるのはプログラマだけではありません. ピアニストだってそうだと思います. 椅子がなければ, とたんに弾けなくなるものです (少なくともわたしは … w)

問題例

  • Fizz Buzz
    • テストコードまで求められるケースもある
  • アルゴリズムやデータ構造
    • 二分探索法など典型的なアルゴリズムもあれば, 考えることを要するアルゴリズムもある
    • 単に実装するだけではなく, 時間計算量や空間計算量の少ないアルゴリズムの実装が求められる
  • ループを使わずに, 繰り返し処理をする (再帰の実装)
  • API からサンプルデータを取得して描画する … ような実践的なコーディング

わたしがこれまでに見たり, 聞いたりしたなかでは上記の例があげられます. と言っても, これがすべてではないので, ピンポイントで事前に準備するのはほぼ不可能と言えます.

なにを評価するのか ?

はっきり言ってこれが大事ですよね. 個人的な見解ですが, 完璧にコーディングできるかどうかは評価していないと思います. 評価していると感じたのは以下の 2 点です. 簡単に表現すれば, 実装とコミュニケーションです.

  • 最低限のプログラミング力
    • 仕様の把握
    • アルゴリズム・データ構造を考える
    • 上記 2 点を踏まえたうえで, ある程度実装できるか
  • 面接官 (= チームのメンバー) とのコミュニケーション
    • ヒントを与えられたら, コードを追加することができる
    • 質問されたら, 回答 or コードを修正できる
    • コードをあまり書けなくても, 実装しようとしたことを伝えられるか

実装

まず, 課題に対する最低限の実装ができなくてはなりません. なぜなら, これができないと, 面接官もヒントを与えたり, 質問もできないからです. とは言え, いきなりのホワイトボードコーディングだと頭が真っ白になって, 普段なら簡単に実装できるアルゴリズムもできない … ことがあると思います. したがって, 大事なのは, 簡単なところからでもいいので, 実装できるところからホワイトボードに書きましょう. また, 実装できるところから書いているうちにしだいに落ち着いてもきます. 落ち着いたところで, 考えてみてもいいですし, 実装できるところを全部書いてからでもいいでしょう. あるいは, 複雑なアルゴリズムは, 関数 (メソッド) としてブラックボックス化して整理するのもいいかもしれません.

おそらく, 受験のときに解ける問題から解きなさいと言われた経験がある人も多いと思いますが, それは, コーディング試験でも同じです.

コミュニケーション

面接官は, チームのメンバーだと思ってください. 最低限のコードが書けたなら, メンバーはヒントを与えることが可能ですし, かなりの実装ができたなら, 質問をなげかけてよりよいコードになるように助けてくれるはずです. メンバーからのヒントや質問に対する回答をコードなり, 言葉なりで必ず返しましょう. また, ほとんどコーディングができなかった場合でも, ファイナルアタックと思って, 最低限, こういうアルゴリズムを考えて, こういう実装をしたかったと伝えましょう. ホワイトボードコーディングの評価をどの程度重視するかはわかりません. もしかしたら, あまり重視していない, あるいは, 重視はしているけど, コミュニケーションを重視している可能性もあります.

準備

準備というのは何事においても大事ですが, ホワイトボードコーディングに関しては特別準備する必要はないと思います. 基本情報技術者レベルのアルゴリズムとデータ構造に関する理解, そして, それを実装できる得意なプログラミング言語があれば準備完了です.

参考までに, ざっと思いついたアルゴリズムとデータ構造を列挙してみました.

アルゴリズム

  • 探索アルゴリズム
    • 線形探索
    • 二分探索
  • 整列アルゴリズム
    • バブルソート, 選択ソート, 挿入ソート
    • シェルソート
    • クイックソート
    • マージソート
    • ヒープソート

データ構造

  • 配列
  • リスト
  • スタック・キュー
    • 二分探索木
    • ヒープ
    • B 木

おわりに

ホワイトボードコーディングを豊富に経験している方からすると, わたしの見解はかなりずれている可能性が高いです. あくまで, 1 つの見解としてとらえて, なにより, コーディングですから, 緊張せず, その場を楽しむぐらいの余裕をもって臨むことが重要だと思います.

まとめると, とてもあたりまえのことを評価しているだけなのですが, ホワイトボードの前になると思考停止になってしまう可能性が高いので, 完璧に実装する必要はないことだけでも知っておくと, 少しは落ち着けるかと思います.

Share Comments
comments powered by Disqus