未経験からアメリカでソフトウェアエンジニアになるまで
僕は未経験から日本の大学(文系)を卒業後、約2年間エンジニアになるための勉強をしました。そして現在、アメリカのスタートアップでソフトウェアエンジニアとして働いています。僕自身の行動ベースで、どうやってエンジニアになれたのかポイントを絞っておおよそ時系列順に紹介したいと思います。
これからアメリカでエンジニアを目指す方の助けになれば幸いです。
まずアメリカで働くには何が必要か、というところをはじめに簡単に紹介していますが、既にご存知の方は飛ばしてください。
アメリカで働くために必要なもの
まずアメリカでエンジニアとして働くためには、重要順で
ビザ>技術力>英語力
だと個人的に思います。順番に僕の場合はどうやってここをクリアしたか書いていきます。
ビザ
ここが一番重要かつ難易度の高いところです。いくつかアメリカで就労するための方法はありますが、ここに関しては割愛させていただきます。
ちなみに僕は、チートですが、アメリカ市民と結婚していたため、クリアできました。
技術力
この記事ではここにフォーカスしています。
技術力以外にも、コネクションや経験的なところがアメリカでは重要視されるところがあるので、僕がどうやって0から作り上げたかを書いていきます。
英語力
ここはとにかく頑張りました。ただ僕の面接の経験からすると、単語の豊富さや流暢さよりも何を考えているのかを伝えられることが大切だと思うので、面接対策で対応できることが多いかと思います。
アメリカの会社にApplyするまで(行動面)
ここからは実際に僕がアメリカでソフトウェアエンジニアになりたいと思い始めて、どうやって2年弱でエンジニアになれたかを書いていきます。
僕自身、ビザの問題がなかったというケースなので、一部参考にできないところもあるかと思いますが、実際にアメリカで就職できた人が行ったこととしてご覧ください。
LinkedIn作成
まず第一歩として、
LinkedInというビジネス版Twitterのようなサービスにアカウントを登録しました。
ここに自分の経歴やスキルなどを載せておくと、オファーが来たり、また自分に合ったジョブリストを見られたりします。僕はLinkedInから数十社アプライして、3社ほど面接まで辿り着けました。
コンピュータサイエンス系の学位取得
コンピュータサイエンスの学士号取得を目的に、University of the Peopleというオンラインの大学に通い始めました。
アメリカでは全てではないかもしれませんが、取得した学位が重要視される傾向があり、ソフトウェアエンジニアになるためにはコンピュータサイエンスの学部を卒業していることが条件となっている企業もあります。
ただ、オンラインの大学では、卒業してもアメリカで働くための資格(OPT)が取得できないため、卒業後のビザ目的としてUniversity of the Peopleはおすすめはできないです。
必要なスキル情報の収集
LinkedInや、Indeed、AngelListなどアメリカの求人サイトへ行き、'software developer'には何が必要なのかの情報を集めました。
求人から何のスキルが必要かを見ることで、勉強する内容、どれくらいかかりそうか、が見えてきて計画を立てやすくなります。
Juniorレベル(経験年数が3年までくらい)の求人だと、
- データ構造とアルゴリズムの理解
- JavaScript, Python, Javaなどの理解、または開発経験
- SQLおよびNoSQLの理解
- RESTまたはGraphQLの理解と開発経験
などが条件となっているところが多い印象です。それらをまとめて何を勉強していくかの計画を立て、少しづつ勉強を進めていきました。
コネクション作り
LinkedInや、Twitter、Facebook、オフラインなどでエンジニアコミュニティに入る、海外で働いている方に声をかけるなどで繋がりを増やしていきました。
繋がりからエンジニアとして成長できる機会ができたり、アメリカでの就職につながったりすることがあります。
僕の場合は、Yuyaさんというカナダで活躍されているエンジニアの方に出会い、アメリカでの就職が叶いました。
技術系の他にも、アメリカでの就職事情や、他のエンジニアコミュニティなど様々なことを教えてもらいました。そしてYuyaさんの紹介で、今の会社にも就職できました。今でも時々お世話になっていて、本当に良い出会いだったと思います。繋がりからチャンスが生まれる可能性もあるので是非、積極的に声をかけてみたり、コミュニティに参加してみたりしてほしいです。
ブログ作成
勉強して学んだことを中心にブログ記事を書きました。dev.to
学習記録としてブログを書くことで、自分の勉強したことを整理できるだけでなく、考えるプロセス、勉強したことを形に残すことができます。それをポートフォリオに載せることで、考えるプロセスを面接官に伝えることができ、エンジニアとしてのポテンシャルをアピールできるのかなと思います。
ポートフォリオ作成
自分のポートフォリオサイトを作成しました。
アメリカではアプライする時に多くの企業でポートフォリオサイトの提出を求められ、そこに自分のスキルや経験をまとめたサイトを提出します。
僕の場合は、
- 使えるスキル
- 今までの経歴
- 自分で作成したプロジェクト
- ブログ記事
をポートフォリオサイトに盛り込みました。
面接対策
面接で何が聞かれるのかを調べ、対策をしました。
ジュニアポジションの場合、1. 行動に関する質問と、2. 基本知識に関する質問の二種類の質問があると思っていて、検索するとよくある質問集が出てくるので、どちらも対策をしました。
さらにLeetCodeでアルゴリズムの対策もしました。日本のSPIのような感じで練習量が結果に反映されるので、コツコツと勉強していきました。
アメリカの会社にApplyするまで(技術面)
下記では自分自身が使ったサービスベースに何を勉強したか簡単にまとめました。下記のサービスで学習した以外に本を読んだり、分からないところを調べたりしたので、これだけで充分ではないですが、基本的なCRUDアプリ(データの作成(Create)、読み出し(Read)、更新(Update)、削除(Delete)の機能があるアプリ)は作成できるようになると思います。
HTML/CSS, JavaScript
progateでHTML/CSS, JavaScriptの基本を押さえました。
そこまで多く時間は費やさず、1ヶ月ほどやった後、自分で何かのサイトの模写をして基本を学習しました。
コンピュータサイエンスの基礎
Recursionというコンピュータサイエンスを学習できるサービスで、データ構造とアルゴリズム、オブジェクト指向、デザインパターンのようなコンピュータサイエンスの基礎を学習しました。
個人的には、このサービスのおかげで成長曲線を高められ、今でも学んだことが役に立っていると思います。
言語やフレームワークを学習する上でコンピュータサイエンスの知識が必要なことが多々あり、その辺りをカバーしているので、とても役に立ちました。
プロジェクト作成
Udemyという学習教材サービスで、データベースやAPI、Google Cloud Platformなどの使い方を学習しつつ、プロジェクトを作成しました。
ここからは何のエンジニアになりたいか、などによって変わってくるかと思いますが、僕はサーバーサイドの知識を中心に学習していきました。
多くのコースでは、プロジェクト作成をしながら学習していきます。僕が必ずやっていてた方法は、コースで作成したプロジェクトに、自分で機能を追加することです。理解力に加え、自分で調べる力、考える力、考えたことを実装する力などがついていきます。
その後、自分オリジナルのアプリを作成し、技術力を高めていきました。
アルゴリズム
leetcodeでアルゴリズム対策をしました。
面接対策でも書きましたが、アメリカの企業では、採用の第一ステップとしてアルゴリズムの問題が出されることがあります。ここは勉強して慣れることで対策できるので、少しづつ勉強しました。
その他
これらの他にも気になる本を読んだり、知り合ったエンジニアの方に本をお薦めしてもらったり、記事を読んだりしました。ウェブの基礎、データベースの基礎、コードの書き方の基礎のような本を中心に読みました。
今も足りない知識だらけなので、本を読んだり、記事を読んだりして継続的に勉強をしています。
まとめ
かなりざっくりとした説明ですが、僕はこの記事で書いたことを実行してきました。
コツコツと勉強を進められることは前提に、アメリカでエンジニアになるためには手順を踏んで、勉強する方向性を決めることはかなり重要だと感じました。この記事がアメリカでエンジニアを目指している方の助けになれば幸いです。
Discussion
初めまして。現在文系大学2年生の者です。独学でプログラミングを勉強しており、この記事でrecursionとleetcodeの存在を初めて知りました。Shokiさんのように海外就職を目標に技術力だけでなく人脈やロードマップ作りもしっかり考えていきたいと思います!
本当に貴重な情報ありがとうございます!
コメントありがとうございます。
エンジニアの方々は私の感覚ではエンジニア関連の質問や相談などにはウェルカムな方が多いので、何か相談したいことがあれば、メッセージ等を送ってみるといいかと思います。頑張ってください!
初めまして。
日本の文系大学を出て永住権持ちでアメリカに住見始め三年です。今日系貿易と教師の仕事からソフトウェアエンジニア転職の勉強のため切り替えたところで、とても参考になります。coding bootcamp に通い始めても、あまりにも難しく感じることが多いので、不安でいっぱいですが、記事を参考に頑張れそうです。同じ境遇の人がいて良かったです。
こんにちは!
同じ境遇ですね!
最初は難しく感じることが多いかもしれませんが、まずは分かるところから進めていくとだんだんと学習自体が楽しくなってくるかと思います。
僕の場合は、drag and drop付きのtodo listを作成したいと思い、具体的に動作をイメージしながらコーディングをしているとだんだんとできるようになってきました。まずは何かどんな簡単なものでも作ってみるところから始めるといいのかなと個人的には思います。僕もまだまだなのですが、良いソフトウェアエンジニアになれることを願っています!応援しています!
今ちょうどOOPのJavaScript のクラスを勉強していて泣いています。基礎ばかりを勉強しているだけで正直何に使うのか分からず難しいだけなのですが、具体的に何かをイメージするのはモチベーションにとても良いですね!