2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
コードテストでtrack.runを使ってる話と採用フロー (全1記事)
リンクをコピー
記事をブックマーク
古川陽介氏:よろしくお願いします。私はプライベートでは、Japan Node.js Associationというところの代表理事をやっております。今日はどちらかというと会社の中の話です。
コードテストだけではなく、面接やそういうところで何をやっているのか参考になる部分はあるのかなと思うので、発表させていただこうかなと思っています。
コードテストなんですけど、全面的に採用してるよりは、今はトライアルです。インターンの時にコードテストとして、「track」っていうコードテストツールを採用しています。
これはどういうものかというと、Web上で回答できる……さっきちょっと<a href=""https://logmi.jp/tech/articles/320584" target="_blank">Codilityの話があったと思うんですけど、それにすごく似てるツールですね。
我々がやってるのは、やっぱりWebアプリケーションを作る会社なので。データベースの操作ができないと話にならないよねとか。HTTP APIの送信・受信ができないと話にならないよねとか。そういうコードテストの内容があります。それだけではなくてアルゴリズムの問題とか、あと数学の問題とかもあったりしますね。
なので解くのはけっこう長くて、全部解こうとするとだいたい2~3時間くらいかかりますね。先ほどメルカリのTakayamaさんからのお話に「はやい(うまい、やすい)」ってあったと思うんですけど、なかなか時間を食ってしまう感じもします。
実力を見ているだけじゃなくて、入社意欲っていう面もある程度見ようと思って測っているので、注意深くやればだいたい高得点が取れるんです。なんですけど、そういうことすらもしたくない人はお断りさせてもらっている感じですね。
なのでめんどくさい問題も多いんですけど。面倒くさい問題って、コードテストの内容がですね(笑)。そういう問題も多いんですけど、ある程度の技術力プラス、それだけではなくてモチベーションみたいな、意欲みたいなものも見ています。
(スライドを指して)これはコードテストの内容です。1つ目、アルゴリズムですね。入力された文字が与えられた文字のうち、最長の回文になっている「たけやぶやけた」みたいなやつですね。そうなっている部分を表示するプログラムを作ってくださいって。アルゴリズムの問題だとこんな感じのやつですね。
わりとありがちなな感じもしなくはないですが、ふつうに解こうとすると、なんとなくO(n^3)か(n^2)とかで解いちゃいますよね。最後の問題が100万桁くらいから(笑)、円周率の3.1415っていうのがずっと並んでるやつがあって、その100万桁の中から最長の回文を探せっていうふうになっているので。そうするとなかなか、ふつうのオーダーだと解けません。
これは本当は、思いつくかどうかわかりませんが、Manacherのアルゴリズムがあって、それを使うと回文がもう少し現実的なオーダーで解けるという問題になっていますね。
ここまでくると知識問題になってしまいますが、そこまでいかなくても、例えば最後の問題まで解けなかったとしても、ふつうの問題は「15字以内から探す」というのもあったりします。徐々に桁数が大きくなっていって、アルゴリズムが長くなればなるほど計算量の効率的なものが必要になってくる。ただそこまで知らなかったとしても高得点は取れるっていう感じですね。
あとは数学の問題で「始めに階段の0段目にいる。あなたは足が長いので、1段上にいく、2段上にいく、3段上にいくの3パターンの登り方がある。6段目に登る方法は何通りか?」みたいな。これは動的計画法ですね。
こういったような問題が多い感じですね。こういうのを解いてもらうんですけど、「だいたい2~3時間」と言ったんですが、超優秀な人だとだいたい1.5時間で95パーセントくらいの正答率を叩き出しますね。
これ以外にもSQLの問題とかWeb APIの問題とかあるんですけど、全部出したとしても実力差っていうのはけっこう出ていて。95パーセントくらいの点数を叩き出す人もいれば、もうちょっと時間が必要な人もいたりします。
trackには1つ良いところがあって、これが解けても解けなくても、自由にアピールできるんですよね。「解けなかったんだけど、こういうことを思って、こういうところに時間かかってしまいました」っていうことが、一応Web上で記述ができるんです。
例えばデータベースのSQLとかの問題だったら、クエリに関する説明とか実装した際に工夫した点などを自由に記述してくださいみたいなことが書けます。ここである程度アピールできるって感じですね。「ここにちょっと詰まってしまいました」みたいなことが書ける。なので、解けても解けなくても、部分点もらいにいこうとする姿勢がとれるっていう感じですね(笑)。
ただUIは少しわかりにくいこともあります。左ペインに問題が書いてあって……これ撮影NGなんですけど、SQLの問題です。全ユーザーを表示してくださいってあって右にエディタが書いてあるんですけど、このエディタに慣れてないと解きにくかったりします。
だいたい、操作に慣れたエディタとかを使って書いて、書ききったらここに貼り付けて、下のターミナルのところで試すと実行できる感じなんですけど、やっぱり書きにくかったり、Web上のエディタだと完璧じゃなかったりするので。
そういうところでハイライトがよくわかんなかったり。そんな使いにくさはまぁまぁあります。ただ、やればやるほど、ある程度コツがわかってくるっていう感じではあります。
なので一応やってるのは、点数だけを見てフィルタにするのはちょっと危険かなと。もちろん思いっきり0点とかは考えますけど、ある程度の点数取れているんだったらそこから意欲を受け取って、面接時の参考値にするっていう感じにしています。点数だけを見てフィルタにするっていうのは、うちだとやってないって感じですね。
だいたいここまでがコードテストの話です。面接に進むとどうなるかというと、これはインターンの面接と中途の面接の2種類あるんですけど、僕がやってるのはだいたい中途採用の面接です。
面接は、個人的には「相互理解する場」として捉えております。採用で1番不幸なこととしては、採用した人が期待と違ったり、会社が採用された人にとって期待と違ったとかだと思っています。
これはよく言われている、採用のミスマッチっていう問題ですよね。この採用のミスマッチが起きないようにするっていうところで、お互いを理解できる場として捉えようと思っています。
双方がwin-winな関係であることが1番良いかなと思っていて、そのためにはどうするかっていうのを1番気を付けてやっています。
1つは、面接の前の職務履歴書からある程度質問を考えていくとか。「職務履歴書」とか言ってる時点で超ドメスティックな会社って気もしますけど(笑)、まぁある程度質問を考えていて。
例えば帳票管理、「Excelみたいなものを作るのにReactを導入した」っていう人がいたとして、それに対して想定する質問をある程度考えておくんですね。ExcelライクなものをReactで作る時に、数行だと問題ないかもしれないけど、数10行、数100行に増えてしまったらどうやってパフォーマンスを担保しますかとか。そういうことを考えておく。
ほかにも「メディアサービスを作った」みたいな人に対しては、「想定される人数に対してどうやってスケールするアーキテクチャにしましたか」みたいな。僕、Ceylon系のことやってるんで、そういう質問が多いんですけども。こういうことが質問されることがありますね。
あとは「何をしたか」っていうのを聞きたいわけじゃなくて、「何を学んだか」を聞くようにしています。これはToDoのDone Listを聞きたいわけじゃなくて、ドラマが聞いてみたいっていうところなんで。どうやって調べて何をしたかっていう感じです。
悪い例としては、「XXXというサイトをYYYという技術を使って効果を出しました」と言われてもあまり理解ができなくて。良い例としては「XXXというサイトをYYYという技術を使って効果を出しました。結果、ZZZという学びを得ました」って、この最後のところまで言ってほしい。最後の学びを得たところまで聞きたいです。
面接も育成の場として捉えています。どういうことかというと、面接では議論することも多いんだけど、議論して論破したいわけじゃなくて。一緒にどういうことがしたかったかとか、さらに良いソリューションはないかどうかっていうのを探って、対話を通じてお互いを学べる機会っていうのにしています。
例えば実際にあった話だと、「XXXだとYYYで困りませんか?」みたいなこと言ったら、「ZZZっていうライブラリがあるんですよ」みたいなことを候補者のほうが僕より深く知っていて。それを僕は知らなかったっていう例もあったりします。なので、こういう感じでお互いが学べる機会だと思ってやっている感じですね。
今のは僕がどちらかというと心がけていることなんですけど、そうじゃなくて面接を受講する側が心がけると良いこととしては、入社にフォーカスを合わせた話をするんじゃなくて、入社後にフォーカスを合わせた話をしてほしいと思ってます。
どういうことかというと、入社にフォーカスを合わせた話される時って、例えば「凄腕のエンジニアが多いので、ここに入っていろいろ学びたいんです」って言われても、こっちとしては何が良いかわかんないんですよね。
こちらとして何がメリットがあるのかっていう話をやっぱり聞いてみたくて。目標に合わせるよりも、もうちょっと遠めにボールを投げる意識をつけておいてほしいなと思ってます。
入社後にどういうメリットがあって、どういう働き方ができるかっていうところにしておくと、ある程度意識の高いところに投げることになります。途中で失速してもボールを投げてるところが高いぶん、最後の目標っていうところに届きやすいんじゃないかなというふうに思っています。
まとめです。コードテストではインターンということもあって、「技術力だけじゃなくて意欲も見てます」っていうところと、イケてないところもいくつかあるので点数だけでふるいにかけるみたいなことはしてないです。
採用面接は会社が候補者を一方通行で判断する場所ではなくて、お互いにWin-Winになるようにして、対話できる場所としてやっています。効果的にWin-Winな環境としてやるためには、事前に質問を考えるとか「何をしてきたか」じゃなくて「何を学んだか」を聞くとか、面接の場を育成の場として使って議論するとかっていうことをやっています。
さらにみなさん、面接される側がやったほうが良いこととしては、入社にフォーカス当てて話すんじゃなくて、入社したらどう貢献できるかっていうところにフォーカスを当てて話してほしいなと思っております。
以上になります。「リクルートテクノロジーズではエンジニアをぼしゅ(以下略)」でございます。ありがとうございました。
(会場拍手)
司会者:ありがとうございました。
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略