未経験からアメリカでソフトウェアエンジニアになるまで
Published: 2022-07-18 17:23:21

僕は未経験から日本の大学（文系）を卒業後、約2年間エンジニアになるための勉強をしました。そして現在、アメリカのスタートアップでソフトウェアエンジニアとして働いています。僕自身の行動ベースですが、どうやってエンジニアになれたのかポイントを絞っておおよそ時系列順に紹介したいと思います。

これからアメリカでエンジニアを目指す方の助けになれば幸いです。

まずアメリカで働くには何が必要か、というところをはじめに簡単に紹介していますが、既にご存知の方は飛ばしてください。


### 目次

#### 1. [アメリカで働くために必要なもの](#アメリカで働くために必要なもの)
##### 1-1. [ビザ](#ビザ)
##### 1-2. [技術力](#技術力)
##### 1-3. [英語力](#英語力)

#### 2. [アメリカの会社にアプライするまで 行動面](#アメリカの会社にアプライするまで①行動面)
##### 2-1. [LinkedIn作成](#LinkedIn作成)
##### 2-2. [コンピュータサイエンス系の学位取得](#コンピュータサイエンス系の学位取得)
##### 2-3. [必要なスキル情報の収集](#必要なスキル情報の収集)
##### 2-4. [コネクション作り](#コネクション作り)
##### 2-5. [ブログ作成](#ブログ作成)
##### 2-6. [ポートフォリオ作成](#ポートフォリオ作成)
##### 2-7. [面接対策](#面接対策)

#### 3. [アメリカの会社にアプライするまで 技術面](#アメリカの会社にアプライするまで②技術面)
##### 3-1. [コーディング](#コーディング)
##### 3-2. [コンピュータサイエンスの基礎](#コンピュータサイエンスの基礎)
##### 3-3. [プロジェクト作成](#プロジェクト作成)
##### 3-4. [アルゴリズム](#アルゴリズム)
##### 3-5. [その他](#その他)
#### 4. [まとめ](#まとめ)

### 1.
##アメリカで働くために必要なもの
まずアメリカでエンジニアとして働くためには、重要順で
ビザ>技術力>英語力
だと個人的に思います。順番に僕の場合はどうやってここをクリアしたか書いていきます。

#### 1-1.
###ビザ
ここが一番重要かつ難易度の高いところです。いくつかアメリカで就労するための方法はありますが、ここに関しては割愛させていただきます。
ちなみに僕は、チートですが、アメリカ市民と結婚していたため、クリアできました。

#### 1-2.
###技術力
この記事ではここにフォーカスしています。
技術力以外にも、コネクションや経験的なところがアメリカでは重要視されるところがあるので、僕がどうやって0から作り上げたかを書いていきます。

#### 1-3.
###英語力
ここはとにかく頑張りました。ただ僕の面接の経験からすると、単語の豊富さや流暢さよりも何を考えているのかを伝えられることが大切だと思うので、面接対策で対応できることが多いかと思います。


### 2.
## アメリカの会社にアプライするまで①行動面
ここからは実際に僕がアメリカでソフトウェアエンジニアになりたいと思い始めて、どうやって2年弱でエンジニアになれたかを書いていきます。
僕自身、ビザの問題がなかったというケースなので、一部参考にできないところもあるかと思いますが、実際にアメリカで就職できた人が行ったこととしてご覧ください。

