大学院に行くのをやめてソフトウェアエンジニアになってみた

2年以上前に書いたこんなメモを見つけた。現在の勤務先であるIndeedの新卒採用の選考を受けていて、「受かったっぽいのは良いけど大学院にも行きたいし、どうしよっかな」と悩んでいた時のことらしい。

かなり悩んだ末にこのIndeedで後に働くことに繋がる決断をしたのだけど、当時は同じような境遇の人も少なく、決断には結構苦労した。もしかしたら同じような悩みを持っている(もしくはこれから持つ)人がいるかもしれないと思うので、そういう人にとって少しは参考になるかなと、久々にブログを書いてみることにした。

目次

当時の状況

まずはじめに、当時どのような状況だったかを簡単に記しておく。当時は早稲田大学の学部4年生で、そろそろ卒業後の進路を固めるかという時期であった。自分としては卒業後は海外の大学院の博士課程に進みたいと考えていたのだが、海外大の博士課程はかなり狭き門であることは聞いていたので、国内大学の修士プログラムにも出願することにしていた。ところが研究室でひとりもりもり研究していた4月ごろ、「全くどこにも受からなかったらどうしよう…」という不安に突然襲われ始めた。そこで、とりあえず1社くらい入社試験を受けてみるかということになり、なんとなく知人から楽しそうなところという噂を聞いていたIndeedという会社の採用面接を受けてみることにしたのだった。運良くその面接を通過し、オファー面談をする中で、今後の進路をどうするかに悩みに悩んで冒頭のメモを残したようだ。

結局、受験しようと思っていた東大の研究室の先生やIndeedの人事と相談の末、国内の大学院の入試を受けるのを辞めて海外の博士課程*1に絞り、その結果次第でIndeedに入社する、というところに落ち着いた。大学院進学の可能性は大幅に下がるものの、ニートになる心配は無くなる。加えて、国内の大学院入試の準備をする代わりに研究にも海外大学院の出願にも集中できるわけで、それなりにいい決断だったと思う。結果的に3月の下旬ごろまで粘ったものの残念ながらどこの大学院からもオファーがもらえなかったので、最終的にはIndeedへの入社を決意した。当時のメールを漁ってみたところ、これが3/27のことだったらしい。入社式の1週間前に入社を決める新卒社員、なんとも迷惑な話だ*2 。急に入社が決まったためスケジュールもタイトで、当時インターンで滞在していたカリフォルニア州のマウンテンビュー*3から入社式の前日に帰国して、時差ボケで目をこすりながら出社する社会人スタートを切って今に至る。卒業旅行とか行きたかったなあ。

進路を迷っていたときに考えていたこと

当時の決断はつまるところ、リサーチャーとしてのキャリアを目指すかそれともソフトウェアエンジニアとしてのキャリアを歩み始めるのか、であった。どちらのキャリアに関しても経験はほとんど無かった上に、自分の人生にそれなりに大きな影響がある決断であるので色々と考え悩んでいた。しかし、振り返ってみると思うところが色々ある。というのも、それなりに現実的だった悩みもあれば、全く的外れのものもあったからだ。まだまだ未熟なソフトウェアエンジニアではあるのだけど、2年ほどまじめに(?)働いてみたところだし、いくつか得られた知見もある。というわけで、当時の悩みポイントを、現在の視点を交えながら書いていくことにする。

ところで念のために繰り返しておくと、結果的に自分は大学院にも行ってないし、研究歴も1年ちょっとしかない初心者だ。そのため、やはりソフトウェアエンジニアとリサーチャーのキャリアの比較はすることができない。ただ、大学院に行くか迷った末ソフトウェアエンジニアになってみた人が当時どういう事に悩んだ末に決断をして、今はどう考えているのか、という1つの例にはなると思う。これが進路に悩む人の一助になると嬉しい。

大学院に行くと論文が書ける

