文系の新卒がエンジニアの採用面接で勝ち抜くために準備すべきこと

今回は、文系新卒未経験から有名企業のフロントエンドエンジニアへの内定を獲得したもーよんさんに、どのようにプログラミングを学習し、どのようなポートフォリオを作成したのかについてインタビューを行いました。

  • 文系からソフトウェアエンジニアを目指したい
  • 効率の良いプログラミングの勉強の仕方がわからない
  • ポートフォリオを参考にしたい

そんな方にもーよんさんの成功体験をお伝えします。

Recursionユーザー もーよん

もーよんさん

大学では経済学を専攻。就活で思ったような結果を出せず、コンピュータサイエンスを学習し、ポートフォリオを作り込む。インターン経験なしから、有名企業のフロントエンドエンジニアの内定を獲得。

新卒文系未経験からの就活成功「もーよんさん」インタビュー

――もーよんさん、インタビューお受けいただいてありがとうございます。まずは簡単に経歴を教えていただけますか?

大学は経営学部・経営学科で、専攻は経営倫理。エンジニアになると決意するまでは、営業かコンサルの道を考えていましたが、分野にそこまで思い入れがあるわけではありませんでした。

2020年3月からプログラミングの勉強を始めて、この度フロントエンドエンジニアとして内定をいただくことができました。新卒、文系、IT業界でのインターン経験なしですが、僕の話が皆さんの役に立てばいいなと思います。

――2020年3月というとRecursionが始まる前ですね。どのような勉強をされたのですか?

Recursionを始めたのは2021年4月で、その前はProgateやTechAcademyで勉強していました。

まずはProgateのHTML / CSSコースから始めて、JavaScriptとRuby、Railsコースなどを学習しました。その後TechAcademyというオンラインスクールに入り、その卒業作品として、CRUD操作ができるRailsアプリを作りました。

これをポートフォリオとして、Wantedlyで手当たり次第企業にエントリーしました。数社は面接まで行きましたが、全く手応えがありませんでした。ある時「僕に何が足りないですか?」と聞いてみたんです。

すると「うちが欲しいのは『表示速度めちゃめちゃ早くしました』とか『デザイン凝りました』みたいな、ものづくりにこだわりが感じられる人」と言われました。

オンラインスクールで作った教科書に沿ったようなアプリじゃだめなんだなと、その時気が付きました。当時は新卒カードがあれば余裕と完全に舐めてましたね。そこからプラスα要素として、フロントエンドの勉強を始めました。

その時のモチベーションは「Reactを学んでRailsアプリをSPA化したい」でした。今思うと当時の僕はSNSでの情報収集が偏り過ぎていたかもしれません。「モノシリックなRailsポートフォリオが流行っているからSPA化できると十分差別化になる」と考えていました。

RailsをSPA化するために、Udemyや書籍などのハンズオン教材でReactアプリをいくつか作ったり、Railsを総復習したりしましたが、いつまでたってもアドリブで何かを作れるだけの自信が湧きませんでした。というのも、Twitterなどで他人のユニークなポートフォリオを見るたび自分との差を感じ、「そのスキルはどこで身につけたの?」と羨ましく思っていたからです。

面接担当者が唸るような何か特別な機能を自分のポートフォリオに持たせるには、何をどうすればいいのかわからないまま、慎重すぎる性格もあって就活に再チャレンジすることができませんでした。そんな時、Recursionを知ったのです。

――Recursionを選んでいただいたのはどうしてですか?

Recursion内のコンピュータサイエンスプロジェクトを全部やってポートフォリオにしちゃえば、就活うまくいくかもしれないと思ったからです。

それと、以下の動画を見た時、Jeffryさんが「Webフレームワークはただのツール。初学者がこれを学んでアプリを作っても単純なものしかできない」と言っていて「これ、完全に僕に向けて言ってるよな」と感じたのを覚えてます。

昔の僕は就活を意識しすぎて、「流行のフレームワークを使っていて、かつ成果物を作れる教材」ばかり手を出していました。だから、Twitterクローンは作れるけど、JavaScriptやRubyみたいな主要言語をゼロから書く力は無いという状態。「基礎を学べばアイデアをコードで表現できるようになるんだな。今の自分に足りないのはこれだよな」と思ってRecursionをスタートしました。

Recursionは「コンピューターは0と1でできてる」みたいな基礎の基礎からスタートしますよね。それによって点と点が結びついていく感覚というか、あやふやだった基礎の部分が固められていく感覚を覚えました。それにコーディング問題が多いから、企業のコーディングテスト対策もできるなと思いました。それで、初級が終わってすぐサブスクに加入。

