見出し画像

累計100名以上のエンジニアを採用してきた人事が徹底解説!実力を見極められる人事へ ~プログラミングテスト内製化の手法~

お久しぶりです。ポペヌです。

先日都立入試があり参考書読みながら電車乗っている学生を見て、推薦入試の日にいつも通り中学校に登校してほとんど人がいない教室を見て「インフルエンザで学級閉鎖だ~~~!」と喜んだ時代が懐かしいです。

そんな今回は新卒や若手エンジニア採用で人事の方が悩む「技術力の見極め方」についてお伝えしたいと思います。

よく人事さんから「新卒や若手エンジニアを書類だけで判断するのが難しい」という声をお聞きします。

確かに新卒は成果物がないことは珍しくないですし、若手エンジニアも業務で一部分のコーディングだけをしており、職務経歴書などでは伝えるのが難しいことが多いと思います。

そこでエンジニアの実力を知るための手法としてお勧めしたいのがプログラミングテストということです。テストで実力が分かれば面接後に現場面接官から「なんでこんな人通したの?」ということを言われることが少なくなると思いますし、テスト合格だったんで通しました!と言えるようになるので、精神的にも落ち着けます。

プログラミングテストについては総合職採用でのSPIなどと違い、エンジニア就職の人気企業では実施している会社が増えてきましたね。ただ、まだまだ普及率が高いとは言えません。今回は、そのプログラミングテストをメインに扱い、エンジニアの技術力の見極め方について、気になっている会社さんの参考になれば嬉しいです。


こんな方に読んでほしい

新卒や若手エンジニアの実力を計りたい人事さん
自社独自のテストを構築したい人事さん
テストを作ってと頼まれたエンジニアさん
テストの傾向を知りたい学生エンジニアさん


1.プログラミングテストの必要性

中途採用であれば経験が豊富にあり経験談からある程度実力を測ることは可能だと思います。ですが、新卒採用や若手採用ですとお話だけで実力を測るのはなかなか難しいのが実情です。難しい理由は2つあり、

・採用担当が話されても理解できない
・新卒や若手のキャリアチェンジで豊富な開発経験を持つ方が少ない

上の理由は言わずもがなエンジニア採用の最大の問題です。どの会社の人事さんと話してもエンジニアと話すのが億劫と言うので、こういう会社ではプログラミングテストを導入することで事前に実力が分かるようになります。

下の問題は新卒や若手のエンジニアの採用に携わっている方であれば理解いただけると思います。例えば新卒エンジニアの分類は下記のような状態だと考えています。



変態:1割

変態という言い方は失礼ですが個人的にすごくリスペクトしている方達です。特徴としてはプログラミングが好きで好きでしょうがなくて、技術力が非常に高い傾向があります。気を付けないといけない点としては、特定の方向にのみ技術力や知識が偏っているケースがあります。

意識高い系:2割

次に意識高い系の方達ですが、長期インターンやハッカソンに積極的に参加したりと自分に必要のある技術や経験を意識して取得されている方です。しっかりとした開発実績を持ち技術力が高い方が多い印象です。どこの企業でも受かる引っ張りだこの人気者達ですね。

授業だけ系:6割

名付け方は失礼かと思いますが、この分類の方達が一番実力を測るのが難しいです。
「IT企業は伸びるから」や「エンジニアは稼げるらしい」ということを考え情報系に進学したが、ただ授業で単位を取得することだけしかせず、行動を起こさなかった分類です。
お話だけでは実力を判断することが難しいです。

諦めた系:1割

授業などでプログラミングを勉強し、自分には合っていないと考えエンジニアを諦めた方達です。この方達が受けてくることはないと思いますので詳細は割愛をします。

ざっくりとこの4つの分類に学生を分けることができ、平均値の上下はある気がしますが技術力は学歴に比例するとは言い難いため、書類だけで判断が難しいので、プログラミングテストで技術力を測る必要が出てくるということです。


2.プログラミングテストの内容

