今回は有名企業で複数のインターンを経験したからの転職を成功させたペリーさんに、どのようにプログラミングを学習し、どのようなポートフォリオを作成したのかについてインタビューを行いました。
- ソフトウェアエンジニアのインターンシップを経験したい
- 文系からソフトウェアエンジニアを目指したい
- どのようなポートフォリオを作れば良いかわからない
そんな方にペリーさんの成功体験をお伝えします。
ペリーさん
大学では経済学を専攻。プログラミング経験1年にも関わらず、6社でインターンを経験。ハッカソン入賞経験あり。
目次
有名企業でエンジニアインターンを経験できたプログラミング経験とは?
――ペリーさんインタビューお受けいただいてありがとうございます。まずは簡単な経歴と、プログラミング歴について教えていただけますか?
経済学部国際経済学科の3年生です。
Recursion以前もプログラミング経験はありましたが、「コンピュータサイエンスの知識がないと伸び悩む」と思ったので、Recursionに加入しました。
プログラミング経験といっても、PHPを使って掲示板を作ったり、ECサイトを作ったりしただけです。まずは簡単そうなPHPに絞って学習を始めて、素のPHPで掲示板を作りました。その後は2つのフレームワーク(CakePHP、 Laravel)を学習しました。
3か月ほどの期間をかけて作成したのは2つです。
- CakePHP…素のPHPで作った掲示板と同じもの
- Laravel…Stripe決済を用いたECサイトの構築
ここで2つのフレームワークを経験したのは、1つのフレームワークしか知らないと、テイストの違うフレームワークを使用しなければいけなくなった時、柔軟に対応できないと思ったからです。
そのほか独学で勉強した言語はGoです。最近ではよくハッカソンなどで軽量のAPIを作成するのに使用しています。言語の慣習的な部分は多いけど、勉強コストは低いのでおすすめです。
――すでにプログラミングの経験、知識ともに豊富のようですが、Recursionを始めたのはどうしてですか?
先に小出しにしてしまいましたが、コンピュータサイエンスの知識がないと伸び悩むと確信したからです。
PHPを使えばある程度のものを作ることができましたが、「メモリ?何それ?」だったり、「ヒープ?何それ?」だったりして、深いところまで掘り下げられると何もわからない状態でした。
言語・フレームワークは現場によって違いますし、流行りや需要によって変わることもあります。インターンなどで実情を経験してみると、やっぱり基礎を身につけている人はどんな場所でも強いということを痛感しました。
今考えれば、Recursionから始めれば良かったなと後悔しています。
――これまでたくさんのインターンを経験していると伺ってます。Recursionを始める前にもインターンやハッカソンに参加していましたか?
Recursionを始める前にしたインターンは小さなスタートアップ1社だけで、ハッカソンは未経験でした。
Recursionでコンピュータサイエンスを学んだ後は、就業型インターンにできる限り参加しました。専門外の文系学部ですし、プログラミングについて相談できるような友達は周りにいないし、技術力を伸ばすにはインターンがベストでした。
ハッカソンは、Recursionを始めてからいくつか参加していますが、先日Recursion繋がりで知り合ったユーザーと参加して入賞することができました。
――Recursion以外のサービスを利用したことがありますか?
Udemyは利用したことがありますが、動画を見ながら手を動かすのが自分には合わなくてやめました。
Recursionでのコンピュータサイエンス学習
――Recursionを使ってどのような学習されたのか教えてください。まずは、選択した言語は何ですか?
元々はPHPを使っていたので、最初はPHPで始めました。
しかし、OOPをやるときにJavaを使うと聞いていたのと、元々静的型付けをやりたかったので、早々にJavaに乗り換えました。
――Recursion内のカリキュラムでは、どの項目を一番注力して勉強しましたか?
データ構造です。
実は、全くと言っていいほどデータ構造を理解していませんでした。先ほどお話したとおり、「コンピュータサイエンスの知識がないと伸び悩む」と痛感していたので、コンピュータサイエンスの基礎を身に付けるため、データ構造とアルゴリズム問題を解きまくりました。
有名企業でのエンジニアインターンでは、どのような業務を担当するのか?
――差し支えない範囲で今まで経験されたインターンの概要を教えていただけますか?
インターンは6社参加しました。このうち有名企業4社のインターンについて、企業名は伏せますが担当した業務の概要を説明しますね。
A社
言語は、Java(Spring)、TypeScript(Angular)を使いました。
あるECの部署に配属されて、ビジネスサイドの要望から設計・実装・テストを行うインターンでした。社員さんと同じようなスケジュールで、主に管理画面側の改修を行いました。
例えば「管理画面に〇〇のような機能が欲しい」といったビジネス側の要望から、必要なデータベースや非機能要件を洗い出して、Jiraにまとめてレビューしていただきます。その後、実装を行い、単体テストを作成して、それが通れば、レビューに入ります。
レビューで修正をした後、結合テスト、評価テスト、機能テストのログを全て取り、ドキュメントにまとめて、リリースです。ビジネスサイドの要望は、ビジネス側の要件を詰めたわけではなくチケットに起票してあるものを任されたという感じでした。
B社
就業型ではないのですが、エンドポイントごとにレビューをいただいて、あるAPIをGoで作成させるインターンでした。参加学生のレベルが高く、キャッシュを自前で実装したり、アーキテクチャを刷新したり、とにかく刺激的なインターンでした。
C社
Goで「パフォーマンス改善、新機能追加、UX改善」をするインターンでした。
2日間(ほぼ24時間)、AWSの権限を渡されてオンラインチャットアプリを改善し、新機能を追加するという内容でした。
すでにアプリとして動くコードを改善していくのですが、そのコードが酷すぎて、オンラインチャットどころか、普通のチャットも不具合でまともに動かない状態でしたね。
iOSチーム、Androidチーム、Webチームに自動で割り振られていて、それぞれクライアントサイド2人とサーバーサイド2人の合わせて4人がチームメンバーでした。
D社
Goで、アプリの新機能開発や、機能改善を行なっています。
ビジネスサイドの要望をステークホルダーと要件を詰めて、設計・実装・テストを行います。
機能改善では、APIを新規に作成して既存のAPIをリプレイスしたり、管理画面に新機能を追加・統合したり、バッチ処理を作成したりしています。
有名企業の採用試験でアピールしたことは、バイタリティとポテンシャル
――コーディング試験はありましたか?
上記4社中コーディング試験があったのは1社だけですが、これはたまたまで、学生インターンは基本コーディング試験があります。
コーディング試験がない場合の方が、技術力が担保されないため、当然技術的な面接が厳しくなります。ある企業では、ライブコーディング的な質問が多くて曖昧に答えてしまったら詰めれらました。
――選考の流れはどのように進みましたか??
- A社…面談 -> 書類選考 -> 1次面接 -> 部署面接(落ちたら複数回)
- B社…書類選考 -> 面接
- C社…書類選考 -> 1次面接 -> 2次面接 -> 3次面接
- D社…書類選考 -> 1次面接 -> 2次面接 -> 3次面接
上記4社はこのような流れで進みました。
どの企業も書類選考、面接と進むのはだいたい同じ流れだと思います。
――書類や面接では、どのようなことをアピールしましたか?
書類では、プログラミングの学習期間が短いので、その期間で精力的に活動してさまざまな結果を出している「バイタリティ」をアピールしました。
面接では、履歴書に書いた技術についてこだわった点やプログラムの考え方などを、その情熱が伝わるように話し、そしてプログラミングの学習期間が短くても「ポテンシャルがある」ということをアピールしました。
――最初のインターンはどうやって合格しましたか?その時のポートフォリオはどのようなものでしたか?
書類選考->面接という正規フローで合格しました。
その時のポートフォリオは、個人経営店用の飲食店の給与・勤怠管理アプリと飲食店を予約できるLINE BOTでした。
給与・勤怠管理アプリは、知り合いの個人経営店がExcelで勤怠を管理していたので、不便だなと思って作りました。今も実際に運用中です。
機能としては、PDF/CSVダウンロードや今までの売り上げなどのCSVアップロードなどがあります。
その他にも、誰かの役に立つプログラムを作るのが好きだったので、家族の1日の予定を共有するLINE BOTを作りました。Google Calendar APIから家族の予定を取得して配信するだけの簡単なもので、面接の時に詳しく説明しました。
非情報系専攻の学生がインターンの内定を勝ち取るためには?
――インターン内定をもらえた一番の要因は何だと思いますか?
技術的な質問でわからないことは素直にわからないと認めて、面接の中でも技術的な知見を得ようとするところだと思います。
それからコードを毎日書いてることですかね。多分一番大事なことだと思います。
――実務未経験者が内定を取るためにやっておいた方が良いことは何でしょうか?
とにかくコード書いて、自分が書いたコードを責任を持って説明できること!
あと、やっぱりチーム開発も大事ですよね。チーム開発の経験があるかは何度も聞かれましたし、トラブルなどチームで困った時にどのように解決したかなども質問されました。
ポートフォリオ(制作物)については、面接官によって評価が分かれることがあります。あったほうがいいかもしれませんが、チーム開発などでポートフォリオ代わりになるような経験を積んで、アピールの引き出しを増やしておいた方がいいと思います。
――今後仕事としてどうしていきたいですか?
さまざまなサービスを産み出したいです。
今の自分が目指すエンジニア像は、インフラからアプリケーションまで一通りできるようになった後、プロジェクトをマネジメントするPdMエンジニアです。
ステークホルダーと要件をまとめ、エンジニアをマネジメントし、実装に困っていたらアドバイスし、実装が間に合わない時は自らが手を動かせる、そんなエンジニアになりたいです。
プログラミングを始めたばかりの学生へアドバイス
―― Recursionにはたくさんの学生ユーザーさんがいらっしゃいます。プログラミングを始めたばかりの学生さんに向けてアドバイスをいただけますか?
学習しないといけないこと、学習したいことは山のようにあると思います。大事なのは勉強するベクトルを間違えないことです。
1つの言語を深く追求してみてください。それにはRecursionを使い倒すのが最も効率がいいと思います。
その後はインターンに参加して経験を積みつつ、個人開発では好奇心に忠実にやるのが一番伸びると思います!
―― ぺりーさん。これからインターンを目指す学生さんにとっても有意義な情報だったと思います。貴重な体験をお聞かせいただいてありがとうございました。