#### 2-1.
###LinkedIn作成
まず第一歩として、
[LinkedIn](https://www.linkedin.com)というビジネス版Twitterのようなサービスにアカウントを登録しました。
ここに自分の経歴やスキルなどを載せておくと、オファーが来たり、また自分に合ったジョブリストを見られたりします。僕はLinkedInから数十社アプライして、3社ほど面接まで辿り着けました。

#### 2-2.
###コンピュータサイエンス系の学位取得
コンピュータサイエンスの学士号取得を目的に、University of the Peopleというオンラインの大学に通い始めました。
アメリカでは全てではないかもしれませんが、取得した学位が重要視される傾向があり、ソフトウェアエンジニアになるためにはコンピュータサイエンスの学部を卒業していることが条件となっている企業もあります。
ただ、オンラインの大学では、卒業してもアメリカで働くための資格(OPT)が取得できないため、卒業後のビザ目的としてUniversity of the Peopleはおすすめはできないです。

#### 2-3.
###必要なスキル情報の収集
LinkedInや、Indeed、AngelListなどアメリカの求人サイトへ行き、'software developer'には何が必要なのかの情報を集めました。
求人から何のスキルが必要かを見ることで、勉強する内容、どれくらいかかりそうか、が見えてきて計画を立てやすくなります。
Juniorレベル（経験年数が3年までくらい）の求人だと、
- データ構造とアルゴリズムの理解
- JavaScript, Python, Javaなどの理解、または開発経験
- SQLおよびNoSQLの理解
- RESTまたはGraphQLの理解と開発経験

などが条件となっているところが多い印象です。それらをまとめて何を勉強していくかの計画を立て、少しづつ勉強を進めていきました。


#### 2-4.
###コネクション作り
LinkedInや、Twitter、Facebook、オフラインなどでエンジニアコミュニティに入る、海外で働いている方に声をかけるなどで繋がりを増やしていきました。
繋がりからエンジニアとして成長できる機会ができたり、アメリカでの就職につながったりすることがあります。
僕の場合は、[Yuyaさん](https://twitter.com/yuyaohshimo)というカナダで活躍されているエンジニアの方に出会い、アメリカでの就職が叶いました。
技術系の他にも、アメリカでの就職事情や、他のエンジニアコミュニティなど様々なことを教えてもらいました。そしてYuyaさんの紹介で、今の会社にも就職できました。今でも時々お世話になっていて、本当に良い出会いだったと思います。繋がりからチャンスが生まれる可能性もあるので是非、積極的に声をかけてみたり、コミュニティに参加してみたりしてほしいです。

#### 2-5.
###ブログ作成
勉強して学んだことを中心にブログ記事を書きました。
学習記録としてブログを書くことで、自分の勉強したことを整理できるだけでなく、考えるプロセス、勉強したことを形に残すことができます。それをポートフォリオに載せることで、考えるプロセスを面接官に伝えることができ、エンジニアとしてのポテンシャルをアピールできるのかなと思います。


#### 2-6.
###ポートフォリオ作成
自分のポートフォリオサイトを作成しました。
アメリカではアプライする時に多くの企業でポートフォリオサイトの提出を求められ、そこに自分のスキルや経験をまとめたサイトを提出します。
僕の場合は、
- 使えるスキル
- 今までの経歴
- 自分で作成したプロジェクト
- ブログ記事
をポートフォリオサイトに盛り込みました。

#### 2-7.
###面接対策
面接で何が聞かれるのかを調べ、対策をしました。
ジュニアポジションの場合、1. 行動に関する質問と、2. 基本知識に関する質問の二種類の質問があると思っていて、検索するとよくある質問集が出てくるので、どちらも対策をしました。
さらに[LeetCode](https://leetcode.com)でアルゴリズムの対策もしました。日本のSPIのような感じで練習量が結果に反映されるので、コツコツと勉強していきました。


### 3.
## アメリカの会社にアプライするまで②技術面
下記では自分自身が使ったサービスベースに何を勉強したか簡単にまとめました。下記のサービスで学習した以外に本を読んだり、分からないところを調べたりしたので、これだけで充分ではないですが、基本的なCRUDアプリ(データの作成（Create）、読み出し（Read）、更新（Update）、削除（Delete）の機能があるアプリ)は作成できるようになると思います。

#### 3-1. 
###コーディング
[progate](https://prog-8.com)でHTML/CSS, JavaScriptの基本を押さえました。
そこまで多く時間は費やさず、1ヶ月ほどやった後、自分で何かのサイトの模写をして基本を学習しました。

#### 3-2. 
###コンピュータサイエンスの基礎
[Recursion](https://recursionist.io)というコンピュータサイエンスを学習できるサービスで、データ構造とアルゴリズム、オブジェクト指向、デザインパターンのようなコンピュータサイエンスの基礎を学習しました。
個人的には、このサービスのおかげで成長曲線を高められ、今でも学んだことが役に立っていると思います。
言語やフレームワークを学習する上でコンピュータサイエンスの知識が必要なことが多々あり、その辺りをカバーしているので、とても役に立ちました。


#### 3-3. 
###プロジェクト作成
[Udemy](https://www.udemy.com)という学習教材サービスで、データベースやAPI、Google Cloud Platformなどの使い方を学習しつつ、プロジェクトを作成しました。
ここからは何のエンジニアになりたいか、などによって変わってくるかと思いますが、僕はサーバーサイドの知識を中心に学習していきました。
多くのコースでは、プロジェクト作成をしながら学習していきます。僕が必ずやっていてた方法は、コースで作成したプロジェクトに、自分で機能を追加することです。理解力に加え、自分で調べる力、考える力、考えたことを実装する力などがついていきます。
その後、自分オリジナルのアプリを作成し、技術力を高めていきました。


#### 3-4. 
###アルゴリズム
[leetcode](https://leetcode.com)でアルゴリズム対策をしました。
[面接対策](#面接対策)でも書きましたが、アメリカの企業では、採用の第一ステップとしてアルゴリズムの問題が出されることがあります。ここは勉強して慣れることで対策できるので、少しづつ勉強しました。


#### 3-5. 
###その他
これらの他にも気になる本を読んだり、知り合ったエンジニアの方に本をお薦めしてもらったり、記事を読んだりしました。ウェブの基礎、データベースの基礎、コードの書き方の基礎のような本を中心に読みました。
今も足りない知識だらけなので、本を読んだり、記事を読んだりして継続的に勉強をしています。

### 4.
###まとめ
かなりざっくりとした説明ですが、僕はこの記事で書いたことを実行してきました。
##### 1. [アメリカで働くために必要なもの](#アメリカで働くために必要なもの)
##### 1-1. [ビザ](#ビザ)
##### 1-2. [技術力](#技術力)
##### 1-3. [英語力](#英語力)

##### 2. [アメリカの会社にApplyするまで（行動面）](#アメリカの会社にApplyするまで（行動面）)
##### 2-1. [LinkedIn作成](#LinkedIn作成)
##### 2-2. [コンピュータサイエンス系の学位取得](#コンピュータサイエンス系の学位取得)
##### 2-3. [必要なスキル情報の収集](#必要なスキル情報の収集)
##### 2-4. [コネクション作り](#コネクション作り)
##### 2-5. [ブログ作成](#ブログ作成)
##### 2-6. [ポートフォリオ作成](#ポートフォリオ作成)
##### 2-7. [面接対策](#面接対策)

##### 3. [アメリカの会社にApplyするまで（技術面）](#アメリカの会社にApplyするまで（技術面）)
##### 3-1. [コーディング](#コーディング)
##### 3-2. [コンピュータサイエンスの基礎](#コンピュータサイエンスの基礎)
##### 3-3. [プロジェクト作成](#プロジェクト作成)
##### 3-4. [アルゴリズム](#アルゴリズム)

コツコツと勉強を進められることは前提に、アメリカでエンジニアになるためには手順を踏んで、勉強する方向性を決めることはかなり重要だと感じました。この記事がアメリカでエンジニアを目指している方の助けになれば幸いです。