ナレッジワークのコーディング面接を直近の入社者目線で語る
はじめまして。2022年2月からナレッジワークでバックエンドエンジニアをしているhiroです。
この記事では、私がナレッジワークに入社する1番のきっかけになったコーディング面接について、主に受けた側目線で紹介します。
伝えたい内容は大きく以下の2つです。
コーディング面接をとても大切にしている
模擬面接があるので興味のある方は是非受けて欲しい
まず前提として、ナレッジワークでは自分達の仲間は自分達で集めるをモットーに、エンジニアチームのシニアメンバーがエンジニアの採用に深く関わっています。
この採用プロセスの内のひとつがスキル面接で、コーディング面接の形式で行われています。質疑応答のみの技術面接とは異なり、お題に対して、その場で実際にコードを書いて解く形式の面接になります。
コーディング面接を大切にしている
コーディング面接は、採用プロセスである以上、候補者様の技術を引き出し、正しく評価するためのものです。
これに加えて、候補者様に、ナレッジワークが技術に対してどのような姿勢であるかを知ってもらうための貴重な技術的接点でもあります。
これらを踏まえて、面接をより良いものにするために面接そのものの作り込みが行われています。
コーディング面接の作り込み
ナレッジワークでは、コーディング面接の作り込みの一環として模擬面接を行っています。
具体的には
コーディング面接を受けたい方に対して、”採用とは無関係に”、実際のコーディング面接を実施する
他社様のコーディング面接を受けてお互いにフィードバックする
という活動です。面接をする側、受ける側両方の視点で知見をため、面接の質を高めています。
詳細は以下の記事をご覧ください。
なお、上記記事はfrontend向けですが、backendも同様に模擬面接を実施しております。
また、後に聞いた話ですが、面接官の違いで選考ラインがブレないよう、リクルーター間でしっかりすり合わせも行っているとのことです。実施側目線での細かい工夫については、いずれシニアメンバーが紹介してくださると思います。
コーディング面接を受けての感想
さて、本記事の主題は受けた側目線での紹介なので、そろそろ主題に沿った内容に移ります。
面接を受けた率直な感想としては「とても面白くて勉強になった」です。
内容としては、お題を満たす適切なロジックを構成して実装する問題や、pros、consを整理して設計し、それについて質疑応答する問題がありました。
かなり緊張したものの、自分の出す解答に対して、質問やフィードバックがあり、そういう観点があるのかという気づきが得られて、とても学びになったのを覚えています。(完全に想定外のポイントをつかれると焦りますが)
テストされているというよりは、技術的なディスカッションをしているような感覚に近かったと思います。
また、お題の内容が、実際に開発でありそうなシチュエーションだったのも印象的でした。
総じて、ナレッジワークの技術力へのこだわりが垣間見れた時間で、すごくいい面接だなと感じました。
余談ですが、入社後にプロダクトのコードを読んでいたところ、面接の問題にかなり近いロジックを見つけ、実際にその部分を基に問題が作成されていたことを知りました。
プロダクトで使う部分を抜き出して問題設計するのは理想的な姿なのではと思います。
組織文化を感じた体験談
面接を受けての感想とは別に、コーディング面接を大切にしている文化を感じた体験談をひとつ紹介します。
少し自分語りになりますが、私はエンジニアキャリアが比較的浅く、正直なところ、経験豊富なメンバーに囲まれて開発についていけるかだいぶ不安を抱えての入社でした。
そういった不安感を話した時に、様々なメンバー(エンジニアチーム以外を含む)から「コーディング面接突破してるんだから自信持って」と言われたことが強く印象に残っています。
コーディング面接を本気で運用しているからこそ出てくるメッセージだと思いますし、それがエンジニアチーム以外にも認識されているところがすごいなと率直に思いました。
コーディング面接のサンプル問題
私が受けたコーディング面接とは異なりますが、1つだけ問題を紹介します。(なお、難易度としては易しめらしい)
title: parse file command output
ナレッジワークにはユーザーがファイルをアップロードする機能があります。アップロード後の処理をするため、mime type を利用したいと考えています。mime type を推定するためには、file コマンドが使えそうです。
file コマンドはファイルの中身や拡張子からファイルの種類を推定するコマンドです。
--mime-type というオプションをつけることによって、mime type を表示することができます。
与えられたファイルがどの mime type を持っているかを判別するため、この file コマンドの結果を parse して利用することを考えました。
問
file コマンドの結果が文字列として与えられるので、それを parse して、ファイル名 → mime type という map (treemap, hashmap, etc.) を作る関数を作ってください
file コマンドの結果は、一行に ファイル名: mime type の形で、これが複数行あります
ファイル名と mime type の間は空白(スペース)とします。
ファイル名は、ファイル名として使えるものなら来る可能性があります
ファイル名に空白がありうることを想定してください。
例外として、ファイル名には改行はないものとして構いません。
mime type は、[a-z0-9-_.]+/[a-z0-9-_.]+ しか来ないと想定して構いません
ファイル名に重複はありません
go での関数の例
func parse(output string) map[string]string {
// Write your code
}
最後に
コーディング面接の作り込みのところで紹介した模擬面接ですが、現在も応募を受け付けております。
私も、採用面接の前に一度模擬面接を受けており、本当に同等のクオリティで面接をしてもらいました。むしろ実際の採用面接よりも時間をかけてフィードバックをもらえたかもしれません。
冒頭にコーディング面接がナレッジワーク入社の1番のきっかけになったと書きましたが、私とナレッジワークとの最初の接点がまさにこの模擬面接でした。
模擬面接の取り組みでナレッジワークを知り、興味本位で模擬面接を受け、すごくいい体験だったことでナレッジワークに興味を持つようになりました。
ナレッジワークに興味がある。ただただコーディング面接に興味がある。どちらの理由でも構いませんので、少しでも関心がありましたら、模擬面接を受けてみていただけたらなと思います。