会員登録すると
このコラムを保存して、いつでも見返せます
この2023年4月からweb系の上場会社にて新卒ソフトウェアエンジニアとして働き始めているCです。就職先と職種を伝えたところ、多くの人から「どのように勉強したの?」「どのくらい勉強時間かかった?」などたくさん質問されたので、本記事にてやってきたことをまとめました。
おすすめな読者はあまり経験はない状態からソフトウェアエンジニアになりたい人、独学で学びたい人、これからプログラミングを始めてみようという人です。豊富なプログラミング経験があり、既に企業で長期インターンなどを経験している学生には物足りないかもしれません。
自分の背景について
ウェブ開発独学6ヵ月で23卒として新卒エンジニアの内定をもらうことができました。本記事では、ソフトウェアエンジニア職への応募に至った経緯から、どのように学習したか、どのようなプロセスで内定にまで至ったかについて書いていきます。
私は地方旧帝大学の新素材デバイスや情報システムなどライフサイエンスにかかわる研究を学べる学科に所属。そして大学院では情報およびネットワークの技術に関連した研究を行う研究科に所属していました。いわゆるコンピューターサイエンスを勉強するエンジニアど真ん中の学科ではありませんが、学部と大学院共にプログラミングや情報工学に触れる機会がある環境でした。
学部1年:C言語の文法をマスターするための授業を受講、基礎の基礎はここで身につけた
学部2年:pythonを用いた機械学習の授業を受講、他の言語にも少し触れる
学部3年:実験の授業においてプログラミングで実装を少しだけ
学部4年~大学院:研究で本格的にコーディングを始める
学部時代の授業や大学院入試を通して、基本情報技術者試験の合格に必要なレベルの情報工学の知識は身につけた
ソフトウェアエンジニア職を志すまで
大学院は進路としては研究実績を残して博士課程に進む。あるいはメーカーなどの研究職に推薦あるいは、一般選考で就職する学生が多い環境でした。なんとなく流れに身を任せて、私も同じように進もうと思いつつも「本当にこのままでいいんだっけ?」と立ち止まり、自分の将来について真剣に考えだしました。
その結果アプリ開発に興味があって、情報系の学科に進んだ根源的な想いを再確認し、ソフトウェアエンジニア職として新卒入社しようと考えました。
少し脱線しますが旧帝大に進学した学生ですら流れに身を任せて進路を決めていて、本当に自分がやりたいこと、向いている事をあまり考えていないケースがとても多いです。
自分が今やっている事、志望の矛先は「その道に進まないといけない」と変に無理して決めていないか。転職が当たり前の時代とは言え、長い間その職種でやっていけるのか。もしも企業選びや職種選びを間違えたときに転職しやすいか。これらのことを考慮に入れて進路について一度考えることをオススメします。
いかにして内定を得るために学習していったか
まず大前提として、内定を得るためにはその前段階のインターンに参加する必要があると認識していました。そのためインターン選考に通過できるレベルに達する必要があると考え、独学を本格的に開始することに。技術力が低いことは自覚していましたが、短い時間の成長度は高いという自信はあったので悩む前に行動していきました。
基礎的なプログラミング、ウェブ開発をどのように身に着けたか、どのような制作物を作成したか、コーディング試験対策について紹介していきたいと思います。
基本的なプログラミングについて
私の場合はC言語とJavaを授業で学習し、その後研究のためにPythonをかなり勉強し、調べなくても大体のことは書けるレベルになりました。一つの言語の文法や高速化テクニックなど極めておけば、他の言語に初めて触れる際に調べながらある程度かけるようになるのでオススメです。
他に触れたプログラミング言語(及びその他)としては、後述するサービス作りを通してJavaScript、Ruby、SQL、HTML/CSSなどがあります。今思うと、Javaは技術書を読む時に出てくるコードの例としてよく使われるので、もう少し勉強しておけばよかったなと後悔していますね。
授業や研究などでプログラミングをする機会がない場合は、初学者が勉強しやすいサービスがいくつかあるので、それらを用いて身に着けるのがいいと思います
1人でサービスを作るという実践で広く知識をつける
よく「エンジニアとしての能力をつけるには、作りたいものを自分で作るのが一番」といいますが、私も実践で広く知識をつけることになりました。私の場合は大学の友人から「メッセージ系のサービスを作りたい」と声をかけられ、面白そうだと思い作ることになりました、それも一人で。
幸か不幸か一人しかいないので、フロントエンド実装(UI設計・実装、ロジック)、API設計とその実装、バックエンド実装(データベース設計含む)、git操作、デプロイ、フレームワークの利用など全体を学ぶことができました。
研究室の知人にアドバイスを求めることもありましたが、基本的には自分で分からないことがあれがQiitaなどのウェブ記事を中心に調べて解決し続けた日々が力に繋がったのだと思います。
コーディング試験について
偶然にも研究室の先生が競技プログラミングサークルの顧問を務めていたため、就職活動と関係なく競技プログラミングに取り組んでいました。研究に関係ないように思えますが、問題を与えられて、それを解く力はシミュレーションを組む時にも活かされる結果に。
練習方法としては定番ですが、AtCoderやLeetCodeを用いて取り組んでいました。AtCoderに関してはAtCoder Beginner ContestのC問題、D問題あたりを解くことができれば十分です。もちろん企業によってはそのレベルでは到底通過することは無理なので、LeetCodeのArai60などに取り組む必要があります。
またコーディング試験とは少し異なりますが、企業によってはSQLについての問題を出題する場合があります。私が解いた問題は、その場で調べながらでも難なく回答できるレベルでしたが、SQLを取り扱うことが初めてだとさすがに厳しいので、簡単にprogateなどで文法を理解しておくといいでしょう。
就職活動について
インターンに応募&面接
自身の技術力に自信がないと、どういう企業に応募したらいいか迷うかもしれませんが、応募するのはタダですし、選考の過程で自分のレベル感を理解することができるせっかくの機会なので、ベンチャー企業から誰もが名前を知るメガベンチャーまで幅広く応募しました。
ベンチャーについては就活サイトに掲載されている中の気になる企業や、スカウトサービスから送られるスカウトの中から気になる企業に応募するのがオススメです。どうしても名前を知っている企業だけから選ぶと視野が狭まるので、就活の初期段階では広く受けるのがいいと思います。
私はメガベンチャーのインターンは選考を通過することはできなかったのですが、経験があまりないなかで最終面接までたどり着いたことは自信になりました。
インターンに参加
参加したインターンでは、その企業が開発・運営しているサービスの新機能、もしくは既存機能の改善をチームで企画実装するというものでした。3人1チーム、フロントエンド2人&バックエンド1人という体制でした。
まだまだ自分の実装力は低いなと感じはしましたが、チームメイトに時おり教えてもらいながらひたすら実装を進めて成長することができました。また実装以外の部分では企画出しの段階からチームに貢献しようと努め、結果として最終日のコンペで優勝できたことが嬉しかったです。
本格的なチーム開発がとにかく楽しく、のめりこめたこと。また独学で学んできたことが間違いではなかったという確信を得ることができたのが良い点でした。またチームメイトと働くなかで、自分に足りない部分を技術面・知識面共に見えてきたことも大きい収穫でした。
本選考
まだまだ経験値や技術力では勝負できないと考えたため、面接では短い時間でのキャッチアップ能力を売りにすることに。結果としてインターンに参加したベンチャー企業1社とメガベンチャー1社において最終面接に進むことができました。
技術面接において基本的な質問に対しては難なく答える事ができたのですが、尖った得意領域が求められる質問においてはうまく答えることができずに苦戦しました。まずは包括的な知識を身に着けることが大事ですが、もしまた就活生に戻ることができるのであれば、自分の色を出せる得意分野を身につけて臨みたいです。
入社後の今、エンジニアとして働いていて
実際に新卒として入社し、半年が経とうとしていますが基本的なプログラミングの能力は問題ないと感じています。調べながら、問題なく求めるものを実装する力は独学の際に身につけていたので、困ることはあまりないです。
一方でもう少し勉強していたら良かったと感じるのはアーキテクチャとテストについてです。どこの企業も何かしらのアーキテクチャに基づいてディレクトリ構造やルールを決めているので、有名なアーキテクチャを理解していると、既存のコードを読む際も、また新しく書く際にも役立ちます。またテストに関しては、個人で開発していた頃にはきちんと行っていなかったのでフローを理解し、テストコードを適切に書けるようになっていたら実務で困らなかったと思います。
最後に
身も蓋もない事をいうと、自分で調べる(努力する)力と気持ちがあれば誰でもソフトウェアエンジニア職に就職できると私は考えています。X(旧twitter)などをみると天才的な人がいて特別な能力が必要そうなイメージもありますが、そんなことはありません。
逆に言うと全て人から答えを聞こうとする人、自分で努力して分からない事を調べて解決しようとする姿勢がなく、ただの憧れだけでソフトウェアエンジニア職を志望するのは、遅かれ早かれ苦労することになると思います。
学び続けなければいけない要素が他の職種に比べて多いかもしれませんが、非常にやりがいを感じているのでぜひとも挑戦してほしいと思います。私自身も継続的に学習をし続けて、スキルを高めていけたらと。
会員登録すると
このコラムを保存して
いつでも見返せます
マッキンゼー ゴールドマン 三菱商事
P&G アクセンチュア
内定攻略 会員限定公開
トップ企業内定者が利用する外資就活ドットコム
この記事を友達に教える