論文を書くのは楽しい。学部生のときにはDNA配列の解析アルゴリズムの研究をしていて、その研究自体も楽しかったのだけど、論文を書いて自分の仕事を公開できるというのも好きだった。実際にソフトウェアエンジニアになってみて特に身に染みるのだけど、個人の成果を公開できるのは素晴らしいことだと思う。例えば転職するときなども、分かりやすい成果があるのはかなりプラスに働く。ところがソフトウェアエンジニアは会社の利益を損なう可能性がある情報は基本的に公開できないので、自分のやっている仕事の成果を(リサーチャーと比べると)外に公開しづらい気がしている*4 。そんな事情もあって、大学院に進学した人々がバシバシ論文を出していくのを、「凄いなあ羨ましいなあ」と思いながら眺めている。

また、就職よりも大学院に進もうと思っていた理由に、目標とするような人物がリサーチャー界隈には多くいた一方で、エンジニア界隈ではあまり思い浮かばなかったというのがある。実際に働き始めてみたら、目標にしたいなと思う人が沢山いることが分かった。ただ自分が無知だったというのもあるのだけど、これに就職するまで気づかなかったのは少し悲しい。リサーチャーが研究論文をバシバシ出す一方で、ソフトウェアエンジニアは個人の成果が公表しづらいため、外野からは何をしているのかが少し分かりづらいのかもしれない。

大学院に行くとお金に困りそう

自分はお金があった方が嬉しいタイプの人間なので、お金はあるに越したことはない。学部4年生の当時はこの点では苦労をしていた。研究に集中するためにコードを書くアルバイトなども辞めてしまったので、収入がほとんど無くなってしまったからだ。幸い研究室でリサーチアシスタントとして雇ってもらえたので貯金を切り崩しながらなんとか生きて行けたが、それでも生活は苦しかった。そんな状況もあり、「貧困大学院生活は厳しそうだし、とりあえず働いてお金を貯めてから大学院に進学するのもありかなぁ」と考えたりしていた。

この点はソフトウェアエンジニアとして働くとそれなりの額の給料がもらえるので、基本的に解決される。実際自分の観測範囲だと、自分と同世代くらい(20代中盤くらい)の日本で働くソフトウェアエンジニアは年に600万〜1800万くらいの給料を貰っている*5ようだ。自分自身も、生活は学生時代と比べると格段に楽になった。一方で大学院生はというと、例えば修士学生は基本的に生活できるほどの給料をもらえることは基本的にはなさそうである。博士学生でも学振をもらえる優秀層ですら年240万と、正直もう少しあげても誰も文句を言わないんじゃないか、というくらいの待遇だ。とにかく、ソフトウェアエンジニアと比べると大学院生の経済面ではかなり厳しそう、という印象だった。会社員になるとこの経済面の問題が解決されるのはかなり大きい。

大学院に行くと優秀な人が沢山いる

大学院に行こうと思った理由の一つに、関わったリサーチャーの方々が無茶苦茶優秀な人ばかりだったというのがある。とりあえず自分の能力は棚に上げて、こんな優秀な人たちと一緒に仕事ができたら楽しいだろうなと考えていた。

恵まれている環境にいるのか、就職してからも周りの人が本当に優秀な人ばかりで驚く。事実、入社してからいくつかのプロジェクトに関わってきたのだけれども、どのプロジェクトでもチームメイトが驚くくらい優秀だった。そういう経験は学びも多いし、何より楽しい。優秀な人と仕事をすると放っておいても成果が出てしまうので、自分ももっと頑張らないとなあと思う。

大学院に行くと最先端の技術が扱える

「最先端の技術」と聞くとなんだかワクワクするのは、自分だけではないと思う。リサーチャーはその最先端を押し拡げるのが仕事なのだから、最高にワクワクす仕事の1つと言って良いかもしれない。実際自分にとっても、おそらく誰も考えたことがないだろう新しいアルゴリズムを実装して実験でその優位性を示したりするのはかなりエキサイティングな仕事だった。誰も試したことがない技術というのは、得られる結果が予想に反することも大いにあり得るし、そういう不確実性がワクワクに繋がるのかなと思う。加えて機械学習ブームというのもあり、Deep Mindの開発したAlpha Goが囲碁の世界チャンピオンに勝利したりするのを目の当たりにして*6、そんな人類の可能性を広げるような研究開発に自分も関わりたいなあと思ったりしていた。