「成果物が作れる」という一番最初の動機以上に、このまま続けたらエンジニアとして強くなれそうだなっていう期待感が大きくなってました。

Recursionでのコンピュータサイエンス学習はどのように行ったのか?

――Recursionは1日どれくらい学習しましたか?

2021年4月3日にサブスク加入してから今日まで、ほぼ毎日やっていました。

1時間未満の日もあれば、食べる・寝る以外常にRecursionしてた日もあり、気分屋なので時間はまちまちでした。

――Recursion内のどのカリキュラムを一番注力して勉強しましたか?

OOP(オブジェクト指向プログラミング)だと思います。

Recursionのカリキュラムで一番苦労したのが、Project5のブラックジャックで、OOPの「低結合・高凝集」の考え方をすごく守ったというか、よりリファクタリングしやすく、より読みやすく書くよう意識しました。

OOPコースをやっていよいよブラックジャックに取り掛かろうとした時、JavaScriptにはprivate修飾子が用意されていないことを知って絶句しました。せっかく学んだカプセル化や抽象クラスを使いたかったからです。

でもTypeScriptならこれらが使えると知って、学んだばかりのOOPの知識をフルに活かすため、TSで作ることにしました。

JavaでOOPコースを一周してるので、ブラックジャックと並行してTSを学ぶのは全く苦ではなかったです。UdemyでTS講座を買って、動画で機能を1つ1つ知るたびに「ブラックジャックだとここに使えそうだな」とか考えていました。

――Recursionを勉強する時に意識したことを教えてください。

コンテンツの進め方は、「ヒント(答え)があればまずそれを読んで理解して、その次に練習用エディタに何も見ずに書いてみる。分からなくなったらその都度ヒントを見る」というやり方でやることが多かったです。ヒントを横目にただ写経するより、自分がどこで詰まるか確認できるので定着が早かったです。

一方全く手を動かさなかったページもあって、例えば中級オブジェクトの「練習」は答えを眺めて理解するに留めていました。もししっかり取り組んでいれば、ブラックジャックを開発するときメソッドの命名や粒度で悩んでいた時間を減らせたはずと思います。

この調子で進めていて初級から上級の終わりまで30日ほどかかりました。内定を得るまではいずれも1周しかしていなくて、解いたコーディング問題もコンテンツの途中にあったものです。それ以外のコーディング問題はeasyを中心に解いていました。

コーディング問題に関して言えば、コンテンツの「練習」と同様に、分からない時はTwitterで答えを見てました。仮説すら立てられない時って考えているようで考えていない無駄な時間なので、そういう時はコンテンツを振り返りながら答えを見て、理解できたら何も見ずに解き直していました。

「全体を通して完璧に理解しようとする必要はなくて、どこに何が書いてあるかを覚えて、後で立ち返れるようにしておく」という考え方がすごく気に入っていて、Recursionのコンテンツの進め方にも同じことが言えると思います。「キャッシュの仕組み」「LIFO」「双方向連結リスト」は、理解があやふやなまま通り過ぎてしまったところがありましたが、プロジェクトをやる中でそういえば、と読み返して理解を深めることができました。

―― プロジェクトはどこまでしましたか?

もーよん:

  • Vending Machine(Project2)
  • Clicker Empire Game(Project3)
  • Computer Builder(Project4)
  • Black Jack(Project5)

以上の4つ作りました。

就活を見据えて「○○にこだわって作りました」を1つ以上言えるように意識しながら開発しました。こだわった点については僕のポートフォリオサイトにちょっと書いています。

―― ポートフォリオの中から1つ選んで、こだわった点について説明していただけますか?

では、僕のポートフォリオの目玉であるブラックジャックについて説明します。

カジノのブラックジャックが遊べるブラウザゲームです。ユーザーはまず賭け金を調節して、それ以降は手持ちのカードの合計値に応じてアクションを選択します。

工夫した点は、

  1. MVCのModelの処理を自分なりに解釈し直して分かりやすく読めるように書いたこと
  2. ボットを賢くしたこと

です。

まず、1つ目に関しては恥ずかしい話、Recursionが提示してくれている処理フローを最初理解できなくて、アドリブで書こうと思ったのがきっかけでした。僕なりの「こう書けば読みやすいんじゃないか」というポイントは2つ。

  • フェーズごとにメソッドを分けた
  • 引数の数を1つ以下にした

