春山征吾のWiki - ソフトウェア開発者採用ガイド(春山征吾版)

はじめに


ソフトウェア開発者採用ガイド - Joel Spolsky/青木靖/株式会社翔泳社/Apress:SEShop.com はよい本です. しかし, 残念ながら私が応募した多くの企業の採用担当者はこのガイドを実践していません. また, Joel の言うことに 100% 賛同できない点があります. そこで, 自分なりの「ソフトウェア開発者採用ガイド」を記して, 私が望んでいる採用プロセスを見てもらいたいと思うようになりました.

この文書は著者の気が向いたら更新します. 数日経ったら逆のことを主張しているかもしれません.

著者


春山征吾.

採用側として活動した経験はそれほどはなく, 机上の空論であることを読者は認識してください. この文書に対する批判は自由ですが, この文書を適用した結果の責任は読者にあります.

取り扱う採用プロセスなど


この文書では, これまで企業と強い関わりを持っていない開発者に対する採用のプロセスを取り扱います.

具体的には以下です.
  • 求人の掲載
  • 応募者から取得した情報による選考
  • 面接
  • チームの人間との面談

選考と面接は, 1人の応募に対し1人の採用担当者が責任を持ちます. 採用担当者は応募者を採用したら同じチームで働く技術者でなければなりません.

著者の経験からの制限で, Web系企業を題材とします.

電話やSkypeによる面接は扱いません.

アルバイトや業務委託などで企業の内情を知る立場にいる開発者の採用は扱いません.

全体


合否の通知, 面接の日程の交渉などのすべてをすばやく行ないましょう. 求人を出す前に面接の候補日時を広く確保しておきましょう.

あたり前ですが, この文書の通りにすべてを行なう必要はありません. 会社に合わせて適当に変更しましょう.

求人の掲載

どこに求人を掲載するか?


あまり経験はないのですが, エンジニア目線の求人・転職サイト Forkwell Jobs が良かったです. また, 自社Webページに求人ページを作って Facebook や Twitter で宣伝するのも一定の効果があると感じています.

募集要項の注意点

プログラミング言語や経験

よく募集要項で目にするのが以下のような記載です.
  • PHPを使ったプログラミング経験
  • 3年以上のプログラミング経験

ほとんどの開発において, 言語を限定した経験に意味はありません. また年数とプログラマとしての能力に相関関係はおそらくありません. ですのでこのような記載は間口を無駄に狭めるだけで, 良い人を採用するには邪魔なだけです.

応募者は自分が嫌いな言語を新しい会社でやりたいとは思わないでしょうから, 企業が入社時に想定している仕事での言語や環境があればそれを明示するのがよいでしょう.

たとえば以下のように記述します.
  • 入社後はPHP(Symfony)/MySQLを利用するプロジェクトに関わっていただく予定
想定年収

月収単位での給与の表現では手当や賞与によって大きく年収が変わってしまうので, 想定年収を示します.

応募者に要求する情報

連絡先

メールアドレスとTwitter, GitHubなどのアカウント名を要求しましょう. ただし, メールアドレス以外は必須ではなくてよいでしょう.
ソースコード

求人が想定している地位によりますが, ソースコードを事前に要求したほうがいいでしょう. ハイクラスの求人では必須です. GitHub などのアカウント名を要求するのが簡単です.

ソースコードを要求すると応募が0になってしまうクラスの求人では, コードは要求せず面接時のコードテストで判定するのが合理的です.
その他の情報

以下の情報は, 応募者が任意で送ってよいものとします. ただし, 送られた情報すべてを15分以内にざっと見ることができるよう適切な編集を必須とします. じっくりみたら30分見るのにかかっても, ざっと見るのに10分で済むなら問題ありません.
  • 職務経歴書
  • 自己PR
    • 「私を採用すべきnの理由」(nは1以上)
要求しない情報

応募者の顔写真や住所といった重要な個人情報の取得はほぼ無意味です. 応募詐欺が多数発生するような事態になったら取得する意味もあるでしょうが, 杞憂でしょう. 個人情報は取得すると高い管理コストがかかりますので, 入社決定後に取得しましょう.
情報の伝達方法

住所や顔写真, 電話番号といった個人情報が含まれていない場合は, メールで取得しましょう(私は職務経歴は重大な個人情報と考えていません).

住所や顔写真の取得を社内の事情でやめられない場合は, 自社ドメインのhttpsページを適切に用意して取得しましょう.

応募者から取得した情報による選考


採用担当者が, 応募者1人に対して30分以内で取得した情報に基づいて選考します. 採用担当者が一緒に働くイメージを描ければ面接の通知を, そうでなければ不採用通知を送ります. 情報を受け取った日のうちに応募者に連絡します.

面接

面接の回数


少なくとも採用担当者が1回行ないます. 採用担当者以外にチームに採用担当者としての能力を持っている人間がいれば, その人数分面接の回数を増やしてもよいです.

後述するように, 面接を通過した応募者とチームの何人かとの面談を別途行ないます.

