EurekaMoments

ロボットや自動車の自律移動に関する知識や技術、プログラミング、ソフトウェア開発について勉強したことをメモするブログ

海外でエンジニア就職するための面接・テスト対策

目的

前回の記事で、自分が中国へ行くための転職活動の間に、
求人をどのように探して、どのように応募していたかに
ついてまとめました。

www.eureka-moments-blog.com

今回の記事では、書類選考を通過して面接やテストを受ける
ことになった際にどのような対策をしていたかを詳細に
まとめようと思います。

目次

職務経歴と実績を整理する

面接で必ずと言っていいほど質問されるのは、
自分が今までどういうプロジェクトに携わって
きたのか、そしてそのプロジェクトにおいて
どんな成果を上げてきたのか、です。

こういったことをいつでもスムーズに説明できる
ように、日頃からメモなどに書き出し、見直す
習慣をつけましょう。

また、整理する際には、下記のような点を意識
しながら整理してみるのがおすすめです。

状況 (Situation)

そのプロジェクトに取り組んだ際の背景を指します。
開発や改善、先行研究といったことをするにあたり、
どういう問題があったのか、その問題をどうしないと
いけなかったのかを説明できるようにします。

課題 (Task)

上記の問題を解決するために、具体的に自分がやらないと
いけなかったことを指します。また、そのプロジェクトが
個人ではなくチームで取り組んだものだった場合、その
チーム内での自分の役割が何であったのかも合わせて
説明できるようにしておくと良いです。

特に、もしそれでチームのリーダーを任されていたなら、
それはプロジェクトマネージャーなどのようなポジションの
求人への応募の際には大きなアピールポイントになります。

行動 (Action)

上記の課題を達成するために、自分が実際に何に取り組んだかを
説明します。やったことをただつらつらと喋るだけではなく、
考えたこと、苦労したこと、工夫したことを交えて話せるように
しておくと良いアピールになります。

結果 (Result)

上記の行動により、最終的にどういう結果となったのか、
どんな成果を生み出したのかについて説明します。この時、
売り上げ~%アップさせた、みたいに定量的な数値で語れる
ような説明ができると面接官には分かりやすくなります。

1対多数の面接を想定した練習をする

中国の会社の面接特有のスタイルなのかと思っているのですが、
自分一人に対して面接官が10人くらいいるという面接が何度も
ありました。

そして、その面接の間は2時間くらいずっと質問攻めとなるので、
終わったころには首や肩も凝り固まってヘトヘトです。

何か特別な準備が出来る訳でもないのですが、当日はそうなる
という心の準備はしておきましょう。

当日の相手側の参加人数は信用しない

面接がセッティングされた際は、事前にどういうポジションの人が
相手になるのか、相手は何人かなどを連絡してくれますが、大抵は
その通りではなく、実際に面接が始まると、聞いてたのよりも遥かに
多い人数が相手になることも珍しくないです。

そういう状況を事前に想定し、当日に慌てないようにしましょう。

面接を受ける会社のビジネスについて理解を深める

面接を受ける会社に対してどれだけ興味を持っているかも
面接では評価されます。そこで大事なのは、その会社が
どのようなビジネスを展開しているか、それにおける改善点が
あるとすればどこか、そのために自分には何ができるか、
といったことを話せるようにしておくことです。

日本の会社の新卒採用とは違い、海外の会社では常に
即戦力を求められます。そのため会社側としては、採用候補者が
どれだけ自分達のビジネスに貢献してくれるのか、といった
ことを評価しようとします。

そのため、自分がどんな知識や技術、経験を持っていて、
それらを活かして会社のために何ができるのか、について
堂々と説明ができるようになっておくと高評価です。

自分の担当プロジェクトのポートフォリオを作る

エンジニアとしての採用ポジションであれば、自分が今までどんな
プロジェクトでどんな開発をしてきたかを必ず聞かれます。

いくらそれをスムーズに話せるように準備していても、
言葉だけで面接官に正しく理解してもらうのは難しいです。
日本語ならともかく、ネイティブではない英語や中国語で
説明するならなおさらです。

実際自分は、言葉だけでは上手く相手に伝わらず、
期待した評価を得られずに面接に受からなかった
ことがありました。

そこで重要になるのがポートフォリオです。
自分が今まで仕事で担当してきたプロジェクトについて、
背景や目的、実施内容、得られた成果などを、
文章や図、グラフなどで視覚的に説明できるように
しておくことです。

そして、それを資料として共有するなどして面接当日に
プレゼンすれば、自分の取り組みをより正確に伝えられる
ようになります。

ただし、なんでもかんでも情報を盛り込める訳ではありません。
あくまで外向けの資料なので、社外秘のデータなんかを
うっかり載せてしまわないように注意しましょう。

GitHubでコードを共有する

ソフトウェアエンジニアとしての選考なので、その人の
プログラミング能力を評価しようとするステップは必ず
あります。

これは比較的少数派だと思いますが、会社によっては、
その人が趣味などで作ってGitHubで公開しているコードや、
仕事で実際に開発したコードを見ることで能力を評価しようと
します。

仕事で作ったコードは、大抵はOSSでもない限りは社外秘だと
思うのでさすがに共有はできません。でも、その代わりに
GitHubにあるコードならいくらでも見せられます。

なので、自分が趣味や勉強などで作った個人のコードは、
日頃からできるだけメンテして、いつでも他人に見せられる
ような状態にしておくのが良いです。

実際、今回の転職活動では、自分のGitHubのコードを
見たことで気に入ってもらい、次の面接などに呼んで
貰えたことがありました。

アルゴリズムとデータ構造について勉強する

これについては良く聞く話なので言うまでもないと思いますが、
アルゴリズムとデータ構造の理解度を評価するためのプログラミング
テストを受けることがあります。

自分は今回の転職活動を始めるまでは、一切この勉強をして
こなかったので、こちらの書籍を読みながら慌てて勉強しました。

テストは面接形式だったり、オンラインテストであったりと、
会社の選考プロセスによって異なります。オンラインテストに
ついては、こちらのLeetCodeというサービスを利用して演習を
していました。
leetcode.com こちらのサービスで良いと思ったのは、一度は聞いたことのある有名な
IT企業のテストで実際に出題された過去問を沢山解く練習ができること
です。回答を見るのは有料プランに登録する必要があるのが難点ですが、
自分の人生がかかってると思えば安いものだと思います。

一つのプログラミング言語について詳しくなる

プログラミングテストの種類は、決して上記のアルゴリズムと
データ構造の問題を解かせるものだけではありません。

もう一つ今回経験したのは、自分が一番得意な言語あるいは
応募したポジションの仕事でメインで使う言語の知識や仕様
そのものについての理解力を評価するテストです。

例えば自分の場合は自動運転システムのソフトウェアエンジニアと
というポジションであり、メインで使う言語はC++になります。
そのため、面接あるいはオンラインテストで、C++についての
理解力を問われる問題を解きました。

そのとき実際に聞かれた質問はこちらの記事に以前まとめましたが、
自分は全然基本的なところを理解出来てなかったんだなと落ち込み、
もっと早く勉強しておくべきだったと後悔しています。
www.eureka-moments-blog.com

面接やテストをクリアした後のステップ

面接やテストは通常複数回実施され、それらを全てクリアできたら、
その次に待ち受けるステップは年収やその他待遇面の交渉です。
少しでも良い条件で採用されるために、事前の準備はしっかり
しておかないといけません。

次回の記事では、こういった交渉のための事前準備や、交渉時に
気を付けるポイントなどについて詳しくまとめようと思います。