ブラックジャックはプレイヤーが賭け金を決めて、カードを全プレイヤーに配って、それぞれがアクションを選択して、最終的に勝敗を決めますよね。僕はその段階ごとにメソッドを分けてみました。

フェーズ名とメソッド名が対応しているから、メソッド名を見れば今何をしているのかが簡単に分かるし、コードを上から下に向かって読めばそのままゲームの流れが追えます。それと、どんな関数も引数の数が1つ以下になるように意識しました。引数が多いとその分読むときに頭の片隅で常に情報を保持しないといけないので、少ない方が親切なのかなと思います。

次に2つ目のボットを賢くしたというのは、AIがアクションを自動選択するときの精度を高めました。

最初はランダムに選ばせるつもりでしたが、どうやらブラックジャックには「自分の合計スコアが13で、ディーラーのオープンカードが7以上ならヒットすべし」みたいな定石があるらしく、それを反映させました。

やったことは連想配列を書いて、それを読み込ませただけなのですごくシンプルなんですが、自分のアイデアをコードで表現できた!って感じで達成感がありました。

他にも「カードカウンティング」と呼ばれるブラックジャック必勝法をボットが使うようにしてみたり、デザインパターンの1つである「シングルトンパターン」を実装したりしました。これも実際にやったことはすごく単純で、5行くらい編集するだけで実現できました。

面接でRecursionのプロジェクトをポートフォリオとしてアピール

――も―よんさんの就職活動についても教えてください。まずは、どのような方針で会社を選んだのですか?

最初は自社開発企業だけ探していました。自社開発に惹かれていたわけではなくて、受託開発は働きやすさでも技術でも遅れているみたいな偏見があって。偏見だと自分でもわかっていたので、視点をフラットにしようとそれぞれの立場で働いている・採用に携わっている何人かの方にお話を伺ってみました。

その中で「業界に興味がないと自社開発は飽きてしまいがち」というお話がありました。僕は特定の業界やサービスに対する情熱がなかったので、自社開発の場合どうしても志望理由に誇張が混じってしまう気がして、最終的に、受託開発こそ自分に合ってるなと判断しました。

自社開発企業の雰囲気やビジネスを学べる点には魅力を感じてましたが、自社開発企業に入るにしても、まずは色々なクライアントと仕事をして、世の中をもっと知ってから入る方が活躍できそうだなと感じました。

他にも

  • IT業界は人の出入りが比較的激しいから、最初の会社選びで失敗することは問題じゃない
  • 体調を壊さず、腐らず続けることが大切

などのアドバイスをいただき、「どこを選んでも思い通りの働き方・キャリアパスにはならない可能性があるから、知名度や待遇の良さで選ぶのではなく、自分の中から入る動機が湧いてくるような、そういう会社に入ろう」という結論に至りました。

受託開発会社に行く、と決めたうえで最終的に選んだ会社は、プライム案件の割合が高くて、社風が若くて、技術スタックもよく聞くものばかりです。かつて受託開発に抱いていたイメージとは真逆の会社なので、自社or受託の区別にあまりこだわらずみていくことが大事なんだと思いました。

また、Recursionの創業者のShinyaさんからのリファラル採用の呼びかけに手を挙げたことも、自分の会社選びの基準を改めるきっかけになりました。

就活を始めた当初は、自分のレベルでは無理だろうと有名企業を完全に諦めてたんです。でもShinyaさんとDMでやり取りする中で、僕自身行けると思っていた企業のレベル感がShinyaさんが挙げて下さる企業と全然違っていることに気づきました。自己評価を低く見積もり過ぎていたんです。それで、時間がかかっても良いからなるべく大手企業にチャレンジしたい!と思い始めました。

結果的にはこのお話は見送ることになったのですが、Shinyaさんからのアドバイスは自分の会社選びの軸となりました。

――就職活動を始めてどれくらいで内定が出たのですか?

入社を決めた会社の内定は、Recursion就活(意: Recursionのプロジェクトを組み込んだ履歴書でチャレンジした人生2回目の就活)を初めて一週間くらいで頂けました。選考方法がちょっと変わっていたので早かったです。

――採用者様の興味を引いたポイントはどんなところだと思いますか?

RecursionではJavaScriptでブラックジャックを書くように想定されていたけど、OOPの仕組みを活かすためあえてTypeScriptで作成したという話をしたところ、すごく興味を持ってもらえたと思います。

