今回インタビューさせていただいたのは、複数のメガベンチャーから内定を獲得したHayatoさん。文系大学出身ながらRecursionでアルゴリズムやデータ構造についての知識を習得し、採用面接でも高い評価を得られたそうです。
- 文系大学出身だがソフトウェアエンジニアになりたい
- アルゴリズムやデータ構造についての学習方法が知りたい
- メガベンチャーの内定を獲得できる秘訣が知りたい
そんな方にHayatoさんの成功体験をお伝えします。
Hayatoさん
目次
文系大学からコンピュータサイエンスを学習してメガベンチャーのエンジニアに内定
――Hayatoさん、インタビューをお受けいただいてありがとうございます。早速ですが簡単な経歴と、プログラミング経験の有無について教えていただけますか?
現在大学4年生です。大学の専攻は、学際系の学部なので一言で表すのは難しいですが、刑法のゼミや法律関係の科目を履修していました。
小中高は武道に力を入れていて特に理数系の勉強はせず、大学でもアルバイトに追われてコンピュータサイエンス関連の勉強はしていませんでした。
大学3年の3月にRecursionをはじめ、4年の後期に休学をして就職活動をしました。
プログラミング経験については、PaizaとAtCoderをやってました。Recursionを始めた時はPaizaがAランクで、AtCoderのレートが800をギリギリ超えるレベルです。趣味でUnityを使ってゲームを作ったりARアプリケーションを作ったりしていました。
――Recursionを始めたのはどうしてですか?
理由は3点あります。
- 純粋にコンピュータサイエンスを学びたくなったこと
- ソフトウェアエンジニアになりたいと思ったこと
- Recursionを作っている人たちは真面目だと思ったから
1点目に関しては、競技プログラミングをやっていて、ある程度の難易度の問題であればどのアルゴリズムを使えば良さそうかは理解できたのですが、興味の対象がスコアを競うことより、アルゴリズムの仕組みやそもそもコンピュータ言語がどのようにして動いているかに移ったからです。
2点目に関しては、「基礎が理解できればエンジニアになれるかも?」くらいの軽いノリでした。
3点目に関しては、カリキュラムに離散数学やOOPなど大衆ウケの悪そうな科目があり、また「誰でも1ヶ月でプログラマになれる!」のような宣伝文句がなかったので、金儲けだけを考えてやってるわけじゃなさそうと思い会員になる決断につながりました。
ソフトウェアエンジニアにとって必要なスキルを効率よく学習できたRecursion
――Recursionをどのように利用して学習を進めましたか?
基本はPython、JavaScript、Javaを選択して進めました。復習のために2周目、3周目は言語を変えてPHP、C#なども学習しました。
復習に関しては、同じ言語を使って丸暗記をしたくなかったのと「コンピュータサイエンスが理解できていればドキュメントを読んで書き方を調べればコーディング問題も解けるでしょ」と個人的に思っていたので他の言語を選んでいました。
――どの項目を一番注力して勉強しましたか?
時間的にはコンピュータサイエンス基礎の初級中級に一番時間をかけていたと思います。気持ちの入れよう的にはOOPとProject5(BlackJack)が同じくらいな気がします。
――Recursionを始める前と後では何か変化がありましたか?
始める前はHTMLも書いたことがなく算数数学的な問題が解けるだけでしたが、始めた後はウェブアプリの中身(MVCアーキテクチャやOOP)を理解し、実際にコードを書いて構想したものを作れるようになりました。
――Recursionを知人におすすめできますか?
おすすめできます。
理由としては、ソフトウェアエンジニアを目指す上で必要なインプットとアウトプットをどちらもしっかり経験できるという点です。コンピュータサイエンスの基礎についてインプットした後には、個人プロジェクトやチーム開発、コーディング問題などでアウトプットする機会が豊富に用意されています。
また、独学を余儀なくされるユーザーの最大の難点は、スケジュール管理だと僕は思います。Recursionのように1つのサービスで完結していると、教材の選定に時間をかけたり、本質とは違う準備に手間をかけたりせず、必要なスキルを最も効率よく身に着けることができます。
僕自身もアルバイトや大学の単位取得などの両立でとても忙しい毎日ですが、並行してRecursionでの学習も進めることができました。
複数のメガベンチャーから内定獲得できた理由とは
――就職活動について教えてください。どのような方針で会社を選びましたか?
企業研究でそのプロダクトが好きになれるかどうかをまず判断の基準としました。
また、僕の場合は理系ではなく文系の大学出身の新卒ですので、入社後に希望しない配属先にされてしまう恐れがありました。入社後に適性を見て配属先を決めるような企業は避けて、自分が希望する職種になれるかどうかも気を付けて応募企業を選びました。
――選考の流れはどのように進みましたか?
いくつか受けた企業のうち、書類審査⇒コーディング試験⇒1次面接⇒2時面接⇒最終面接という流れで選考を進める企業が多かったです。
コーディング試験については、特別選考以外は全て実施されました。
――何社くらい応募しましたか?
全部で12社ほど受けました。就職支援サービスも利用しましたが、あまり積極的には利用していません。エージェントにすすめられて応募した会社が7社ほどありましたが、通過後、辞退させていただきました。技術面接の練習になったり、技術に対してフィードバックがもらえたりしたのは良かったです。
書類選考に関しては、エージェントの不手際で締め切りを過ぎてしまい落ちた会社がありましたが、自分で申し込んで受けた企業に関しては全て通りました。
コーディング試験に関してはすべて通過し、技術面接に関して1社を除き通過できました。
二次面接以降に関しては、早めに第一志望から内定が出たので選考を辞退させていただきました企業もありましたが、ありがたいことに複数の企業から内定をいただくことができました。
――活動を始めてどれくらいで内定が出ましたか?
冬休みを挟んで2ヶ月ほどです。
――書類や面接ではどのようなことをアピールしましたか?
書類でアピールしたことは、忍耐力とデータ構造・アルゴリズムの知識についてです。
まず、忍耐力についてですが、僕はかなり家庭環境が悪く貧乏な生活をしてきて、現在も工場で生活しています。選考途中に僕の住所が工場であることに関して、深く追求してきた企業がありました。工場に住むことになった経緯や家族の変遷などを聞かれ、大変不愉快な思いをしました。
そのような経緯から、「住所が工場であることがマイナスと思われるならその時点で書類で落としてもらって、通過するならアピールポイントにしてやろう」と思い、不遇な環境でも結果を出せる体力とメンタルあるという文脈で忍耐力をアピールしました。
データ構造とアルゴリズムに関してはポートフォリオの話をしました。僕のポートフォリオは連結リストや木構造、サーチのアルゴリズムを使っているのでそこをアピールしました。またブラックジャックを作った際、ネットにあるレポートからベッティグアルゴリズムを学び、それを実装したこともアピールしました。
――内定獲得おめでとうございます!複数のメガベンチャーから内定をもらえた要因は何だと思いますか?
文系大学出身の新卒ですから、ポテンシャルもあるかと思いますが、大きく分けて以下の3つの理由で複数のメガベンチャーから内定をいただけたのだと思います。
- コミュニケーション能力
- アルゴリズムの素養
- ポートフォリオのアイデア
内定した企業のオファーレターや他の企業の選考の中でいただいたフィードバックで共通していたのは、上記の3つでした。
コミュニケーション能力については、面接のときに何か自分のことを熱く語ったわけではなく問われた質問に関して適切な答えを回答していただけなのですが、一番評価してもらえたポイントだと思います。
アルゴリズムの素養についてはRecursionのコンテンツで興味をもって学習していたおかげだと思います。先ほどもお話しましたとおり、僕のポートフォリオは連結リストや木構造のデータ構造やサーチアルゴリズムを使うなど、少し工夫したものになっています。面接時に特にアピールしていた点です。
そして、ポートフォリオの1つとしてアピールしたブラックジャックは、Recursionのプロジェクトで作成したものです。ベッティングアルゴリズムを取り入れるなどをアピールしたところ、「アイデアが面白い」と高評価を受けました。
文系大学卒からソフトウェアエンジニアを目指す方へのアドバイス
――実務未経験の方が内定を取るためにやっておいた方が良いことは何でしょうか?
まずは、毎日コーディング問題を最適解で解いてアルゴリズムを叩き込むことです。
文系未経験の就活生は数学的な思考が苦手と判断するのが面接官にとって定石だと思います。それをひっくり返すには、結果で示すしかないのでコーディング試験は絶好の機会になります。
コンピュータサイエンスやアルゴリズムの知識を頭に叩き込み、すぐに取り出せる状態にまで持って来れるようになるといいと思います。
例えば、統計学の講義を受けている最中に「ベイズって再帰と相性良さそう」とか、信号待ちの最中に「この状況をノードで記述したらどうなるか」「もっと複雑な横断歩道にしたらどうなるか」など、日常生活をアルゴリズムとして考えられればいいと思います。
そうすれば難関企業で出されるLeetcodeのeasy〜mediumくらいの難しめな問題は簡単に解けるようになると思います。
――Recursionを始めたばかりのユーザーがやっておくべきことは何でしょうか?アドバイスをお願いします。
コードの可読性を上げるための自分のコーディングの矯正です。
コーディングの矯正は、競プロ的な処理を書いて面接官に突っ込まれないようにするという理由もありますが、それよりも現役のプログラマや凄腕のユーザーのコードと自分のコードを照らし合わすことが容易になるということが最大の利点です。
模範解答やユーザー回答と自分の回答を照らし合わせて違う部分があれば、違うコードを書いた理由とその違いは誤りなのかを考えたり、ドキュメントを調べたりすることで、新しい発見ができて良い学習になります。
あまりに癖のあるコードを書くと違う部分が多くなりすぎて学習コストが増えるので、まずは模範解答を基準にしたコーディングの矯正を行うべきだと思います。
――Hayatoさん。貴重なお話を聞かせていただいてありがとうございました。今後のご活躍をお祈りしています。