面接の目的


応募者と面接官双方が御互いと一緒に働いてみたら楽しいかを確認するのが目的です.

加えて, 採用担当者は以下を確認しなければなりません.

採用面接ゲリラガイド(version 3.0) - The Joel on Software Translation Project(以下の引用はすべてこの文書から)

OK、私は最も重要な部分をまだ話していなかったね――
誰かを採用すべきかをどうやって知るかということだ。

原理的には単純だ。あなたが探す人というのは

1.頭が良く
2.物事を成し遂げる

以上。これがあなたの探すもののすべてだ

面接官の人数


1対1でやることが望ましいですが, 理由があれば面接官が一度に2名でもよいでしょう. 一度に3名は多すぎます.

人事などの入社後に一緒に働かない者を同席させてはいけません. 面接の目的から外れてしまいます.

たくさんの人の面接を同時にやろうとはしないこと。それはフェアじゃない。
それぞれの面接は、1人の面接者と1人の被面接者が、
閉まるドアとホワイトボードのある部屋でするべきだ。
長い経験から言えることだが、
面接に1時間はかけないと決断を下すことはできないだろう。

面接時間


最低で1時間です.

面接前にすべきこと


面接の日時が確定したら, 面接官の名前とTwitterやGitHubなどのアカウントを応募者に通知します.

面接官は応募者の情報を可能な限り入手し面接に備えます.
前日や当日に応募者のTwitterやBlogを見て, 面接官が対応できる話題があればそれをアイスブレイキングの話題などに利用しましょう.

Twitterのfollowなどは, 面接の情報を外部に漏らす可能性があります. 注意が必要です.

私は候補者に対する先入観を与えるものを避けるように非常に注意を払っている。
誰かがMITのPhDを持っているというだけの理由で、
その人が部屋に入ってくる前から頭がいいだろうと思っていたとしたら、
彼らが一時間の間に何を言おうと、その先入観は覆らない。
候補者がコミュニティカレッジに行っていたのだから頭が良くはないだろうと
思っていたとしたら、彼らが何を言おうとその先入観は覆らない。

採用面接ゲリラガイド にはこうありますが, 私は反対です. 面接官は応募者の応募者は面接官の情報を事前に調べ一緒に働けたら楽しいのではないかという期待を膨らませて面接に臨むのが, 双方が御互いと一緒に働いてみたら楽しいかを確認するのによいと考えます.

面接時の設備


以下が面接に必要です.
  • 閉まるドアとホワイトボードのある部屋
  • インターネットに接続できるPC
    • お互いが確認したいソースコードやサイト, 用語が出た際に利用します.
    • 面接官がメモを取るのにPCを利用しないようにしましょう. 面接でPCを常に利用していると, 応募者に関心を持っていないように受けとられます.
  • ブレストなどのネタ

以下は利用しても構いませんが, 注意が必要です.
  • 応募者の情報を印刷したもの
    • 特に職務経歴のこの部分が面白そうだから確認したいという場合に職務経歴書を利用するのはよいことです. しかし, 面接時に職務経歴書などに長時間目を落とすのは禁忌です. 応募者に関心を持っていないように受けとられます.
    • 住所などの重大な個人情報を受け取っている場合はそのような情報は印刷してはなりません.
  • 紙のメモ
    • 面接官がメモを取りたいのであればPCではなく紙にしましょう. 後で述べるように面接後すぐに合否を決めるので事後にメモを残す必要はなく, 面接中に確認したいことだけを簡潔に記録します. 長時間メモを取るのはやめましょう.

面接の流れ


適当なアイスブレイキングやお互いの自己紹介の後で以下の流れで面接します.
応募者からの質問は常に受け付けます.
  • 仕事の説明
  • 応募者がやった最近のプロジェクトについての質問
  • 御互い共感できるかを確認
  • コードテスト
  • 企業の説明
仕事の説明

想定している仕事について応募者に説明します.
以下の項目などを話せる範囲で話します.
  • プロジェクトの概要
  • 顧客
  • 納期
  • 自社チームの概要とその中で応募者に期待する役割
  • 出席が必要なミーティング
  • 開発環境

応募者に期待する役割は特に明確に伝えます. 面接で「どのように仕事をしたいか」と聞く面接官がいますが, 「どのように仕事をしていただきたいか」を伝えたほうが合理的です. 募集しまた選考を通過させているということは, どのように働いて欲しいかという期待を採用担当者でイメージできているはずです.
応募者がやった最近のプロジェクトについての質問

応募者がやった最近のプロジェクトについて質問をします.

パート2は候補者がやった最近のプロジェクトについての質問だ。
大学生を面接する場合には、卒論があればそれについて、なければ彼らが履修した
授業で本当に楽しんでやった長期のプロジェクトを含むものについて聞けばいい。
たとえば、私はよく「前の期に取った授業で一番好きだったのは何?
コンピュータ関係でなくてもいいよ」と聞く。
業務経験のある候補者を面接するときは、
前の職で最後に割り当てられていた仕事について聞けばいい。

