技術者の採用面接法

技術職を募集する際の面接法を扱った解説は数多くあるが、この種の面接で最も肝心な点は、おそらくは、応募者が持つ技術の評価だろう。ここでは、より確実に評価するための一法を紹介する。

応募者の技術を評価する際、筆者らが勧めているのは、応募者に初見の問題を課して自己学習能力を見る方法である。類似のものを含めて扱ったことのない問題であればなおよい。必要な資料とコンピュータを提供し、応募者が問題にどう取り組むかを見る。着実に解に近づいていたら、採用への評価はプラスである。

自己学習能力

自己学習能力の重要性は、GNU/Linuxコミュニティではよく知られている。Eric Raymondは、「How to Become a Hacker」の中で、自己学習能力はハッカーの基本的資質だと述べている。「問題こそ我が師」がハッカー流。問題への対処の仕方を教えてくれる師はいない。我々の生業では、その性質上、高度な自己充足性が必須なのである。

この点について、電子工学を教えるTony Kuphaldtは、次のようにわかりやすく説明している。

「基礎」をしっかり身につけたとしても、自己学習能力のない人は、変化の激しい職業についていくことはできません。仕事を続けたければ、自分の知らないことを教えてくれる人に常に側にいてもらわなければならないでしょう。逆に、知識はなくても自己学習能力のある人は、たとえどのような職業に就いても、指導してくれる人がいようといまいと必要な知識を自ら学ぶことができます。ですから、独力で学ぶ力は、特定の分野の知識を身につけることよりも遥かに大切なことなのです。

従来の面接では、技術的な質問により応募者が自己申告した知識の有無を確認してきた。質問は専門的資格や技術的な常識あるいは既存のコードなどに関して行う。しかし、この方法には大きな弱点がある。検証されるべき知識の範囲を決めるのが主として応募者側になるからだ。しようと思えば、一夜漬けで山をかけることもできるのである。

これを避けるには、応募者の自己学習能力を測るような課題を出すとよい。その場でプログラムを書かせるのである。ただし、その課題について応募者がどの程度知っているかをあらかじめ確認しておく必要がある。

たとえば、作業領域を使わずに文字列を反転するCコードを書かせる。応募者は、この種の問題に対する経験の程度に応じて、次のように3つの反応を示すだろう。

  1. 熟練者の場合は、ほどなく正しい解にたどり着き、試行錯誤はほとんどないだろう。
  2. この種の問題にある程度の経験がある場合は、応募者の行動は予測困難。したがって、どの程度面接に役立つかはわからない。
  3. この種の問題に経験がない場合は、応募者の持つ未知の分野を切り開く能力を測ることができる。応募者は該当領域の熟練者に相談できない状況に置かれ、自己学習能力が試されることになる。

したがって、面接する者は、従来型の質問で明らかになった情報を使ってプログラミング課題を注意深く選定する必要がある。応募者としては持てる力をすべて使って課題を解きたいが、そうすることによって己の無知を晒すことにもなる。このせめぎ合いがあるために応募者は率直にならざるを得ないのである。

課題としては、このような簡単な文字列処理に関するものでも構わないが、応募者によっては不発に終わることもある。作業領域を使わない文字列反転課題で応募者の自己学習能力が明らかになることもあるが、単に文字列の扱い方を知っている熟練Cプログラマーであることしかわからないこともあるのである。

課題が決まったら、自己学習能力を評価するという意図を説明した上で応募者に課題を提示する。その際、必要なものが揃っていることを確かめておくこと。リファレンス・ブックやハードウェアに不備があれば、細心にプログラミング課題を選んだ苦労が水の泡になってしまうだろう。

課題に取り組む様子を長く観察するほど、それだけ正確に評価することができる。したがって課題は時間のかかる方が好ましいが、大きな課題を最後まで取り組ませて応募者を1時間も拘束することができるとは限らない。その場合は早めに切り上げる。ある程度の進捗があれば――あるいは進捗していなければ――評価は十分可能である。

面接する者が助言すれば、応募者は実力以上の成績をあげるだろう。しかし、自己学習能力の評価は、そもそも、その人が独力で処理できる能力を測っているのだという点を忘れてはならない。面接者は自制し、質問されたら答えを与えるのではなく励ますこと。応募者の観察に徹すべし。

また、応募者に不適切な圧力をかけてはならない。課題の結果が人選に影響すると知っただけで、応募者の問題解決能力は萎縮してしまうだろう( Punished by Rewards )。できるだけ応募者をリラックスさせること。

課題例

名高い模擬最終試験のひそみに倣い、応募者の自己学習能力を測る課題をいくつか挙げておこう。いずれも、実際に現場に入ったときに自分一人で対処できるかどうかを見るための課題である。

Javaの熟練プログラマーで、ファット・クライアント・アプリケーションの経験が豊富な場合

  • 次の各機能を持つEclipseプラグインを書け
    1)指定されたリソースを既存の、または新規に作ったzipファイルに追加する
    2)指定されたJarに含まれているすべてのサーブレットを一覧表にする
  • 特定の見出しを持ったメールを特定の電子メール・アドレスから受信したとき、次の動作をするApache JamesのMailetを書け
    1)添付ファイルを取り出して保存する
    2)データベースのある列を更新する

たとえばPerl 6について経験が全くないプログラマーに対しては、Perl 6用のインデント・アルゴリズムを書く課題。

おわりに

この方法で面接を実施するには時間と労力と工夫が必要だが、自己学習能力課題からは問題解決の過程という有用な情報が得られる。そこから、問題分析の質と深さ、図、応募者が想定したユース・ケースなどを評価することができる。

今日の学校教育で自学自習の姿勢が重視されていないとすれば、その原因の一つは産業界がそうした能力を求めていないからかもしれない。しかし、ハッカーたちは自己学習能力に優れている。そうした彼らを採用すれば、ほとんどの企業にとって好ましい効果があるはずである。面接では、特定のスキルを持っていることだけでなく、自己学習能力を備えていることも確認すべきである。

おまけ――応募対策

逆の立場にいる応募者は、いかに対処すべきだろうか。一般に、何が起ころうとも、できる限り最善の方法で早急に対処する必要がある。それでは、自己学習能力課題への対策はあるだろうか。

自己学習能力を学習することはできない――生得的にある人とない人がいる――と考えているとすれば、それは誤解である。実際、自己学習能力を重視し、学生の自学自習能力を育てている教師もいる。

筆者らはコンピュータ科学の分野で自己学習能力の育成に優れた教師の名を挙げることはできないが、前述したように、肝心なのは分野ではなく姿勢である。電気・電子工学分野では、教授Tony Kuphaldtというすばらしい実例がある。自己学習能力を育てるように綿密に編集されたカリキュラムSocratic Electronicsを見てほしい。

自己学習能力は今日のエキセントリックな知的流行であるばかりでなく、教育の意味と方法の到達点でもある。それはGeorge PolyaやMaria Montessoriにまで遡ることができ、これからも教師たちが繰り返し問い返すであろうテーマである。

Joshua N. Pritikinはソフトウェア・エンジニアとして、ニューヨーク市付近の複数の金融関係企業で8年間勤務した。現在は、大学院の設立を準備中。Sriram Narayananは、ThoughtWorks in Bangaloreでアプリケーション・デベロッパーとして勤務している。