次にプログラミングテストの内容ですが、基本的にはサーバサイド側の試験が多い気がします。理由としてはフロント側であればポートフォリオを見せることで実力判定はクリアになるので、実施する意味がないということだと思います。

さて、本題のテスト内容ですが、主に下記のような主題傾向に分かれていることが多そうです。

テストの出題傾向

作成してね系
穴埋め系
テストケース作成
間違いはどこ系

今回は有名なナベアツテストを題材に分類事の出題傾向を作成してみました。
※今回は僕が好きだからJavaで作成しています。


ナベアツテストとは?
3の倍数と3のつく数字をアホになる芸です。

引用:吉本興業株式会社

ナベアツさんを調べていたら落語家になって桂三度さんに改名されており、まさかのキャリア論を語られていましたので、興味がある方は読んでみてください(笑)

テストの内容としては、1~100までの数値を順番に出力して、3の倍数または3が付く場合に検出させるプログラムを作成するテストです。

作成してね系

問題を掲示し、時間内に作成をして提出してください!というスタイルです。

提出方法はファイルで提出させる会社さんもあれば、ワードやメモなどにベタ打ちで提出させる会社さんもある印象です。

作成してね系のナベアツ例

1から100までの整数を順番に出力します。数値が3の倍数または3が付く(例: 13,27,35)場合には、数値の前後に"*"の文字を付けます(例: *13*, *27*, *35*)。
数値が3の倍数または3が付く場合に true、それ以外の場合はfalseを返す関数のコードを作成してください。

問題を出すだけなので出題すること事態は簡単なので始めやすいのですが、ナベアツテスト以上に問題を複雑にさせていくと人事側で採点が難しくなるので、現場社員との役割分担などを検討しないといけなくなります。


穴埋め系

次はプログラミングテストのメジャーな方法と思われる穴埋め系についてです。
計算式などが必要なポイントなどを空欄にして回答をお願いする形式です。回答方法は同じくメモやワードなどもあると思いますが、GoogleのFormsなどでも作成できるかもしれませんね。

穴埋め系のナベアツ例

1から100までの整数を順番に出力します。数値が3の倍数または3が付く(例: 13,27,35)場合には、数値の前後に"*"の文字を付けます(例: *13*, *27*, *35*)。
下のプログラムにおいて、数値が3の倍数または3が付く場合に true、それ以外の場合はfalseを返す関数 checkThree() のコードを記入してください。