「TypeScriptの良さは何か?」など突っ込んで質問されました。

  • 型に加えてアクセス修飾子などが備わってるのでより堅牢に開発できる
  • デバッグしやすい
  • たまに英語っぽく読める?

のように答えました。

「その技術を採用した理由」ってなかなか説明が難しいと思いますが、うまく伝えられると好印象のはずです。強いエンジニアは技術の利点・欠点をいつも比較して取捨選択しているイメージがあるので、その片鱗をうかがわせるというか。

――書類や面接でどんなことをアピールしましたか?

文系未経験の身としては成果物が何よりの武器なので、書類審査ではたとえポートフォリオのURL記載欄がなくてもどこかにリンクをねじ込んでました。シンプルな自己紹介用ホームページを作って、そこにRecursionのプロジェクトも含め過去の成果物をまとめていて、本番サイトとGitへのリンクと、作品の感想みたいなものも書いています。

僕は大学を半年留年しているので、その分、数をアピールしなければと考えました。なので作品数は必要以上に多いと思います。面接では、ポートフォリオのこだわりを説明する他に、フロントエンドが好きということもアピールしました。

まだその理由を自分の中で言語化できていないとき、Recursionのもくもく会を利用して現役のフロントエンドエンジニアの方に「なぜフロントエンドなんですか?」と突撃したことがあります。

  • 技術の進化が早いところ
  • ユーザーに直接価値を届けられるところ

などを挙げてくださって、僕の実体験・価値観と重なる部分もあって参考になりました。

ちなみにRecursionではプロジェクトにBootstrapを使っていますが、僕はTailwind CSSが好きでそれを使っていました。Tailwind CSSの特徴を予習して、面接でなぜそれが好きか説明したこともありました。

――コーディング試験はありましたか?

インターン応募も含めて数回受けました。すべてWeb上で受ける形式で、売上高300億円規模の会社から国内の有名なメガベンチャー企業まで受けてます。

  • Linuxコマンドの意味を選択肢から選ぶタイプ
  • 専用のエディタにテストケースを全てパスするコードを書くタイプ
  • コードは自前のエディタで書いて、答えだけ入力するタイプ

僕が経験したのはこの3つです。2番目のタイプはRecursionのコーディング問題と一緒ですね。難易度については、Recursionのeasy・medium問題を広くやっていれば全く手も足も出ないということはないと思いました。

全10問のコーディングテストで、4問しか正答できなかったのに通過できたこともありました。正答できたら次の問題に進むタイプで、5問目が「面積が○以下のピタゴラスの定理を満たす直角三角形は何個あるか?」みたいな問題でした。時間切れになってしまい、これは落ちたなと思っていたら後日通過の連絡がきたんです。

たぶん、コーディングテストの結果をそこまで重視しない会社だったか、もしくは事前に提出していたポートフォリオが目に留まったかだと思いました。なのでポートフォリオに自信がある場合は、コーディングテストが行われるより前に提出できてるといいかもしれないです。

――Recursionで学んだ知識の中でも特に評価されたものは何だと思いますか?

MVCだと思います。面接で「MVCの区別に結構悩みました」という話をしたら、採用者から「MVCはそれぞれ何を書くところなのか説明してみて」と聞かれました。

  • Modelはブラウザやターミナルなどインターフェースが違っても共通して行うような処理を書く
  • Viewはユーザーの目に見える、画面上の更新処理(DOMにクラスを当てたり剥がしたり)を書く
  • Controllerはイベントハンドラを書く

ということを答えました。

Recursionのコンピュータサイエンスプロジェクト5では、ブラックジャックの開発に入る前に、「MVCとは何か?」「分離すると何がいいのか?」をすごく丁寧に説明してくれてますよね。僕はその時点ではあまりピンときてなかったんですが、開発しながら理解を深められました。

体系的に学んだ後、すぐアウトプットできる構成になっていることは、知識の定着にすごくいいと思うんですよね。MVCについてよどみなく答えられたことは、採用者の顔色から判断するに好感触を得られたのではないかと思います。

――内定をもらえた一番の要因は何だと思いますか?

Recursionのプロジェクトでブラックジャックを開発した時の、こだわりポイントを熱く語ったことは、高評価に繋がったと思います!

  • ボットが特定の戦略に則ってアクションを決定する仕組み
  • 手札のカードが何枚増えても全体が常に左右中央になること

などを工夫した点としてアピールしました。

