どうもです。
ギリギリです。
前回、前々回に続いて今日も以前もらった質問に答えます。
前回2回分はこちら:
【Q&A】オーストラリア移住を目指す人からの質問に答えました その1
【Q&A】オーストラリア移住を目指す人からの質問に答えました その2
Index
市場価値の高い人間になるには
オーストラリアでエンジニアとして働いていらっしゃった方に、オーストラリアでフィンテックが盛んだと聞いたので、次に転職するとしたら、フィンテックの会社や伸びている、モダンな環境で開発している会社さんなどを検討しています。その業界独特の開発の仕方などもあるかと思うのですが、どのような業界で今後、DXが進んでいくか、や、どのような業界で経験を積んでおくと市場価値の高い人材になれるか、など、ギリギリさんの感覚でご存知でしたらお教えいただけたら嬉しいです。
フィンテック
まずはフィンテックの話から。
フィンテックが盛んというのは、いまAfterpayとかZipとかその他新しい銀行などがでてきているからですかね。
オレは聞いたことないですが。
その界隈ではそうなんでしょうきっと。
フィンテックだと銀行系システムがまず思い浮かびます。
実際に働いたことがないのでわかりませんが、銀行系システムだとトランザクション処理がメインになるのかな。
おそらく、比較的新しいシステムであればイベントソーシングやCQRSを利用して入出金を処理しているんじゃないでしょうか。
参考:https://postd.cc/using-cqrs-with-event-sourcing/
古くからあるCRUDとは違う考え方です。
なので、フィンテックで働きたいならイベントソーシング、イベントメッセージ、メッセージストリーミング、CQRSなどを調べ、その関連知識や技術も知っておくと良さそうです。
製品だとApache Kafka、Microsoft EventHub、EventStoreとかですかね。
正直大した知識がないのであまり深いことは言えませんが、この辺の単語を手がかりに調べ始めるといいでしょう。
市場価値の高い人間とは
・・・どのような業界で経験を積んでおくと市場価値の高い人材になれるか、など、ギリギリさんの感覚でご存知でしたらお教えいただけたら嬉しいです。
正直言って、オーストラリア内で市場価値の高い人材がどんな人間なのかよくわかりません。
日本内でもよくわからない笑
「どのような業界で経験を積んでおくと市場価値の高い人材になれるか」ということですが、特定の業界で経験を積んだなら、その業界での市場価値は高くなるのは自然かと思います。
開発時に学んだ顧客のビジネスに関する専門知識は、同じ業界でならいつか役立つ時がきます。
そういった知識や経験があればあるほどその市場での価値は高まるでしょう。
しかし、それが別の業界で通用するかは別の話。
この業界をやっておけば安泰、みたいなのはないでしょうね。
業界に関係なく、もう少し一般的な「価値のある技術者とは」を考えてみます。
今までの経験からすると、日本ではなんでもまんべんなくできるなんでも屋が重宝され、オーストラリアでは特定の分野で高いスキルを持つ人が重宝されると思います。
なので、自分の好きな言語、フレームワーク、サービスをある程度しぼり、それらのスキルを伸ばすことで、それらを使うシステムで自分の強みを活かせる=価値がある技術者になれるのかなと思います。
他にも、Web系アプリ、モバイルアプリ、フロントエンド、バックエンド、DevOps、セキュリティなどいろんな分け方ができます。
製品やサービスだけでなく、どういった種類のシステムやソフトウェアのどの部分に関する知識をより深めるかという観点からも考えてみると面白そうです。
あとは手法や理論も深い知識があるほどいいです。
例えばDDD。
技術以外の部分、つまりソフトスキル(時間管理、優先度付け、理解力、コミュニケーション能力など)に関しては、日本のクソみたいなところで働いたことのある人ならおそらく心配はいらないと思います。
日本で3~5年働いたら、(コミュニケーション能力はさておき)ソフトスキルはこちらのシニアレベルといっても問題ないくらいになっているはずです。
日本だと「おら仕事だ行って(逝って)こい」という上司の一言とともに戦場という名の職場に配置され、炎上するプロジェクトに消火器の使い方も怪しいような人たち数人~十数人とともに、毎度おなじみ役に立たない人海戦術で火の手を抑えようとするという狂気じみた行為が日常的に行われています。
そういった場では、技術力の高さよりも正確で素早い状況判断と決断力、理解力(いま何をすべきかなどをすぐ理解できる)、時間管理、そして何より1日5時間程度の睡眠でも1ヶ月くらいは働ける気力と体力が大事です。
コードの質とか二の次で、とにかく期限を死守するために機能の実装のみを目指すみたいな現場はよくあります。
そして、こうして書かれたコードが次の惨劇を生む。
こういう現場を経験していると、多少のことがあってもそれなりに対応できるようになるので、こちらでの仕事は楽に感じるかもしれません。
体力的な面では尚更そう感じるでしょう。
嬉しいんだか悲しいんだか。
一点気をつけるべきことは、時間の使い方。
こちらだと基本的に8時間働いて家に帰るので、もし家に仕事を持って帰れない場合は職場で全て完結させなければなりません。
日本の頃と同じように残業ありきで時間を見積もるとまずいですね。
残業を頻繁にしているオレが言うのもなんですが、仕事は仕事時間内に!
8時間で終わらせるための努力をしましょう。
DX・・・
その業界独特の開発の仕方などもあるかと思うのですが、どのような業界で今後、DXが進んでいくか
DX(Digital Transformation)という言葉、初めて聞きました。
この質問に答えるのは難しいです。
真面目に答えようとするとそれなりに調べたりすることになるんですが、そこまではちょっとできないな・・すいません怠け者です。
個人的な希望という観点から少し話をするなら、農業でITやIoTなどのハイテク機器やシステムを利用した製品、手法、サービスなどがでて変革をもたらしてほしいなと思います。
AgriTechってやつですね。
オーストラリアでは作物の収穫に関して移民やワーホリにかなり強く依存しています。
2週間くらい前にみたニュースでは、ワーホリがいないせいで作物の収穫が大幅に遅れる可能性が高いとか、時間内に全て収穫できなさそうだと農家の人が嘆いていました。
人手不足や後継者不足、その他技術的な問題を解決または大幅に改善するような何かが起き、オーストラリアの農業が改善され、守られていくと嬉しいです。
豪での転職活動前にするといいこと
2~3年後にオーストラリアで転職活動を始めたいと思っているのですが、ギリギリさんなら、どのような転職や経験を積むための自主開発などをされますでしょうか。
これなら答えられます笑
自主開発するものは簡単なものでもOK
自主開発については、自分の強みがわかるようなものならどういうものでもいいと思います。
簡単なシステムでもいいと思います。
作ったらGitHubに自分のコードをあげて公開しておきましょう。
会社側がGitHubの自分のページがあるか聞いてくることがあるので。
求職時には、GitHubのリンクをレジュメに載せておくといいです。
企業側がGitHubを見る時はたいていコードのレベル(読みやすさ、設計など)を見たいので、できるだけきれいなコードを上げておきましょう。
もし特定の業種、例えば上で触れたフィンテックなどに興味があるなら、その業界でよく使われる技術や手法を使ったシステムを上げておけばよりアピールできそうです。
リポジトリの名前もわかりやすくして、目にとまるようにするとよさそうですね。
自主開発以外でしたほうがいいこと
自主開発も大事ですが、他にもしておいたほうがいいことがあります。
- テストを書く練習(単体試験、できれば結合試験も)
- CIに関する基礎知識を身につける
- アジャイル開発に関する基礎知識を身につける(できればワークショップなどに参加して体験を)
- HackerRankのようなサイトで技術面接対策をしておく
- コミュニティに参加したり、既存アプリの開発に携わる
テストコードを書くことは実装の一部
テストを書く練習とは、自分の書いたコードをテストするコードを書くという意味です。
日本でも今はおそらく一般的になっていると思いますが(というかそう思いたい、まじで)、単体試験や結合試験はコードでテストします。
なので、良いテストとは何か、どう書けばいいのかなどをしっかり抑えて実際にテストコードを書く練習をしておくといいです。
特にいまはCI/CDでの開発が一般的で、機能の実装と単体試験は1セットとして考えられますからね。
テストがかけないと実装が終わらないので、仕事が終わらないです。
就活に直接役立つものではないかもしれませんが、仕事に就いてから「テストとは」と言うようではさすがにあれだし、テストコードは開発をする以上必ず書くものなので、学んでおくことを進めます。
面接でテストについて聞かれたり書くよう言われることもあると思います。
オレが面接官の時はテストについて質問していました。
良いテストとは何かも学んでおくといいでしょう。
意味のないテストや壊れやすいテストを書くと品質が落ちるだけでなく、直すために余計な工数を必要とするためよくありません。
オレが日本で新人~数年目の頃はエクセルで試験表を作って人間がそれに従って操作をしてテストするという、今の時代からすると恐ろしく非効率な試験をしていました。
当時は今ほどテストコードとかテストの自動実行とか発達してなかったのでしょうがない。
今でも日本ではこういうテストするところが多いんでしょうか。
ウォーターフォール開発使って気合と根性で試験をこなし、結果デグレだらけのシステムを作っている企業の方が未だに多そうなイメージあります笑
アジャイルとCI/CDの基礎知識は身につけておきたい
CIとアジャイルに関する基礎知識も大事なものです。
オーストラリアではアジャイルでの開発が一般的なので、アジャイル開発についての基礎があればチームメンバーとしてある程度機能できると思います。
アジャイルは実際に経験してみないと分かりづらいので、可能ならワークショップとかで学びつつ体験すると良さそうです。
Scrumが一番有名で多くの企業で使われるアジャイルの手法(フレームワーク)です。
Scrumを学んでおけばひとまずOKでしょう。
CI/CDについても、基礎知識はつけておきましょう。
開発ではごく一般的なものです。
もし時間と興味があれば、無料で使えるCIサーバとかをいじってみるといいかも。
これらを完璧に身につける必要はありません。
就活中、オンラインで出される課題に対応できるよう準備を
最後にHackerRankについて。
オーストラリアの面接プロセスでは、どこかの時点で必ずと言っていいほど技術力を見ます。
その際、会社が課題を出すことがあるんですが、その課題がHackerRankや似たサイトで出されることがあります。
こういうサイトで出される課題って、慣れてないと意外とできないんですよね。
就活の数ヶ月前から少しずつでいいのでHackerRankや類似サイトで問題を毎日数問解くといいでしょう。
こういうサイトで出される問題は、その言語の基礎の復習にもなるのでおすすめです。
よく使われるメソッドとか、自分の知らない活用できそうなメソッドが学べるし、他人のコードを見て学ぶこともできるので勉強になります。
面接官の前でコーディングする際に、これらのサイトで学んだことが生きると思います。
コミュニティに参加したり、既存アプリの開発に携わる
これはちょっとレベルが高いかもしれませんが、例えばソフトウェア開発関連コミュニティに参加して知り合いを増やしたり、勉強会に参加したりするといいです。
同業の知り合いを増やすと、そのつながりでネット上にはでてこない求人の話がもらえることがあります(その人達に認められていれば)。
オーストラリアでは、hidden marketといってネットに出てこない求人が多数あり、求人全体の7割近くを占めると言われています。
IT業界での割合は不明ですが、横のつながりがあれば意外な求人に繋がるかも知れません。
既存アプリの開発への参加は、オーストラリアでの職歴がない人にはいいと思います。
就活時、オーストラリア国内での開発経験がある方がより有利です。
例えばボランティアとかでもいいので経験をしておくと、レジュメにかけるのでいいでしょう。
今までやってきたことについて説明できるように
職歴がある人は、やってきたことや使った言語やフレームワーク、方法論や開発論についてしっかり説明できるようにしておいてください。
普段何気なく書いているコード、なぜそう書くのか説明できますか?
面接で聞かれた時「みんながそう書いているから」ではちょっとまずいですよね。
今まで使ってきたサービスやアーキテクチャなどを説明でき、自分がそのシステムの中で何を担当し、どういうことをしてきたか、そしてそれについてしっかり説明できるようにしておきましょう。
今日はこのへんで。
では!