class Nabeatsu {
  public static void main(String args[]) {
   Nabeatsu nabeatsu = new Nabeatsu ();
   for (int n = 1 ; n <= 100 ; n++) {
    String format = nabeatsu.checkThree(n) ? "*%d*" : "%d";
    System.out.println(String.format(format, n));
   }
public boolean checkThree (int num) {

// 以下に引数numが3の倍数または3が付く整数かどうかを判定するコードを記載してください。
// 1行で書ければ素晴らしいですが、複数行で書いても問題ありません。

空欄部分※回答部分

今回のナベアツテストだと一番下が穴埋めの回答する個所として空欄に該当させやすい部分でしたので、メモなどを付けて分かりやすくしましたが、メモはなくても良いと思います。

作成してね系と違い、ある程度正解が分かりやすいので、人事側だけで採点がしやすいのも良い点です。

また、採点する際は動けばいいのか?短い行で書けないと不正解とするか?などを現場とすり合わせを行ってください。

今回の例で僕が採点するのであれば、動けばOKだが、1行で書けていれば加点する。という具合に設計するかと思います。


テストケース作成

これは作成してね系や穴埋め系と合わせて出題するテストになることが多いテストです。

用途としてはちゃんと理解しているかの確認的な意図で出題するのかなと思いますが、なぜ確認が必要かと言いますと、プログラミングテストはお題によってはコピペしやすいんですよね。要するにネットにたくさん答えが落ちているのでカンニングがしやすいということです。

そのため理解度のチェックとしてテストケースを提出させるわけです。

個人的にお勧めな理由は人柄がすごく出る点です。実践してみていただければ実感できると思いますが、貴重面か・大雑把か・無駄が嫌いかなどが露骨に浮き彫りになります。

ちなみに今回のナベアツテストですとテストケースを説明するのが難しいので、

『1~100までの入力された数値が3の倍数または3の付く数値であった場合にアホになる』という問題のテストケースとさせて頂きます。

テストケースの出題方法

作成したプログラムをテストする際に必要だと思われる入力データの組み合わせ(テストケース)を下記に列挙してください。

※回答スペース

このような形で出題をするかと思います。

回答内容は様々なケースが想定されますが、このテストの問題はプログラミングスキルが必要ないので、人事でも採点がしやすいと思います。


採点の仕方ですが、どういうプログラムを作成されたかを確認します。

例えばナベアツの問題を日本語でそのまま解くと大雑把に2つの回答方法があります。

計算式で判別する方法
※3で割り切れるか、10で割って3余るか、10で割ったら商が3になる。

文字列検索する方法
※3で割り切れるか、3が表示されている。

なぜ回答方法を確認しないといけないかですが、上記の2つの回答方法のようにプログラムの正解は決して一つではないということがあり、ちゃんと自分作ったプログラムの構成を理解しているかの確認が必要になるためです。※実際の現場ではプログラムの内容ごとにテストを決めるわけではなく、システムの仕様によって決まります。

回答方法を確認したら、その回答方法に沿っているか確認します。

例えば計算式で判別する方法ですと、3つの構成されている要素がテストケースに含まれているかを確認します。

3で割り切れる:3・6・9など
10で割って3余る:13・23・43など
10で割ったら商が3になる:31・32・34など

これが確認できればひとまず3の倍数または3のつく数値が入力された際はアホになるかが確認できます。

次に3の倍数ではなく、3も付かない数値が入力された場合もテストをしないといけません。

3の倍数ではなく、3も付かない数値:1・2・5など

このようにテストケースは完成します!

と言いたいところですが、世の中そんなに上手くできていませんのでもっと多くのテストをしないといけません。

例えば

入力欄は三桁に対応しているか?:100
100を超えた数値の入力があったらどうなるのか?:101・102・1000
-(マイナス)の数値が入力された場合はどうなるのか?:-1・-3
空欄の場合はどうなるのか?:

ナベアツテストに「入力された数値を」という条件を付け足すだけでこれだけ考えられる懸念点が出てきます。

プログラムではエラーが起きることは仕方ないのですが、想定していないエラーによる不定状態は避けなければいけない要素であるため、この点を重要視します!という現場責任者は珍しくないのではないかと思います。

ですので、このエラーケースなどをどこまで回答をして合格とするのかという点は確実に現場エンジニアを目線合わせをしてください。

ちなみに僕の会社でテストケースに完璧な回答をされた候補者様は今までで一人もいませんので、新卒や若手エンジニアに高いレベルを求めすぎないでいただくのも念頭に入れていただけると良いかと思います。


間違いはどれ系

簡単なシステムを動かすためのコードを記載してあるファイルを作成するのですが、コードの一部や何箇所かをシステムが動かないよう書き換えた状態にします。

そのファイルを候補者様にお渡しして、修正して動くようになったファイルを返送いただく手法です。

こちらのテストは先ほどのテストケースも内容として内包されており、修正の仕方などで癖なども分かるので非常に有用なテストだと思います。

デメリットはナベアツテストもそうですが、単純なシステムでは簡単すぎて問題にならないため、多少なり複雑なプログラムを用意する必要があります。故に人事だけでは採点をすることは不可能に近いので、候補者数を加味して現場とすり合わせが必須となります。

他にも出題の仕方はあるかと思いますが展開しやすいのはこのような手法になると思いますので、自社に合わせて選んでいただけると良いかと思います。

また、内容についてはせっかくの機会なのでエンジニアと議論をして、採用に興味を持ってもらうきっかけにすることを踏まえてエンジニアに作成をお願いしましょう。

作成いただく際には合格ラインも合わせて検討しないといけないのですが、動けばいいのか?見やすいコードでないといけないのか?こちらも自社の求めるペルソナに沿って考えてください。

今回はナベアツにしましたが、出題の仕方はたくさんあります。

例えば僕の会社では生産性を上げるためにオブジェクト指向の考え方が必須となるため、オブジェクト指向の問題を穴埋めで出していたりします。

作成にあたり僕が注意しているポイントは、特定の言語や分野のみで回答できるようにはしないことを意識しております。

例えば回答部分は他の特異な言語でも良くしておいたり、オブジェクト指向は少し苦手でもSQLとかは得意という方もいますし、ネットワークなのかアルゴリズムなのか分かりませんが、何かしら強みを持っている可能性が高いのが新卒や若手採用の面白いところです。ポテンシャルを少しでも見出すために様々な問題を作成するのがお勧めです。

また、ポテンシャルを見出す努力をしないとエンジニア不足の世の中なので人事側の首を絞めることにもなりますから注意したいですね。


3.様々な会社の実例

最後にIT企業の実例を紹介できればと思いますが、正直すごいです!
なにがすごいかと言いますとムズカシイ...

有名企業様から「ウチはこういうレベルだけど解けないの?」と言わんばかりの圧を感じます。

コロプラさん

スマホゲームで有名なコロプラさんです。
僕も黒猫のウィズでお世話になったのを覚えています。
そんなコロプラさんの技術ブログに新卒テストの過去問が掲載されています。

LINEさん

言わずと知れたコミュニケーションインフラの会社ですね。
中学生の時に友人とF5を押すのがめんどくさいので自動更新されるチャットを作ったのですが、その矢先にリリースされた緑の画面に絶望を受けたのが思いでの会社です。

天下のLINEさんの解説付きテストページが下記です。

メルカリさん

どんな話題でも名前が上がるIT企業のお手本とも言える会社ですね。

高校生の時にリリース間もないメルカリを使って親父の釣り道具を勝手に売って「値段が安すぎる」とキレられた思い出がある会社です。

メルカリさんはライブコーディングインタビューという変わった形式のテストでしたので、一読いただけると良いかと思います。コンサル会社がやるフェルミ推定のコーディング版みたいな印象なのですが、すごく勉強になります。

この他にもエンジニアブログなどに解説しているケースが多いので、ベンチマークしている会社のブログなどを探してみるのも面白いかもしれませんね。

4.まとめ

今回は新卒エンジニアのテストについて解説をさせていただきました。

こんなことを最後に記載するのはあれですが、PaizaさんやTrackさんなどのテスト系のサービスもありますので、そういうのを導入する簡単な手法もあります。ですが、個人的にはせっかくのエンジニアに採用に興味を持っていただくことができるチャンスでもありますので、閑散期などで実践してみてください。
最後に営業ですが、難しければご相談をお待ちしています(笑)
また、数少ないお読みいただけている学生の皆様、就活の選考などには遅刻しないようにしましょう。
僕の高校入試みたいに不合格になりますので、気をつけてください!

ライター:ポペヌ
エンジニア歴約10年、人事歴約3年。中学時代からエンジニアとしてお小遣い稼ぎを始め、エンジニア経験を活かしながら、大手IT企業にて人事に転身。「プログラミングができる人事」として、主に経営陣をカウンターパートに経営視点の人事戦略設計〜実行、検証まで従事。即戦力エンジニアをオフライン・オンライン施策をベースに採用単価0円で採用実現するなど、特に新卒採用、およびエンジニア採用に強みを持つ。


「すごい人事」情報局運営元:株式会社Crepe 
Crepeでは、ESG観点からみた人的資本における企業価値向上支援を行っています。具体的には、採用CX(候補者体験)向上ための採用戦略コンサルティング、採用ストーリーブック制作、研修トレーニング、EX(従業員体験)向上のための組織コンサルティング、エンゲージメント向上 HRtech「ミライチズ」などを通して、より良い個人と企業の関係の質向上支援を行っています。◆お問合わせはこちら

この記事が気に入ったらサポートをしてみませんか?