一方でエンジニアに対する印象はというと、あまりそのような「最先端」を扱いはしないのかな、というものだった。例えば機械学習を扱うにしても、ほとんどの場合に既存のアルゴリズムの中から適切なものを選び、自分で全く新しいアルゴリズムを開発するということは基本的にないと。しかし今は、方向性は違うものの、エンジニアもリサーチャーと同様にまだ誰も解いていない問題を解くことによって「最先端」を押し広げているんだなと思っている。機械学習の話に戻ると、たしかにエンジニアが新しいアルゴリズムを生み出したりすることはほとんど無い。しかし実際には、その機械学習による結果をユーザーに届けるのに必要なのはアルゴリズムだけでは無い。トレーニングに使うデータのパイプラインやプロダクションのモデルのモニタリングのなど、工夫、改善するべきポイントは本当に沢山ある。このような難易度の高い問題にタックルするのはエキサイティングだし、これらの問題もまだ解き方が確立されていない「最先端」だと思う。解いている問題の毛色や必要とされるスキルセットが研究とは違うものの、チャレンジングな問題に取り組めるソフトウェアエンジニアも最高に楽しい。

アメリカの)大学院に行くと労働ビザがゲットできる

アメリカの大学に留学していた経験もあり、アメリカで働いてみたいなという思いは以前から抱いていた。その際に大きな障害になるのが労働ビザで、普通に日本で働きながらこれを取得しようとするとかなり難易度が高い。ところがなんとアメリカの大学を出ると、OPT *7というインターンビザが必ずもらえて、STEM*8分野の場合には学位に関連するフィールドでの労働が最大3年間認められる。多くの学生がこのOPTを使って職を得て、その後のアメリカでのキャリアの足がかりにする。これはアメリカで働きたいと思っていた自分にとって大きな魅力に写った。

しかし、実際に会社員として働いてみて、実はアメリカで働くのって思っていたより難しくないのではという気がしてきている。というのも、自分の勤務先であるIndeedアメリカのAustinに本社があるため、アメリカのオフィスに異動するチャンスがかなりあるからだ。アメリカのオフィスに異動をすると、L1ビザ*9というビザが発行される。さらに、その期間の内にグリーンカード*10のサポートもあるらしい。少なくともアメリカの大学院で学位を取って、さらにどこかの会社からのオファーを勝ち取るよりは、この社内異動の方が難易度が圧倒的に低いのでは、というのが今の正直な感想だ。

大学院に行かずに就職してやっていけるのか

就職することに対する不安の1つに、大学院に行かずに就職して大丈夫なのか、というものがあった。情報系の学部はかなりの割合の人が大学院に進学するし、勤務先の同期は20人弱いるうちの2人が学部卒でその他は全員修士もしくは博士課程まで進んだ人達だった。彼らは自分より最低でも2年間はコンピューターサイエンスに関わる経験をしている訳だ。そんな自分より長く経験を積んだ人達と同じように成果を出すことができるのか、というのは単純に不安だった。

しかし、実際に働いてみたところ、まあ特に問題なさそうだなという気がしてきている。少なくとも今のところは大学院に行っていないから(もしくは学位を持っていないから)困った、ということは特にない。もちろん大学院で学べることは沢山あるのだろうけど、必ずしもそれらがソフトウェアエンジニアにとって必要不可欠な能力ではないと思う。加えて、例えば修士課程に進学するのと比べると2年間プラスしてソフトウェアエンジニアとして経験を積めるわけで、それはそれで大きなアドバンテージだ。まあとにかく今のところは、ソフトウェアエンジニアとしてやっていくため、という点においては必ずしも大学院に行く必要は無さそうだなと考えている。

当時は考えていなかったけどソフトウェアエンジニアになって良かったところ

実際にソフトウェアエンジニアになってみると、当時は考えていなかった良いところが見えてきたりもした。そのうちのいくつかをここで挙げる。

コーディング能力が上がる

