コロナ禍で未経験から海外でエンジニアとして就職するまでの全記録〜自己PR・面接編〜
このブログはコロナ禍でエンジニア未経験の状態からカナダ・バンクーバーでフロントエンドエンジニアとして就職するまでの記録を綴ったものです。こちらの記事は3部構成の3部目です。大変長い記事ですので、目次を利用して拾い読みしたりして、興味のあるところからお読みいただければと思います。
自分を売り込む力
今回は就職活動の際にどのように自分を売り込んでいったかについてシェアします。job offerをゲットするためには、自分という人材がいかに魅力的かわかってもらい、「この人と働きたい!」と思ってもらえなければいけません。
例えば、あなたが面接官だとして、候補者から「エンジニア未経験ですが、がんばります!」と言われても、どこにも雇う理由が見つからないと思います。面接では、面接官に「なぜあなたを雇う必要があるのか」を理解してもらう必要があります。
仕事経験>>>>>>>>>個人プロジェクト
いきなり酷なことを言うようで申し訳ないのですが、新卒採用がない欧米では、個人プロジェクトや学校での課題よりも圧倒的にプロフェッショナルな経験が重視されます。
「経験がないから未経験者なのであって、未経験者なのに経験をアピールするなんて無理な話じゃないか!!」と思うかもしれません。本当にその通りです。その通りなのですが、採用側からすればとにかく即戦力が欲しいのです。(私が未経験からの海外就職を勧めない理由の1つがこれです。)
それでも未経験で挑戦するのであれば、どうにか仕事に近いような経験が積めないかどうかを検討するといいと思います。
・ 現地でのボランティアワーク(無給インターン)
・日本からのフリーランス案件
・知人に仕事という形で何かを依頼してもらう
・ハッカソンなどでチーム開発
・OSSへの参加
実際に働く時の状況から逆算すれば、どういった経験が評価されやすいかがはっきりしてくると思います。
個人開発よりも、チーム開発。
友人とのプロジェクトよりも、プロフェッショナルとしてのプロジェクト。
日本での経験よりも、 現地での経験。
自分が可能な範囲で、どうにか「学校(または独学)で勉強しただけの人」というイメージを打ち破るような経験ができるように、道を模索して欲しいと思います。
自分を売り込める場所
自分をアピールする方法はいくつもあります。特にコロナ禍、そしてコロナ後の世界では以前よりもネット上でのプレゼンスが大切になってくると思います。使えるものはなんでも使って、自分の存在を知ってもらえると良いです。
・レジュメ(必須)
日本でいう履歴書です。求人に応募する際に必ず必要となります。人事がレジュメに目を通すのは平均6秒以下と言われているので、短時間で情報を頭に入れてもらえるような形に仕上げる必要があります。
自分でわかりやすいかどうかを判断するのは難しいので、第三者に目を通してもらうことをおすすめします。その第三者は、英語ネイティブかつ、デベロッパーの採用経験があると、なお適切なフィードバックをもらいやすいです。ちなみに、私はレジュメの作成にはCanvaを使いました。
レジュメはあなたのことを知ってもらう入り口となるので、ここで何かしら応募するポジションと関連のある経験をアピールできると良いです。(そのため、仕事経験の重要性を先に述べました)
・GitHub(必須)
必ず見られるので、いつ見られてもいいようにメンテナンスしておくのが良いと思います。Readmeは読みやすいか?コミットメッセージ は適切か?(特にチームプロジェクトの場合)、どんなissueを出しているのか?などなど。例えば、スター数の多いリポジトリを覗いてみて、自分が盗めるものはないか検討してみるのもいいと思います。
・LinkedIn(必須)
日本ではあまり馴染みがないかもしれませんが、LinkedInはビジネスプロフェッショナルをつなぐFacebookのようなSNSです。これも用意するのは必須だと思います。Asumiさんのブログでその有用性をわかりやすくまとめてくれているので、ぜひチェックしてみてください。
・ポートフォリオ
最近ではポートフォリオサイトを用意しないエンジニアの方も増えてきているようで、作った方がいいかどうかは目標次第かなと思います。私の場合はフロントエンドエンジニアを目指していて、デザインにも興味があり、自分がデザインにも気を配れるということをアピールもしたかったので、作りました。先にも書きましたが、デザインはBestfoliosというサイトを参考にしました。
・ブログ
私は自分の学んだことをアウトプットする場としてMediumを利用していました。主に、自分の知識の定着と、自分の思考のプロセスをアピールするために使っていました。面接官は結構ブログを読んでくれていることが多かったので、書いてみるといいかもしれません。
・その他SNS
ツイ廃のひとはTwitter、動画制作が好きな人はYouTubeなど、自分の特技を生かして、自由な発想で自分をアピールしてみてください。既存のやり方にとらわれる必要はないですし、むしろ人と違うことは武器になります。
前回の記事で書きましたが、私は#100DaysOfCodeというTwitterのハッシュタグを使って、自分が学んだことをアウトプットしたりしていました。
・OSSへの参加
私はこれはやりませんでしたが、OSSへの参加勧める先輩は多かったです。自分の興味があるプロジェクトがあれば、日本語への翻訳など簡単なことでもいいので参加してみるとよいと思います。
とにかく目立て
先にも書いたように、基本的には企業は即戦力が欲しいので、未経験の人に用意されている椅子の数はものすごく少ないと思った方が良いです。相対的に争いは激化しやすく、数ある応募者の中から採用官に選んでもらわなくてはいけません。(コロナなどの打撃があれば、尚更それは加速します)つまり、「みんなと一緒」は、埋もれる道を選ぶことになります。自分を見つけてもらえるように、できるだけ人とは違う工夫ができると良いと思います。
参考までに私がしてきたことを書いておきます。
・少しでも目に止まりやすいようにポートフォリオをユニークなデザインにする
・自分が作ったサービスをProduct Huntにローンチする
・ミートアップで自分が作ったサービスのプレゼンをしてコネクションを作る。ついでにフィードバックをもらう。
・ブログに自分の学んだことを書く
・他のジュニアデベロッパーが手をつけていないようなtech stack(私の場合はテスト)に触れてみる
・求人に応募する場合はLinkedInで社員または人事をみつけて直接メッセージする
・採用プロセスで答えられなかった問題は後で解き直して送る
どれも小さな工夫ですが、人と差がつくようなポイントをいくつも作ることで「他の誰かではなくあなたを採用する理由」が少しずつ増えていくと思います。
ネットワーキングでコネを作る
コネはめちゃくちゃ大事です。通常、Indeed、LinkedIn、Glassdoorなどの求人サイトから応募することが多いですが、実はネット上には出回っていない求人もたくさんあります。所謂リファラル採用というもので、社員の紹介で採用が決まるケースは多いです。採用まで直結しなくとも、社員の紹介があると一次面接を免除されたりすることもよくあります。ネットワーキングに役立ちそうなことをいくつか挙げておきます。(カナダ・バンクーバーでの例です)
・ミートアップ
コロナ前は毎月なにかしらのテックイベントが行われていていました。2021年10月現在少しずつリアルイベントも戻ってきていますが、オンラインイベントが以前よりだいぶ増えている印象です。
実際にミートアップから面接につながったこともありますが、ただなんとなく参加すると無料のピザを食べて帰ってくることになってしまうので、話のきっかけとして、何か興味を持ってもらえるトピックを持っているといいと思います。私の場合は今自分が作っているサービスについて軽くプレゼンをして、フィードバックをもらったりしていました。
登壇があるようなイベントでは、それに関する質問などをしてみるのもいいと思います。もちろん、直接オープニングポジションがないか尋ねるのもよいです。ミートアップの参加者ではなく、運営スタッフとして関わるという方法もあるので、気になるイベントがある場合は、運営スタッフに連絡をとってみるのも良いでしょう。
ミートアップの情報は以下のプラットフォーム、または後述するSlackコミュニティーでアクセスすることができます。
・Slackコミュニティ
頻繁にイベントのお知らせや求人のお知らせがあります。求人の場合はキーパーソン(人事やテックリード等)に直接連絡をとることができるので、うまくいけば面接までダイレクトにつながります。定期的にチェックするのがお勧めです。私がよく見ていたものを載せておきます。
・学校の紹介
もし学校に通う場合は、学校からの紹介で就職が決まることもあります。就職アドバイザーなどに自分がどういうポジションを目指しているか共有したり、普段からコミュニケーションをとっておくと仕事を優先的に紹介してくれたりもします。
求人サイトから応募する
可能であれば先に述べたようにネットワーキングやSlackコミュニティからキーパーソンに直接アクセスできる方が確度は高いと思いますが、とはいえ、基本的に求人サイトにある求人から応募することになると思います。ここでは、よく利用される求人サイトをあげておきます。
Indeed
Glassdoor
https://www.glassdoor.ca/index.htm
AngelList
スタートアップが企業の求人が多い印象です。
https://angel.co/
LinkedIn
https://www.linkedin.com/jobs/
CraigsList
無料で 広告を掲載できるために求人の質は高くないです。人集めに困っている・賃金が安い企業が多い印象なので少し注意が必要。逆に言うと、すぐにでも人を雇いたい企業が多く、とりあえず働く経験が欲しいと言う人はいいかもしれません。
https://vancouver.craigslist.org/d/jobs/search/jjj
Google Jobs
上記の求人サイトにあるものをほぼ全て網羅して一箇所で表示してくれるので、色々と見回る必要がなく便利です。就活中よく使っていました。
(求人の管理方法)
応募したらスプレッドシートなどで応募した内容を管理しておくとよいです。あとで見返した時に、自分の勝率がわかったり、改善のための分析に使えたりします。求人サイトのページはすぐにリンク切れになるので、募集要項をコピペしてテキストとして保存しておくことをお勧めします。
面接対策でやったこと
よくある面接の質問への答えを準備しておく
ググればたくさん出てきますが、Tell me about your self.など一般的な質問に対する答えは文章にまとめて、何回も口に出して練習していました。
JavaScriptの質問集
https://github.com/yangshun/front-end-interview-handbook/blob/master/contents/jp/README.md
リンク先の、3.JavaScript に関する質問にざっと目を通してました。英語も日本語もあるので好きな方で見ると良いと思います。
JavaScript練習問題集
https://kenjimorita.jp/javascript_study/
JSの基礎固めとして、 こちらをコツコツ問いていました。LeetCodeでも良いと思いますが、JSだとやり辛いなぁと感じたので私はこれを問いてました。
改訂新版JavaScript本格入門
JavaScriptの総復習として読みました。わかったつもりになっていたことの理解を深めるのにおすすめです。
JavaScript Primer
https://jsprimer.net/
JSをより深く知りたいと思ったときに索引的に使ってたまに読んでました。
React Interview Questions & Answers
https://github.com/sudheerj/reactjs-interview-questions
Reactの知識問題です。これもざっと目を通しておきました。こんなの訊かれるのかな?と思ってたのですが、実際面接で何回かReactの知識問題に出会いました。
React公式ドキュメント
https://reactjs.org/
Reactに慣れてきた後、たまにドキュメントに戻って理解を深めていました。前に読んでもわからなかったことがわかるようになったりして、何度読み返しても発見があって面白かったです。
自分がやってきたことの棚卸し
就活のレジュメを作る際に、自分のやってきたことを全て書き出しました。募集要項と照らし合わせて、その中から募集要項にマッチしそうなものを抜き出してカバーレターに書いたり、面接中のトークの材料として使えるようにしました。
面接で聞かれた質問
私はフロントエンドの求人に絞って応募していましたが、アルゴリズムの問題に遭遇することはかなり少なかったです。意外と出たのは、JavaScriptやReactに関する知識問題。あとは、何回か課題が出ましたが、APIコールをして、取得情報を指定された形で表示するものが多かったです。(例えば、あるAPIをコールして取得したデータを全てカード形式で表示する。ソート機能や、検索機能もつける。のような内容です。)フロントエンドに限っていうのであれば、この課題のような形式のプロジェクトをゼロから作る体験を何回かしておくと、いざ課題を解くときにうろたえないのではないかと思います。参考までに、面接で聞かれた質問を覚えている限り列挙しておきます。
・なぜこのポジションに応募したのですか?
・ 新しい知識を取り入れるために何をしていますか?
・コミットするときに何を気をつけていますか?
・今まで開発していく中でぶつかった問題は何ですか?どうやって問題を解決しましたか?
・デザイナー からの質問。デザインに不具合があったとして、それをどのように私に伝えますか?
・Reactとはなんですか?
・Virtual DOMとはなんですか?
・Reactがclass componentからfunction componentに移行した理由はなんですか?
・ReactがJSのフレームワークとして多く採用されている理由はなんだと思いますか?
・ Reduxの仕組みを説明してください。
・ Reactについてあなたがまだキャッチアップしてない知識はありますか?
・JavaScriptの'this'は何を指しますか?
・setTimeout()がglobal objectに属するのはなぜですか?
・ 配列に入っている全ての値を足して合計を出してください
・(課題)JavascriptとこのAPIを使って、ドロップダウン形式で株の銘柄を選び、現在の株価と会社説明を表示するSPA(Single Page Application )を作ってください。
やっておけばよかったこと
就職するまで全力疾走で駆け抜けてきたので、ほとんど後悔はないのですが、もし今過去に戻れるのだとしたらやっておきたいことも挙げておきたいと思います。
ボランティアワーク・インターン
私は在学中ボランティアやインターンには目もくれずひたすら個人開発をしていましたが、もっとコネを作る努力ができたかもしれないと少しだけ後悔しています。ミートアップも悪くはないのですが、自分の働きぶりをみてくれる人がいるというのは、より強固なコネクションになるはずです。直接採用につながらなくてもリファレンスがもらえると思うので、その点でも良いです。
チーム開発
学校のカリキュラムを最初から無視していたので、チームプロジェクトの経験が浅く、就職活動が始まってもGitの使いかたに不安があったりしました。就職後は当然チームで開発を進めていくことがほとんどなので、もう少し真剣にやっておけばよかったです。
求人からの逆算
就活の終盤でrequirementsを集計してそこから逆算して勉強内容を決めたのですが、これは最初にやっておくべきでした。そんなに手間がかかることではないので、早いうちに求人をみて、そこから逆算して学習計画を立てられるとより良かったと思います。
TypeScript
募集要項としてTypeScriptの経験を求める会社も多いので、求人から逆算していれば早めに学習内容に取り込めたはずでした。私は、終盤になってからTypeScriptに手をつけ始めたので、変に苦手意識が出てしまい、この点は後悔しています。早めにTypeScriptを使った型アリの書き方に慣れておくといいと思います。
その他の参考になるかもしれないこと
経験者のデバッグを側で見る
振り返ってみるとすごく良い勉強になっていたなと思うことの1つが経験者の人がデバッグする様子をすぐ隣で見れたことです。経験が浅いと、エラーが起きた際にデバッグの仕方が甘く、解決できないという局面に何度も遭遇すると思います。そういう時に、経験者の人がどのように問題を解決するのか、結果ではなく、工程を見れるとすごく勉強になると思います。
具体的にいうと、
1. エラー文を読む
2. エラー文で示されているコードの行を読む
3. コードを読んでもエラがわからなければ、console.logなどを使ってどの処理がどこで止まっているかを詳細に追う。この時に、理由を明確に言えるレベルまで原因を追求することがとても大事です。(例えば、関数に引数がうまく渡っていないのだとすれば、何が原因で渡ってないのか、理由を言えるまで追求すること)
4. それでも解決しなければググったり、人に訊いたりする(3と4は順序を入れ替えた方がいい場合もあります)
私は経験者のデバッグを見た時に、3の工程の精度が自分と経験者の差だと感じました。「エラーの原因が何なのか一言で言えるレベルまで追求する」これができると少しレベルアップするような気がします。
※その他、執筆後に思いつくことがあれば随時付け足していくことにします。
最後に
大変長い記事になってしまいましたが、ここまで読んでいただきありがとうございました。
こんなに長い文章を読むのはしんどかったと思いますが(全部読んだ人がいるのかわかりませんが笑)、書いている本人も、あまりにも色んなことをやってきたので書くのが本当にしんどかったです。それでもなんとか書き上げられたのは、自分が辛かった時にに助けてくれた先人の方々がいたからです。
今回の挑戦に際して、たくさんの先人の方の記事を読んだり、アドバイスをいただいたりしました。その際、何一つお返しできなかったのですが、多くの方が「pay it forward(誰かから恩を受けた場合、その人に恩を返すのではなくて、その恩を別の人に送ること)」だと言ってくれました。何も持っていない自分に手を差し伸べてくれた人たちに対して、純粋に「なんてかっこいいんだろう!」と思いましたし、そういう憧れや感謝が、このブログの執筆を大きく後押ししてくれました。この記事の中に何か少しでも役立つことがあれば幸いです。
そして、もしこの記事が役に立ったら、ぜひあなたも次に挑戦する人たちのために道を作る人になってほしいと思います。自分の道を走り切った後、いつかふと「pay it forward」という言葉を思い出してくれたら幸いです。皆さんの挑戦を心から応援しています!