ドイツでソフトウェアエンジニアとして採用されたお話
1. 前書き
絶賛コロナ禍ですね。。笑
日本では「ANAが新卒採用を中断」したり、世界では「Airbnbが従業員の25%をレイオフ」したりと、なにかと雇用関係の話が上がってきます。
しかしながら、IT関連の会社ではダメージが少なく、コロナ前からのエンジニア売り手市場はそんなに変わっていないというのが個人的な印象です。
(ビジネスモデル的に体力がない会社は採用を控えてると思いますが。。)
そんな中、国を跨いでドイツで採用されました。大変悩んだ末にお断りさせていただいたのですが、そんな経験を備忘録として残しておきたいと思います。
2. なぜドイツで働こうと思ったのか?
正直にいうと、わざわざ好んで選んだわけではありません笑
今後のキャリアを見据えエンジニア + αとして勝負できる必要があるなと考えており、海外で働く(または日本にある外資系企業で)という選択肢を視野に入れ、密かに英語の勉強をしていました。
(気取ってますが、まだまだ全然話せません笑)
そして、そもそも英語を使う以前に、技術力の高いところで仕事をしたいと言うのが一番なので、アメリカやヨーロッパをぼんやり視野に入れておりました。
そんな矢先、たまたま見つけたのがドイツでのソフトウェアエンジニア(アプリエンジニア)の求人でした。
「英語じゃないのでは?」とのツッコミも入りそうですが、ドイツ(特にベルリン)のIT系は英語ができればOKなところも結構あります。
(今回はベルリンではないですが笑)
とりあえず、面白そうだったので何も考えず応募した感じです。
(あと、大学の第2外国語でドイツ語を取っていたので親近感があった笑)
3. ドイツで働く上でのハードル
ドイツに限らず海外で働く上でハードルとなるものは主に2つで
- 言語のハードル
- ビザのハードル
だと思います。
言語は自分の努力次第だとは思いますが、ビザに関しては国によって制度も異なり、その制度に乗っ取れるかどうかで決まるため、それなりにハードルは高いと思います。(運みたいなところもある笑)
ソフトウェアエンジニアの求人を探すだけなら、ドイツではいくらでもあるのですが、そんな中でも見つけた求人では
- 日本語でOK
- ビザの申請代行
というポイントがあったため、純粋に自分の土俵で勝負できる(エンジニアとしての技術力のみで勝負できる)と思い応募したのです。
4. 選考の流れ
ざっくり
応募 -> 課題提出 -> 面接 -> 面接 -> 年収交渉 -> オファー
という感じでした。
課題に関して、詳しい内容は話せませんが、特定の機能をもつアプリを作成することを求められました。また、以下のような要件が与えられます。
(今回はiOSエンジニアとしての課題で挑戦しました)
- APIの使用
- ローカルDBの使用(Keychain/UserDefaults/Realm)
- WebViewの使用(WKWebView)
- コンテンツの複数表示 (UITableView or UICollectionViewの使用)
- ライフサイクルの理解
- 画像・動画の取り扱い(読み込みと破棄の管理)
- サードパーティライブラリの使用(CocoaPods/Carthage/SPMなど)
- アーキテクチャの導入(Cocoa MVC以外)
- テストコードの作成と全て合格で確認可能な状態
これだけ聞くと大したことはないようにも聞こえますが、、、
1週間以内に3画面分の機能を実装する必要があり、DB・API・アーキテクチャ周りのユニットテストを全部書くことを考えると、かなりパツパツでした。。。
無事に提出し切りましたが、予めセットアップしたプロジェクトを用意しておけば良かったと後悔しています。笑
(地味に半日くらいはセットアップで消えてます。。。)
それ以外にも、UI・UXをできるだけ凝り、結果としてそれは受けが良かったですが、最後にやれば良かったなと言う笑
上記を達成するために、自分が構築した環境は以下になります。
- Carthage : iOS用ライブラリのインストール
- CocoaPods : iOS用ライブラリのインストール
- swiftlint : コード整形
- Homebrew : パッケージ管理
- RubyGems : パッケージ管理
- Bundler : gemの管理
- Make : 自動化ツール(全部のコマンドを管理)
- fastlane(scan) : テストの実行とテスト結果の出力
- Github Actions : テスト自動化(個人のプライベートリポジトリにおいて)
(mint, XcodeGenも使っていましたが、諸事情で消しました笑)
.gitファイルの提出も求められたため、TDDベースでかなりコミットも細かく分け、タスクもissueベースでブランチを切って開発を進めました。
テストの自動化は成果が大きく、developブランチにmergeされるたびにテストが走るように設定したので、どこかコードに問題があった場合は、すぐに修正を行える態勢にあったのは心理的安全が大きかったです。
面接に関しては、全て日本語にてオンラインで行われ、内容は一般的な面接と同じで、企業の紹介、業務内容、チーム、生活面などといった感じでした。
5. オファー内容
いただいたオファーは以下の内容でした。
(少しボカしてお届させていたただいております)
職種: ソフトウェアエンジニア(iOS/Android)
給料: ドイツの大卒初任給程度 ※1
有給: 1ヶ月程度
手当: 交通費/書籍などの経費/ビザ申請/渡航費/物件探し
勤怠: フレックス/リモート
給料は現職より下がりますが、毎年もらえる有給日数の多さと海外へ行けるハードル(ビザ)を考えると、そんなに気にならなかったです。
6. なぜ断ったのか?
一言でいうと「得られるものが少ない」と感じてしまったからです。
(さらっと言ってますが1週間は真剣に悩みました。)
個人的に引っかかっていた問題は
- 技術がレガシー
- 英語を学べる機会が少ない
と言う点でした。というのも、選考を進めていく上で、
- Objective-Cがメインのプロジェクト
- CIを導入していない
ということがわかり、レガシーなものを保守するモチベが自分にないのと、将来を考えた時に為にならない気がしたからです。
また、従業員に外国人がいるのかと思っていましたが日本人しかおらず、しかも現地にいるのにリモートゆえ、言語に触れる機会がないため勉強は自分次第な所が多く、日本で働きながら勉強しているのとそんなに変わらないなと感じてしまったのです。
(なんならドイツは税金が鬼高いので、その分を日本で自己投資した方が安いなと思ってしまった。)
それ以外にも
- 思っていたよりドイツ語をやる必要がある
- 思っていたよりAndroid開発をやるモチベが高くない
という点もありました。
Android開発は昔やっていたとはいえ、もう一度ちゃんと勉強し直しながら、英語もやって、生活のためにドイツ語もやって、というのが、全部中途半端になりそうだなと思ってしまいました。。
正直に言うと、かなりのホワイト企業で日本で働くよりも断然おすすめです!ドイツにエンジニアとして長居する気があるなら良いですが、自分としては通過点としか考えていなかったので、お断りさせていただいた次第でした。
6. 後書き
海外で働くことの意味を改めて考える機会としてはすごく良かったです。
なんだかんだで現職のメリット・デメリットも改めて再認識できたので、情報収集をする意味でもこういう体験は良かったなと思います。また、自分の実力が通じるのかどうか測ることができ、自信にもつながる気がします。
この備忘録が、今後海外で働きた人向けの1つの参考になればと思います。
7. その他・文献
選考に臨むにあたり、いろいろと調査して出てきた面白かったものを記載しておきます。
アメリカでの就労ビザの話などが載っていて面白いです。
->世界で戦うエンジニアになるために
ベルリンでエンジニアをされている方で情報発信をよくされています。
-> Twitter -ジャバ・ザ・ハットリ
ドイツでエンジニアになった方がどういう選考だったかを記載しています
->ドイツ・ベルリンに移住してエンジニアの仕事を見つけるまで
追記
同じ会社のオランダ支社でiOSエンジニアとして働かれてた方のようです。
興味がある方はコンタクトを取ってみると良いかと思います。
貯金します!