まず単純に、ソフトウェアエンジニアはかなりの時間をコードを書くことに使うので、沢山コードを書くことによってコーディング能力が上がる。それに加えて、自分よりコードの書ける同僚が沢山いるので、彼らから学ぶことによる向上も大きい。最も分かりやすい例がコードレビューだ。コードを書くと同僚にそのコードをレビューして貰うのだが、その際のコメントから新しいことを学ぶことはかなり頻繁にある。また、同僚の書いたコードをレビューをするときにも、「なるほどこういう書き方をするのか」と学ぶことも多い。コードレビュー以外にも、議論を通してコーディングに関する考えが整理されたりもする。このように、同僚とのコミュニケーションはコーディング能力の向上にか大きな貢献をしている気がする。

例えばいつか大学院に行って研究をするにしても、コンピューターに関わる分野であればコーディング能力は非常に重要だと思う。そういう意味でもコーディング能力の向上は嬉しい。

チーム開発が学べる

チームでプロジェクトに取り組むと、1人でやるのに比べると遥かに速く物事が進む。そんなチーム開発に関われるのもソフトウェアエンジニアの魅力の1つだと思う。大学では、コードを書くのはほとんど独力だったし、研究プロジェクト自体に関わる人数も多くて3人くらいとかなり少数だった。一方で、企業での開発は多くの人が関わることも多い。現在のチームは東京オフィスだけでも10人ほどいるし、アメリカのオフィスのチームメイトを合わせると20人ほどになる。こういう環境でチームとしての効率を最適化するには1人でのプロジェクトとはまた違った工夫が必要だ。このチーム開発に関わるノウハウはインダストリーにはかなり多く溜まっているので、学びは多い。このように、チームとしての速度を最適化しながら、速いスピードでプロジェクトを進めるのは結構楽しい。

人に感謝される

多くの人が使っているプロダクトに関わっていると、そのユーザーからのフィードバックが得られるチャンスも多い。久々に会った友達から「仕事探しにIndeed使ってるけど便利だね」などと喜ばれるのはかなり嬉しい。

終わりに

というわけでまあ大学院に行くのをやめてソフトウェアエンジニアになったのだけれども、かなり順調に楽しく仕事ができていると思う。大学院にもいつか行きたいなというのは思ってはいるのだけど、ソフトウェアエンジニアとしてやりたい事も増え続けているという問題?もある。そんな訳で、今のところはソフトウェアエンジニアを続ける予定だ。とはいえ人生何があるのか分からないし、もしかしたら数年後には「ソフトウェアエンジニアを辞めて大学院に進学してみた」などと言って大学院の素晴らしさを語っているかもしれない。


*1:アメリカでは修士課程と博士課程は基本的に別で、修士課程に行かずに博士課程に行くことも多い。

*2:後で人事の人に聞いたのだけど、おかげで結構大変だったらしい。人事の方々、ありがとうございました。

*3:ちなみにインターン先はRecruit Institute of Technologyという会社だった。現在では会社の名前が変わり、Megagon Labsとなっているらしい。http://www.megagon.ai

*4:もちろん、ソフトウェアエンジニアをやりながら論文を書いたり、オープンソースのプロジェクトにコミットしている人もいるが、そんなに多くはないと思う。

*5:ソースは給料を聞いたときに教えてくれた友人なので、何かしらのバイアスはあると思う。ちなみに会社の同期に毎年収入を公開しているやつがいるのだけど、彼の2018年の給料は1100万円弱だったらしい。もちろん人によって額は違うのだけど、会社の同期のエンジニアはだいたいその±200万円くらいだと思う。https://hadrori.jp/articles/36

*6:The Google DeepMind Challenge Match, March 2016 https://deepmind.com/research/alphago/alphago-korea/

*7:Optional practical training (OPT) - Immihelp https://www.immihelp.com/visas/studentvisa/optional-practical-training-opt.html

*8:Science, Technology, Engineering and Mathematicsの略語。Computer ScienceもこのSTEMに入る。https://www.livescience.com/43296-what-is-stem-education.html

*9:日本にオフィスがある会社の従業員がのアメリカオフィスに異動する際に使えるビザ。転職などはできない。 https://www.immihelp.com/l1-visa/

*10:永住権。昔永住権のカードが緑色だったことから、今でもグリーンカードと呼ばれているらしい。https://www.immihelp.com/green-card-process/