今回はシリコンバレーでソフトウェアエンジニアへの転職を成功させたSorasukeさんに、どのようにプログラミングを学習し、どのような戦略で転職活動を行ったのかについてインタビューを行いました。
- 将来シリコンバレーでソフトウェアエンジニアとして働きたい
- アメリカに留学中で現地就職したい
- アメリカ企業の採用方針を知りたい
そんな方にSorasukeさんの成功体験をお伝えします。
Sorasukeさん
アメリカカリフォルニア州のコミュニティカレッジに進学し、統計学を専攻。その後、University of California, Berkeleyに編入し、コンピュータサイエンスを専攻。シリコンバレーでソフトウェアエンジニアへの転職を成功させる。
目次
シリコンバレーでソフトウェアエンジニアとして就職するためにコンピュータサイエンスを専攻
――Sorasukeさん、インタビューをお受けいただいてありがとうございます。早速ですが、まずは経歴を簡単に教えていただけますか?
高校までは日本で育ち、その後アメリカカリフォルニア州のコミュニティカレッジに進学しました。統計学を専攻して2年過ごした後、UC Berkeleyに編入。
当初は専攻を変える気は全くなかったのですが、編入後にベイエリアの風に吹かれて大きな決意のもとコンピュータサイエンスへの変更を志しました。なんとか足切りを突破して、4年生になるタイミングで正式にコンピュータサイエンス専攻となりました。
その後休学し、日本でインターンシップ、数学・統計・機械学習の講師、教育系事業の立ち上げなどを経験し数年過ごしました。教育系事業の中でエンジニア業務も一時期していましたが、大部分の時間はそれ以外の作業に費やしていました。
昨春、人生でやり残していることについて自問したところ、UC Berkeleyを卒業しアメリカでソフトウェアエンジニアになりたいと願った自分を思い出し、復学を決意。昨夏よりBerkeleyに戻り、最後の一年を生き抜き、無事卒業しました。
そしてシリコンバレーの企業からソフトウェアエンジニアとしての内定を頂き、今に至ります。
――途中専攻を変えたんですね。コンピュータサイエンスに変更する前はプログラミング経験があったのですか?
コミュニティカレッジに在籍していた際に、データ分析を学びたかったのでRを少し独学しました。本格的にプログラミングを習ったのは、UC Berkeley編入後に受けたアルゴリズムとデータ構造の授業が初です。
――Recursionを始めたのはどうしてですか?
UC Berkeley復学にあたり、かつて授業で学んだコンピュータサイエンスの知識を思い出し、スムーズに復学できるようにしたかったためです。
――Recursion以外のサービスを利用しましたか?
LeetCodeや各種オンライン学習サービスを利用しました。LeetCodeとは、コーディング問題を集めたサイトです。アメリカでソフトウェアエンジニアの就活をする99%は使っていると思われます。自分は300題以上解きました(Recursionや他サイトを含めると500題以上)
YouTubeやUdemyでは単純に知識を得るために用い、Coursera、 Edx等ではそれに加え、認定証/修了証が発行されるため、そのいくつかを履歴書に書いていました。
――他に本などは読みましたか?どのような本が役に立ったか教えてください。
色々な本を流し読みしていますが、特に就活で役立ったものは以下です。
- マインドセット/就職対策
– Career Skills - 全体像
– 独学プログラマ
– 入門コンピュータ科学 ITを支える技術と理論の基礎知識
– キタミ式イラストIT塾 応用情報技術者 - ハード(ソフトウェアエンジニア志望だったので、最低限必要な知識部分のみ)
– マンガでわかるCPU
– Computer Organization and Design RISC-V edition(所謂パタヘネ本) - アルゴリズム
– Algorithms (written by Jeff Erickson)
– アルゴリズムビジュアル大辞典
シリコンバレーでエントリーレベル/ジュニアレベルのソフトウェアエンジニアを志望する場合は、これらの本よりもLeetCodeでの対策が殆どを占めると思います。
――ネットワークやWeb周りの知識も勉強しましたか?
ネットワークに関してはセキュリティの授業で学んだことに加え、Udemyの講座を受講しました。Web周りはやんわり初心者向けの本を読んだくらいであまり勉強できていません。
――エンジニア関連の資格をお持ちですか?
取っていません。日本とは違って、アメリカのソフトウェアエンジニアの就活では専門職でない限り、特定資格は必要とされない気がします。
Recursionではコンピュータサイエンスの基礎知識を幅広く学習
――どのようにRecursionを利用されたのか、Sorasukeさんの学習スタイルについてお聞かせください。
まずはプログラミング言語についてですが、Recursionは主にPythonで進めました。独学や授業で学習した言語は、習熟度の差はありますが、 Java, C, C++, JavaScript, TypeScript, Dart, Go, R, Scheme, Julia, MATLABを勉強しています。
1日の学習量は、Recursionをスタートしたときはセメスターの始めで、授業の進みも緩やかだったため4,5時間くらいしていた記憶があります。授業が本気を出し始めてからは、隙間を見つけて30分から2時間くらいの学習時間で進めていました。
――Recursionのコースの中でどれを一番注力して勉強しましたか?
自分の場合はコンピュータサイエンス基礎「中級」「上級」に登場する基礎概念です。以前学んだことを思い出す作業が中心だったので、「木構造懐かしい」などと感激しながら進めていました。
――コンピュータサイエンスプロジェクトはどこまで終わりましたか?
コースとして進めたのはコンピュータサイエンスプロジェクト3までですが、最後の課題も含めてガッツリ取り組んだと言えるのはプロジェクト1のみです。フロントエンドの勉強に割く時間がとれず、概念的な部分を斜め読みしていました。今後はしっかり全てのプロジェクトに取り組みたいです。
――シリコンバレーで転職するにあってポートフォリオは作成しましたか?その完成度や意識したことについて教えてください。
自分の場合は「ポートフォリオをがっつり作ってのエンジニア就活」ではなかったので大変稚拙ですが紹介します。
プロジェクト1: Emotion Onomatopoeia Dictionary
URL:https://recursionist.io/share/Sorasuke/lessoncode/564/htmlRunner2
Recursionの登竜門の課題です。すべて受け身ではいけないと考え、外部のフリー素材を利用したり、感情と合うようなナチュラルな色を指定するなど、やんわり自分なりの工夫を入れました。
Friendly Reader
Github URL:https://github.com/Sota1221/friendly-reader
実装サイト:https://sota1221.github.io/friendly-reader/
プロジェクト1でフロントを学んだ頃に開催されたハッカソンイベントで作ったリーディングアシストツールです。1日で作成したものなので高機能ではないですが、プロジェクト1レベルでも完成品が作れたことが自信になりました。
シリコンバレーで就活をする場合、作成したプロジェクトがどのような社会的インパクトがあるかを重要視されるのですが、このプロジェクトではディスレクシアの人を始めとする、読書が不得意な方を助けたいという思いで作りました。
私自身もディスプレイ上の幅の広い文章を読むのが苦手なので、自分でもこの作品をよく利用しています。
――Recursionを始める前と後で何か変化がありましたか?
始める前はコンピュータサイエンスの記憶の多くを忘れていた状態でしたが、おかげさまで基礎知識を短期間で幅広く学習することができました。
自分が未学習だったフロントエンドなどの分野も、演習を交えて学ぶことができ、授業外での知識の幅を広げる助けとなりました。なによりモチベーションの高く優しい方がコミュニティに多く、以前に比べコンピュータサイエンスの学習に関しての忌避感が薄れた気がします。
「シリコンバレーでソフトウェアエンジニアになりたい」夢をかなえ転職成功
――Sorasukeさんは今回念願のシリコンバレーエンジニアへの転職を成功されたそうですね。おめでとうございます!ぜひ、転職活動についてもお聞かせください。
転職活動をするにあたって自分の中での方針は以下の通りでした。
会社選びについて
- OPT(フルタイムで就労することができる制度)を受け付けており、なおかつその後の就労ビザのサポートをしてくれる
- 気候や文化的にも慣れたベイエリア(サンフランシスコ・シリコンバレー)にある
- 給与ができるだけ高水準(ベイエリアは異常に物価が高いため)
- 画期的/新しいことに取り組んでいる
応募について
- (大手にも応募する予定だったので)先に練習としてスタートアップを中心に応募する
- LinkedInなどJob系のサイトで、狙っている条件で24時間以内にポストされたポジションのうちスキルが合うものに応募する
- リクルーターの目に留まりやすくするために、LinkedInで多くの人と繋がっておく(実際500人以上と繋がるとリクルーターからの連絡が多くなりました)
オファーを受けるか
- 給料、ストックオプション、福利厚生を含めた総合的なオファー内容の最低ラインと即決ラインを定めておく
- 面接を通しこの会社で働きたいと思えたか
自分の場合は、本格的に大手に出す前に素晴らしいスタートアップと出会ったのでそこに決めました。余談ですが、こちらでは1つのポジションを数百-千以上の人数で争うため、何百もの会社に応募する学生も珍しくありません。大学の友人の友人は700出してやっと1つ決まったというケースだったそうで、実力はもちろん、運も多分に絡んだ戦いとなります。
――書類や面接ではどのようなことをアピールしましたか?
書類では休学中にスタートアップの速い環境を経験したことをアピールしました。またAI系の会社だったため、機械学習の経験や、その理論面を講師として教えていた経験もアピールしました。
技術面接ではアルゴリズムへの造詣の深さを伝えるため、解答のアイデアを複数伝え、それぞれの強み弱みを話し、その中でも自分が最良だと考える方法とその理由を短時間で伝えました。
このプロセスの間や実装中も、面接官と常に対話を心がけ、自分が今後同じプロジェクトメンバーになった際に、コミュニケーションが取りやすい人物であることをアピールしました。
――選考の流れはどのように進みましたか?
よくある流れは
- 書類審査
- スクリーニング面接(簡易行動面接)
- 技術面接(複数)
- 行動面接
でした。
スクリーニング面接はリクルーターが、こちらの経歴を確認しポジションとマッチしているか聞いてきます。まれにこの段階で簡単な技術的な質問をする人もいます。
技術面接はコンピュータサイエンスや応募ポジションに関する知識問題 + コーディング試験の形式で、後者だけのことも多かったです。
形式としては、電話での口頭試問、PCで画面共有しながらのコーディング、会社のホワイトボードでのコーディングといったタイプがあります。自分が応募した会社では最低3回は技術面接があり、多いところでは8回も行いました。
行動面接では履歴書を見ながら、自分の経歴を深堀りされ、また behavioural questionと呼ばれるある特定状況のときどのような行動をとったかを聞かれます。例えば、
- プロジェクトメンバーと対立が生じたときどうしたか
- プロジェクト中に起きた予想外の技術的なトラブルに対しどのように対処したか
などを聞かれます。面接官によっては「魔法のランプが仕事に関するあなたの願いを3つ叶えるとして、何を願うか」などその会社とマッチしているかを問うてくる人もいます。
会社によっては最終面接のあと、過去に一緒に働いた or 学校のプロジェクトメンバーだった人からのリファレンス(推薦)を求めてきて、他者を介した身辺調査を行うところもありました。
依頼した友人は根掘り葉掘り私のことについて30分電話で質問攻めにあったと言っていました(今度お礼として食事をおごる約束をしています笑)
また大手や一部スタートアップは、書類審査のあとに、特定サイトにアクセスし、コーディング問題を1-4題程解くオンラインアセスメントと呼ばれる足切りを設定することもあります。
――コーディング試験はありましたか?
ありました。アメリカのソフトウェアエンジニア就職では必須だと思います。
タイプとしては前述の通り、電話で口頭、画面共有、ホワイトボードのタイプや、面接前の足切りとしてオンラインアセスメントを課すところもあります。
――就職活動を始めてどれくらいで内定が出ましたか?
最終セメスター中に少しずつ活動を始め、最初の内定をもらったのは1ヶ月くらいだったと思います。本格的な就活を始めたのは卒業後で、そこから1ヶ月半で今のところが決まりました。全体としては3ヶ月ほど就活をしていました。
――採用者様に興味を持ってもらえた点はどのようなことですか?
技術面接でのパフォーマンスとやる気です。その会社ではコーディング試験が3回あったのですが、どれもスピードと内容が他の候補者より突出していると褒めてくださいました。
技術面接をこれでもかというくらい準備して、さらにややマイナーなアルゴリズムの実装も勉強していたのが役立ちました。
また自分を成長させ社会に大きな影響を与えるためにシリコンバレーに来たので、ぬるいゆっくりな環境、同じことだけを繰り返し思考を停止させている環境には絶対に居たくないと伝えたことも、その会社の文化にあっていると評価してくださいました。
――Recursionで学んだ知識の中でも特に評価されたものはありますか?
中上級で学ぶアルゴリズムとデータ構造の知識は確実に活かされました。
もちろん技術面接に向けて専用の対策は必要となるのですが、その前段階として、例えば連結リストはこういう構造をしていて、この操作には時間計算量はこれほどかかり、空間計算量はこれほどかかるなど、単なるプログラミング学習サイトでは習わない大切な点がわかりやすく学べるので助かりました。
堅苦しい教科書よりとてもとっつきやすかったです。現在TBDとなっている「アルゴリズム&データ構造」の専用コースが開設されれば、もはや鬼に金棒だと思います。
――採用試験を通して何を重視して確認されたと思いますか?
今回内定を頂いた会社では以下の優先度だったと思います。
- コーディングスキル(カバー領域の広さではなくどれだけ”smartか”を測っていると言われました)
- 社風とマッチしているか(人柄)
- コミュニケーション能力
- 学歴
- 職務経歴
この順番は会社によってまちまちで、職務経歴をかなり重視する会社も多くあります。
恐ろしいほど給料アップ!シリコンバレーでソフトウェアエンジニアへ
――転職後の業務内容の概要を差し支えない範囲で教えていただけますか?
肩書はソフトウェアエンジニアですが、機械学習もフロントもバックも含めた実質フルスタックエンジニアのような業務になると聞いています。
――前の仕事に比べて給料はどうでしょうか?
日本で休学していた頃は雀の涙だったので、恐ろしく上がっています。
こちらの文化でもあるのですが、オファーをもらった額面通りではすぐに決断せず、ある程度交渉する余地があります。データに基づいて正当な理由を示せれば、当初よりも高待遇のオファーに変更してくれる可能性があり、実際私の場合も給与とストックオプションが大きく上がりました。
――今後の展望などあればお聞かせください。
スピードが速い環境で、社員のバックグラウンドも化け物レベルですごい方ばかりなので、吸収できることをすべて吸収し、むしろ積極的に自分からバンバン提案していけるソフトウェアエンジニアになりたいです。
未経験者、Recursion初心者へのアドバイス
――最後にアドバイスをお願いします。実務未経験者が内定を取るためにやっておいた方が良いことは何でしょうか?
アメリカで就職したい場合は、何かしら社会的にインパクトがあるプロジェクトを行った方が良いです。
技術面のアピールも大切ですが、向こうは実利主義なので、どれほどの人にリーチしたか、売上はどうか、社会的にどのような影響を与えたかが語れるものが作れると良いですし、周りのライバルは皆それをしていると思ってください。
自分はその経験が少なかったので苦労しました。
――Recursionを始めたばかりのユーザーがやっておくべきことはありますか?
そうですね。具体的には以下の4つをおすすめします。
- Twitterを始めてユーザーの方をフォローしましょう。私もSNS素人ですがこれを機に始めました笑
- Discordコミュニティで質問しましょう。余裕があるなら他の人の質問に回答しましょう。
- 他の人のコードを見て学びましょう。
- もくもく会などイベントに参加して知り合い(戦友)を増やしましょう!
コミュニティが活発なのでどんどん利用して、コミュニケーションスキルを鍛えたり人脈を広げたりするといいと思います。
――Recursionを知人におすすめできますか?
おすすめできます!特に以下の点が気に入っています。
- 単純なプログラミング系サービスとは異なり、コンピュータサイエンスを学ぶことをコアとするカリキュラムになっている
- インプットのみに留まらず、コーディング問題やプロジェクトなどアウトプットが充実している
- チーム開発の経験を積める
- TwitterやDiscord上のコミュニティが活発
――Sorasukeさん、貴重なお話をたくさん聞かせていただいて本当にありがとうございました。今後のご活躍を楽しみにしています。