「教材で指定されていたわけではなく、自分で考えて実装した」ということを強調しました。自分で課題を発見して、その解決策を自力で導き出したという経験をアピールできたのが良かったと思います。

僕は「なぜそれを課題と捉えたのか」を説明するときに人間性が出やすいのかな思うんです。採用者は技術力より人間性を重視している場合もあって、そんな時は複雑な機能が必要というわけではなくて、自分の内面に結びつくようなこだわりを説明できるといいんだと思います。

文系専攻かつ実務未経験者が内定を取るためにやるべきことは?

――Recursionユーザーの中には、実務未経験、学生、文系出身の方がたくさんいらっしゃいます。新卒文系から有名企業のフロントエンジニア就職を成功させたもーよんさんからアドバイスお願いします。

文系・新卒・インターン経験なしの僕がやったのは、ポートフォリオ作りと自己分析です。

ポートフォリオは、僕みたいにたくさん作らなくても、どこにこだわったのかしっかり説明できるような1つがあれば十分かもしれません。こだわりについて自信を持って説明できれば、プログラマーの適性があると思ってもらえるはずです。

それに加えて、ドキュメントとして整えることも大事だと思います。僕は自分のホームページを作って、そこに成果物のURLと紹介文をまとめました。採用者が訪問することを考えて、READMEを書いたり、本番サイトにもGitへのリンクを張ったりしました。上部にあるCODEの文字にGitへのリンクを張ってます。

モジュール化や静的解析はまだやれる余地があったと思いますが、少なくともGitで管理して、VercelやGitHub Pagesなどホスティングサイトにデプロイするのは就活だと必須かと思います。

そして新卒の場合は特に、自己分析が大事だと思いました。面接での質問の比重はポートフォリオに関するものより、僕自身に関するものが多かったです。

  • 文系卒という自分のバックグランドをハンデと思っていること
  • 部活時代のレギュラー争いで悔しい想いをして、それ以来努力したこと
  • 文系就活をやめてエンジニアを目指した理由
  • フロントエンドが好きな理由
  • 将来どうなりたいか

など、自分自身の実体験と価値観でもって説明できるように準備していました。そして「御社は理系を多く採っているから文系の自分は競争心を燃やして頑張れるはず」というようなアピールをしました。

あとは就活とは直接関係ないですが、僕はRecursionの問題を解いたら必ずユーザー回答をみて、良いコードを真似てました。例えば、JavaScriptの繰り返し文は for(let i = 0; i < items.length; i++) だけじゃなくてfor(let item of items) みたいにも書けますよね。インデックスを追跡する必要がない場合はこういう直感的な書き方もあるんですが、他人のコードを見る癖がなかったらまだ知らなかったと思います。

他にもObject.keys(連想配列)で連想配列のキーだけ取り出せたり、console.tableでデバッグできたり、意味ごとに空行を入れて読みやすくする書き方(Shinyaさんがやっているイメージ)だったり、小さいことですけど引き出しが結構増やせたと思います。

有名企業にフロントエンドエンジニアとして内定獲得

―― 最後になりましたが、内定獲得本当におめでとうございます。差し支えなければ就職後の業務内容の概要を教えていただけますか?

Webアプリなどの開発を行っていて、僕はフロントエンド開発チーム所属になりました。

この会社に決めたのは、客先常駐がないことや、Vue.js、Angular、Electronなど技術スタックがモダンなのが魅力的だったからです。また、内定者交流会で「フロントエンドに新卒がいきなり入るのは稀であること」や「ポートフォリオのレベルが高かった」と言っていただけたのが入社を決めた理由の1つです。

Recursionを始めて4ヶ月後には就活を再開し内定を得ることができました。こうして振り返ると、満足いく形で就活を終えられたのは、色々な方に助言して頂いたおかげだと思います。特にRecursionを通じて現役エンジニアの方や人事の方とお話しする機会が持てたことは、会社選びの軸を定めるきっかけにもなり、その意味でもすごく感謝しています。

また内定者交流会で「ポートフォリオのレベルが高かった」と言ってもらえたことは、RecursionでMVCなど体系的に学習できたおかげです。あの時始めていなければこれだけのものは絶対作れなかったはずですから、Recursionを選んで良かったなと思います。

―― もーよんさんの作るプロジェクトは完成度、デザイン性ともに素晴らしく、才能と今後の活躍を期待させるものでした。またRecursionにも情報共有していただけたら嬉しく思います。たくさんのお話を聞かせていただき本当にありがとうございました。