採用面接ゲリラガイドのこの引用から始まる部分を読んで, 応募者が頭が良く物事を成し遂げられるかを確認しましょう.

最後に割り当てられていた仕事にこだわる必要はありませんが, あまり前の仕事について聞くのは避けましょう.

御互い共感できるかを確認

この部分は簡単ではありません.

「応募者がやった最近のプロジェクトについての質問」で技術的なテーマで盛り上がったらその部分を掘り下げて雑談するのがよいでしょう.

そうでなかったら, 例えば TechCrunch Japanの適当な記事を見ながら, 新しい技術やサービスについてブレストするのが面白いと思います.

自社のサービスについて意見を求めるのは避けましょう. 応募者がいかにサービスを事前に学習してきても, より多くの情報を持つ面接官を感心させる意見を出せる可能性は少ないです. また, 応募者としては場合によっては応募している企業のサービスの悪口を言っていると取られたらどうしようと思い, 考えをそのまま話さないかもしれません. 応募者から自社サービスについて意見を出してきた場合は, そのまま継続して議論して構いません. また, 自社のサービスで利用している/利用しようとしている技術について議論するのであれば問題ない場合もあるでしょう.
コードテスト

応募者のスキルに問題がないか確信が持てなければ以下のような簡単なコードテストを行ないます. 2問までにすべきでしょう. 春山が仕事に不可欠と思っている最低限のスキルは, 関数の再帰呼出しです. そして再帰呼出しを扱えるかはコードテストで測ることが可能です.

事前の調査ないし面接で応募者のスキルが問題ないという確信が得られたらコードテストは不要です.
  • 階乗の計算
  • フィボナッチ数の計算
  • atoi(), itoa()
  • ...

コードテストはホワイトボードかPCを利用して行ないます. 紙に清書させてはいけません.

転職支援サービスを利用している応募者は, コードテストの内容を共有している場合があります. 適当に問題を変えるなどして対応しましょう.

パズルに近いコードテストに意味は少ないでしょう. ただし, 応募者との共感を高めるものならば別です.
企業の説明

最後に面接官から企業の説明をします. 応募者に今後も企業に興味や好意を持ってもらうためです. 興味や好意を持ってもらえそうな内容であれば固い説明である必要はありません. 会社が最近リリースしたサービスについて説明してもよいし, 面接官から見て会社で働いていて楽しいことを話してもよいです.
するべきでない質問

面接官から応募者にする質問は, なるべく応募者が「頭が良く物事を成し遂げる」かを計るか, 応募者と共感を深めるためであったほうがよいです.

著者が経験してげんなりした質問をいくつか挙げておきます.
  • 経路探索アルゴリズムについて知っていることを教えてください.
    • 経路探索を用いるフリーソフトウェアを書いている応募者に対してやカーナビの仕事の面接においてこの質問をするならば意味があるでしょうが, そうでない場面で聞く意味はありません. 検索エンジンで検索したりアルゴリズム辞典で調べればすむことです.
  • JavaのAnnotationについて教えてください
    • 言語の特定の機能についての質問は, その人が頭が良く物事を成し遂げるかどうかを計るのに役に立ちません. ただし, 面接官と応募者が御互いにJavaに精通していて共感を深めるのにJavaについて深く掘り下げていくのは問題ありません.
  • (自社サービスについて)どうしたらもっとよくなると多いますか?
    • 理由は前述

面接の終了と結果


面接が終了したら面接官は結果を即時に出します. 一緒に働きたければ合格, そうでなければ不合格です. 面接や面談がすべて終了し, すべてが合格であれば合格, そうでなければ不合格で, その日のうちに結果を伝えます.

同じポジションへの応募者が他にもいてそちらの面接や面談が終了しておらず確定できない場合には, その旨を応募者に伝えます. 確定後再度連絡します.

チームの人間との面談


入社してから一緒に働く人と初めて会うよりも先に会っておいたほうがよいので, チームの面接官ではない人間と応募者との面談を行ないます. 面接と同じ日にやってもよいし違う日にやっても構いません.

チームの人数が5人以下ならばその全員と, それ以上ならば5人程度を選抜して行ないます.

形式


形式は自由で1対1でも, 多対1でもよいでしょう. 食事をしながらなどでも構いません.

内容


応募者と雑談をすればよいです. 面談者と応募者が一緒に働いたら楽しいかを探ります.

時間


全体で1時間半程度. 1対1でやるならば1人15〜20分となります.

結果


面談者は面談終了と同時に結果を出します. 1人か2人以上不合格とした人がいたら応募者は不合格, そうでなければ合格です(閾値を先に決めておくか, 最終決定は採用担当者がすると決めておきましょう). 結果はその日のうちに連絡します.

同じポジションへの応募者が他にもいてそちらの面接や面談が終了しておらず確定できない場合には, その旨を応募者に伝えます. 確定後再度連絡します.