見出し画像

ドイツでソフトウェアエンジニアとして採用され、行く話 ~3.採用試験編~

はじめに

ドイツ・ベルリンに本社がある新興の大手IT企業に、ソフトウェアエンジニアとして採用され、2022年夏から現地に行くことにしました。

具体的な職務内容はBig Data x Cloud Architectに関わる業務全般で、分析データ基盤の管理を自動化するアプリケーション開発から売上を予測する機械学習モデルの開発まで、幅広い業務をする予定です。

前回は私の経歴、海外の求人の探し方、応募書類について紹介しました。

この記事では、海外のIT企業の選考内容と対策について書きます。


採用試験の過程

  1. 書類審査

  2. 採用担当が職務説明と人物面談(語学力も含む)

  3. コーディング/アプリケーション開発テスト

  4. 前段の開発テストに関する議論/システムデザインの議論

  5. 最終面談 (将来の同僚との顔合わせや条件面のすり合わせ)

100人の応募があるとすれば、以下のような合格率みたいです。
→ 書類審査:100人 → 30人
→ 挨拶面談:30人 → 25人
→ コーディング/アプリケーション開発テスト:20人 → 10人
→ 前段のテストに関する議論/システムデザインの議論:10人 → 5人
→ 最終面接:5人 → 1~3人

最終的に1人しか採用しないかもしれないですが、応募者の辞退も加味し、若干の余裕を持たせているようです。

1. 書類審査

腕試しも含めて、興味を持った求人を見つける度に応募していたので、1年以上かけて50社くらいに応募しました。

10社の書類審査に通りましたが、スケジュールの都合で、2社はこの時点で辞退しました。

2. 職務説明と人物面談

英語力と欧米流のコミュニケーション能力に問題ないので、全て通過しました。ただし、事前に一般的な面接問題について、回答練習をしました。
Top 20 Engineering Interview Questions You Need to be Prepared to Answer

以下の点は特に準備しておくと良いと思います。

  • どうして、その会社・その国に興味があるのか

  • 期待する給料・待遇面(事前に相場を調べられます。)

  • 現在の会社の事前通知の期間

  • 一緒に移動する家族

3. コーディング/アプリケーション開発

私の場合、以下の試験内容であり、開発試験は全て通過しました。

  1. スウェーデンのゲーム会社:Golangでキャッシュ機構の開発

  2. スウェーデンのメディア会社:PythonでRest APIの作成 & SvelteでJSONデータを受け取り、グラフ表示するダッシュボード作成

  3. スウェーデンのアパレル会社:Pythonでライブ・コーディング

  4. スウェーデンの音楽のオンライン配信会社:開発試験はなし

  5. スイスのオンラインのフード注文&配達会社:Pythonのフレームワークで商品詳細ページの作成 & ユーザーIDをサーバーサイドで生成し、クリック履歴をメモリに保存し、商品レコメンドを作成 & 商品レコメンドを表示する画面を作成

  6. デンマークのWebコンテンツ最適化の会社:SQLとDWH中心の口頭テスト

  7. ドイツの小売企業:SQLのライブコーディング

  8. ドイツの新興IT企業:コーディングテスト(Pythonを選択)

アプリケーション開発の場合

  • アプリ開発さえできれば、基本的に課題の要件を自動的に満たすはずなので、次の選考段階まで進めます。

  • 自分の場合は自動テストの開発も含んでいました。

  • コーディングテストに比べて5〜10倍くらいの時間がかかります。仕事をしながらだと正直、きついです😂

  • アプリケーションの問題は意図して、もしくは意図せずに機能要件が曖昧な場合があります。その会社の開発者が自前で準備する場合が多いからです。その場合、不明点をメール・面接で聞く方が、開発者として適切ですし、開発しやすいです。

結論、ケーススタディみたいで楽しく、勉強になりました。

コーディングテストの場合

HackerRankCodilityのようなコーディング・プラットフォームに招待されて、問題を解く形式になります。あくまで、ソフトウェアエンジニアの一部分としてのコーディング技術なので、問題レベルは初級から中級までが一般的です。

また、言語選択は自由ですが、私の場合は簡潔に書きやすい & コーディングテストのような問題を解きやすい & 個人的に慣れているPythonにしました。ちなみにNodejsは簡単な処理でもコーディングテストでは複雑に書くしかない時があり、注意が必要です。

コーディング時に私は以下のポイントを意識していました。

  • (最適化ではなく)計算量的に大きな問題のないアルゴリズム

  • コメントなども含めて読みやすいプログラム

詳細について個人的に連絡をもらえれば、相談にのります。

4. 開発テストに関する議論 or システムデザインの議論

前段階のコーディング/アプリケーション開発に関する議論か、その会社に関わるシステムアーキテクチャの議論をしました。結果として、8社のうち5社を通過しました。

アプリケーション開発に関する議論の場合

開発コードに関するフローや意図の説明を求められます。特に要件が曖昧な部分ほど、実装が不十分・非効率になりやすいので、説明できるように準備する方がいいです。

私の場合、Golangでキャッシュ機構の開発する試験に関して、要件が曖昧な部分の実装について、議論になりました。結果的に不合格になりました😂

また、PythonでRestful APIの作成 & Svelteでダッシュボードを開発する試験も、サーバーサイドとフロントエンド部分で、課題作成者の意図と違った実装をしたようです。結果は不合格でした😭

システムアーキテクチャの議論の場合

自分は以下の議論をしました。

  • ストリーム/バッチデータ処理のシステムアーキテクチャ

  • Kubernetesの設計

  • データレイクとDWHの設計とSQLのパフォーマンス改善

  • キャッシュの設計

スウェーデンの音楽のオンライン配信会社とシステム設計全般の議論をし、内容は悪く無かったと思いましたが、不合格になりました。

システムデザインに関してはYoutubeにいくつか模範的な動画があります。純粋に勉強にもなるので、お勧めです。

最終面談

この段階では入社後に所属するチームのエンジニア、プロダクトマネージャー、部門リーダーなどと面談します。コミュニケーション力に問題なければ大丈夫なはずです。また、改めて職務説明、待遇・条件面の確認があります。

そして、最終候補者は2〜3人いるはずで、1番から順に内定を出されます。1人と合意ができた段階で、他の候補者は落選になります。

最終結果として、私の場合は5社中3社から内定をもらいました。しかし、1社は採用予算の関係で延期・音信不通になり、もう1社は職務内容が狭かったので自分からお断りしました。

以上が海外のソフトウェア会社での採用試験に関する私の知見です。

実際の仕事の経験については以下の記事に続きます⬇️

Happy Coding!



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