直近でいろいろなことがあって、イギリスで技術面接を受けており、沢山の失敗をしてきました。
「世の中には数々のSuccess storiesがあるが、失敗する時はいつも同じ理由だ」ということを世界史講師で有名な青木さんが言っていたような気がしますが、
失敗には普遍性があるので、自分の肝に命じるためにも、そしていつも通り「人生はブログネタ」の鉄則に従い、インターネットの海原にこの記事を流したいと思います。
だれかの参考になればいいですね。とはいえこれは時に自分のために書いているような気もするけど。
そもそも外国の独身就労ビザ保持者が気を狂わせたり心身崩壊させたら、イギリス生活終了のお知らせ(=日本での強烈Peer Pressure + 長時間労働地獄行き片道切符)なので、気持ちを整理するためにも記事を書くことにしました。
励ましのメッセージ・ご意見・ご感想などいただけると嬉しくて頑張れます(甘え) -> お問い合わせ
目次
テクニカル面接とは
以前イギリスでソフトウェアエンジニアとして転職する方法(2社オファー獲得の実体験から反省踏まえて)という2021年ごろの就活の話を書きましたが、
昨今のIT業界はいまだにレイオフ騒ぎの影響を受けて(そしてこの記事執筆時が12月のクリスマス休暇シーズンというのもあって)Job Marketはかなり活気がわるいというのが2023年の体感です。
SoftwareEngineer職のテクニカル面接というのは主に以下のようなものを指します。
(これ以前にHRとの面談やPhone screeningがあるのですが、それは上の記事に詳細を書いているので割愛します)
・Online Coding challenge
・自分のCVに書いている技術を深掘り
・Conceptual Questions
・Live Coding
すこしだけ解説をしていきます。
Online Coding challenge:
Hacker rankなどオンラインのIDEがついたのリンクが送られてきて、言語またはフレームワークに関する選択問題+DSA(データ構造とアルゴリズム)の問題を制限時間内(60-90mins)に解くものです。
CVを送ったり、アプリケーションを送るとATS(レジュメの自動スクリーニング)を通して、自動でテスト案内が送られてくることが多いです。
非対面で、誰にもみられていない状態で比較的リラックスして受けられるテストですが、足切りのためかハードルの高い問題を仕掛けられることも少なくありません。(最初のテストが全体の採用プロセスで一番難しかったという人も多い)
自分のCVに書いている技術を深掘り:
例えばCVで使った技術として、gRPCって書いたら、それは何、どうやって使うの?Restと何が違うの?とかタコ殴り式で聞かれるタイプの質問です。
冒頭にあることが多く、後半がLive codingとの組み合わせであることが多い。だからチームの使用環境としては使ってたけど、自分がhands-onで得意だと思ないものは基本的にCVに書かない方がいいです、墓穴をほります。(実体験)
Conceptual Questions:
JavaのSpring frameworkの@Componentのアノテーションはなにを意味する?とかjavaのAbstract classとinterfaceの違いとは?とかです。
概ね聞かれるのは基本的なことが多いかな、本当にその技術を使ってたら知ってて当然、みたいなものが聞かれます。
Live Coding:
実際の簡単なシナリオに基づいてEntityの定義をして、実装をするようなもの、LeetcodeっぽいけどLeetcodeっぽくない要素もあったりします。ググり不可の場合が多い。
スポンサーリンク
テクニカル面接に失敗する理由
あげるとキリがないのですが、テクニカル面接に失敗する典型的(かつ、なさけない)理由は以下の通りです。
・問題を英語で一発で理解できない(特に837. New 21 Gameみたいな問題とかつらい)
・選択した言語のスキルに乏しい、基本的はことはググらなくてもできるべきなのにそうではない場合とか
・面接スタイルまたは問題形式に慣れていない
・面接では緊張もプラスされて普段の能力の60%ぐらいしかでない
・Conceptual的なものは(とくにJavaは)出題範囲が広すぎてヤマが外れると4ぬ
・普段の業務でスピードを意識してコーディングしていない
・計算量に馴染みがない
概ね対策方針を考えてみました。
・問題を英語で一発で理解できない
-> Deepl(翻訳アプリ)を頼りすぎない、いかなる問題も英語で理解するように普段から努めないとですね。
・選択した言語のスキルに乏しい
-> まぁこれは選択した言語に責任をもってあらゆるパターンをつかったり(javaだったらstreamとかpythonだったら便利なライブラリとか)リファクタ方法を模索していくしかないのかな。
・面接スタイルまたは問題形式に慣れていない
->場数的なものもあるのかな、visaスポンサーありの企業しか受けられないので面接として実在企業を練習に使えないので、そろそろ本格的にPrampなどを使っていくべきかもしれません。
・面接では緊張もプラスされて普段の能力の60%ぐらいしかでない
->友達とかを見つけて友達の前でしゃべりながらコーディングする機会を設けるとかか!?
・Conceptual的なものは(とくにJavaは)出題範囲が広すぎてヤマが外れると4ぬ
->一日30分でもいいからやる、また個人開発などで使いながら理解を深めるとか?
・普段の業務でスピードを意識してコーディングしていない
-> leetcodeのタイマーをつかってみるとか
・計算量に馴染みがない
->これは向き合っていくしかないですね。
みたいな感じでしょうか。。要約すると、「うっせーなんでもいいから1秒でも多くコードをかけバカ」ってことですかね。
スポンサーリンク
テクニカル面接失敗からリカバリする方法
さて本ブログの本題、テクニカル面接失敗からリカバリする方法を述べていきます。
メンタルの調整:事象の切り分けをする
まずはメンタルの調整が何よりです。ちょうどいい記事を見つけたので引用します。
I walked out of an interview last week, and I knew I had blown it. I received the rejection email a few hours later. I am a professional software engineer. I got promoted three months ago, and my employer is very happy with me. Nonetheless, I didn’t do a good job of presenting myself and my knowledge.
(中略)
Keep in mind that coding in real life is different from coding in an interview. Just because you did poorly in a technical interview does not mean you do not have strong technical skills and knowledge.
引用元:https://towardsdatascience.com/what-should-you-do-if-you-just-tanked-your-technical-interview-273f3b1fa28b
つまり、実際の業務とコーディングインタビューはちがうものであり、インタビューで失敗したからとって強いテクニカル知識とスキルを持っていないということを意味しない、ということです。
私も実際に今年はLine managerやその上の人から「You’re a very good engineer」評価を受けました。
Teamsのチャットのキャプチャ貼りたいぐらです。
(当たり前だよ、土日も自ら勉強して、業務して長期休暇も取らず、さらにア◯なJuniorに時間を割いてメンタリングもして、誰よりもPR送ってたんだから。。)
でもTechnical Interviewではざっくりいうと「You’re coding skill is s**t」みたいな(実際にはこんなストレートな表現ではないけど)フィードバックをよく貰います。
だから、テクニカル面接に落ちたのはただ、テクニカル面接に落ちただけで、ということなのです。
そしてテクニカル面接に受かるためにはテクニカル面接に受かるだけの力が必要で、それ以上でも以下でもないのです。。
失敗を失敗のままにするから失敗、なにか学べば経験、落ち込んでいる暇なし
とはいえショックを受けるのは間違いないので、Youtubeに救いを求めていたところ、こんな動画をみつけました。
めちゃくちゃしっくりきたのでインタビューに落ちるたびにこの動画を見直しています。シンプルかつその通りな動画。
失敗を失敗のままにするから失敗なのであり、そこからなにか学べば経験となる。落ち込んでいる暇なし、ということです。
そんなわけで面接に失敗するたびこれらをevernoteに書き出すことにしました。
・うまくいったこと
・うまくいかなかったこと
・同じことがあったら次はどうする
・同じ状況にならないためにはどうする?
・同じ失敗をしないために今自分にできることは?
特に面接なんて、(現職の雇用が安定している限りは)失敗しても4なないし、失うことはなく、無料で学びを得られる最高のチャンスなのです。
なのでインタビューで失敗したときは、うまく答えられなかったもの、できなかった問題は自分の開発環境でできるまでやる、ということに時間を費やしましょう。これをやらないから失敗のままなのです。
100回面接に落ちたとしてもたった一回成功したらいいわけなので。復習しながらあとは数打てばOKです。
もう一つ最近みつけた好きなYoutubeの動画に、「成功は運か才能か」というものがあります。
詳しくは動画を見て欲しいのですが、シミュレーションの結果、もっとも成功した(=資産を築いた人)というのは、才能がトップな人ではなくむしろ中庸なレベルで、かつもっとも幸福なイベントに遭遇した人、だったのです。
つまり幸福に遭遇する回数を増やせばいい=打席に立つ回数を増やせばいい=面接を受けまくればいい
ということなのです。(個人解釈)落ちたからなんだ、また受ければいいだけの話で、それ以外どうしようもないのです。
最後に
というわけで今回はテクニカル面接の失敗からリカバリする方法についてでした。誰かの励みになれば幸いです。
東大卒でもつよつよエンジニアでもない、弱小文系卒fake engineerとしての立場からお送りいたしました。