見出し画像

『次世代トップエンジニア創出インターンシップ ACE』に参加しました

この文章で伝わる100倍は面白いので、来年もあれば申し込むことをお勧めします。

はじめに

一ヶ月ぶりです。こんにちは、LiKafです。

今回はタイトルにもある通り、
2023年9月6日から2023年9月19日までの2週間にわたって行われたサイバーエージェントの夏インターン
次世代トップエンジニア創出インターンシップ ACE
に参加させていただいたので、その記録を記事にしようと思います。
時々ある真面目な記事です。許してください。

来年度以降にこのインターンの参加を検討している学生にとって、申し込むきっかけになるような文章になれればなと思います。
(ほとんど自分語りなので技術的な話とかはないです。すいません。)


志望動機

そもそもなぜ私がこのインターンシップに参加しようと思ったのかについて簡単に説明します。

理由としては大きく2つあって、

1. これまでやってきたエンジニアインターンシップで培ってきた技術的なスキルや、精神的な成長をより高めたいと考えたから
2. 優秀な同世代との繋がりだけでなく、社員の方々とも積極的に交流して、実際に多くの利用者を抱え、日本だけでなく世界にインパクトを与える力を持っているサイバーの社風や文化を吸収したいと考えたから

です。

>これまでやってきたエンジニアインターンシップ❓❓❓何それ❗️知りたい❗️
詳しくは以下の記事をチェック❗️❗️(宣伝



選考

選考過程としては、
書類選考 → 面接 → 面接 → 採用
という感じでした。

書類選考

書類選考に関しては、人生初ESだったのでかなり苦戦しました。
伝えたいことを適切に文章にする能力って大事なんですね…

技術的な配信をしているブログ等のリンクを貼る欄があって、そこにこのnoteのリンクを載せました。
読んでくれたかはわからないですが、短いESでは伝わらない学びとかをこうやってアウトプットしといて良かったです。

通りました🎉


面接

一回目が技術面接で、二回目が人事面接だったと思います。

技術面談では、これまでの経験や興味関心や設計についての質問がありました。

エンジニアの面接も人生初だったので、正直言って全く上手に話せませんでした。

経験や興味関心、強みはESを書く際に整理できていたので多少はうまく伝えれました。
その過程で「PythonとC++の違い」のようなCSの基礎のような話もあり、AtCoderでの経験を活かして話をすることができました。

案外イケるのか?と感じていたところ、ヤツがきました。設計の質問です。
「〇〇のようなサービスを作りたいと考えています。これを設計するためにあなたならどのようなアーキテクチャを採用しますか?」みたいな質問です。

気絶しそうになりました。

上の記事を読んでもらえばわかると思いますが、私はこれまでWebアプリの要件的に、単一の言語とWebフレームワークのみで開発を行ったことしかありませんでした。

アーキテクチャについても、経験の多いインターン生からいくつかのPythonのWebフレームワークのメリットデメリットを提示してもらい、そこから採用したのみで、それ以外の言語のフレームワークは一切知りませんでした。

また、そもそもの話、このインターンのバックエンド開発において言語はGoNode.jsが想定されていて、私はバックエンドでPythonしか使用した経験がなかったのでそこでも的外れな回答をしていたと思います。
(持っている知識から全力で答えを捻り出しましたが…)

また、DBも一度も触ったことがなく、MySQLがなんなのかも、どのようにDBとやり取りするかも何も知りませんでした。
基本情報の勉強の時に、参考書を一通り読んだだけの知識でした。

「どの種類のDBを使えばいいと思いますか?」
と聞かれて、なんとか言葉を紡いだものの、
本当に何もわからなかったので「経験がないので想像ができません。」
と答えました。

すると、強みとして吸収力を挙げていたこともあり、面接官の方から、
「今から20分あげるのでネットで調べて回答してください。」
と言われました。

気絶しそうになりました。

全力で調べたのですが、流石に何も分かってない状態スタートだったので、どのデータベースが適しているかを理論的に説明するのは難しく、ほとんど意味をなしてない回答をして面接が終わりま…

「普段しないんですけど、最後にフィードバックしていいですか?」

気絶しそうになりました。

まさかのフィードバック付きでした。

自分自身の立ち位置だけでなく、どうすればより高みを目指せるのかをアドバイスしていただき非常にタメになりました。

技術に熱心で親身な社員さんが多くいるサイバーでインターンを経験したい気持ちが強くなりました。

でも流石に厳しいだろうなぁと内心落ち込んで退出したところ、10分後ぐらいに通過のメールが来て泣きそうになりました🎉


いや、喜んでいる場合ではありません。

二次面接までに、教えてもらった自分の弱みを少しでも克服する必要がありました。

おすすめの本を募ったり(回答していただいてありがとうございます)

ある方にはDMに突撃して、データベースについての概要や、技術面接において、具体的にどのようなことを考えて回答をすれば良いのか(負荷分散や堅牢性とか)を教えていただきました。(ほんとにありがとうございます)

また、データベースを触ったことがないのはまずいと思ったので、すでにインターンで作ったAPIにDynamoDBを追加したりしました。
(これまでは自作APIの中で外部APIを都度叩いていたのですが、そこをDBにすることで10分の1までレスポンスタイムを早めることができました。いい話🎊)

また、ちょうど学生起業をした方のお手伝いをする機会があり、MySQLをいじるタスクをしたりしてDBの概要をつかみました。

「さぁかかってこい二次面接!」
という気持ちで二次面接に挑んだのですが、人事面接で具体的な技術の話は特になく、興味関心の話をして無事に終わりました。

通りました🎉



インターンシップ本番

ついにインターンシップが始まりました。

今更なんですがこのインターンシップは
最初の1週間ちょっとはオンラインでチーム開発を行い、最後の3日間で実際にサイバーエージェントに出社して開発を行い発表をする
ものです。

就業型というよりはハッカソン形式のインターンシップです。
一般的なハッカソンとの最も大きな違いは、毎日社員さんと話す機会があることです。

インターン開始前

私たちのチームは

バックエンド: 2人
Android: 2人
iOS: 2人

のモバイルに特化したチームになりました。

インターン前日に自己紹介をする機会があり、Twitterやポートフォリオを見て、ビビりました。

「え?このサイト自分で作ったの?え。。」
「えっ、〇〇Kaigiのスタッフ?どういうこと?何?」

もう、つよつよしかいません。

さすが

次世代
トップエンジニア
創出インターンシップ
ACE』

です。
そもそもこのインターンシップのタイトルの全ての単語が強いことに今更気づきました。

初日が始まる前に簡単に言語やアーキテクチャを決定しました。
バックエンド側はGo言語を使って、GraphQLを採用することにしました。

ちなみにGoは文法だけでも前もって押さえておこうと思って軽く勉強しておきました。下の記事も読んでね??

みんなつよつよのなかで、ほとんど未経験(Goの文法ほんのちょっと + GraphQLは全く未経験、何も知らない)の状態から開発することになりました。ハッカソンも初めてです。


インターン初日(9月6日)

軽くガイダンスのようなものをして、チームごとにMTGを行いました。

そこで、同じチームのメンバーのメンターの方が私の推しの乃木坂のメンバーと同じ高専の出身なことに気づいてその話をしました。

ちなみに、本邦初公開ですが、
LiKafって名前はその推しの名前から来てるぐらいにはガチ勢です。

チームから戻されて全体でのMTGに戻ってもその話題が続き、全インターン生+メンターさんの前で家にあるグッズを紹介したり、どれだけ推しがいい子かを宣伝する完全に変なやつになってしまいました。やらかしました。

その後メンターの方と一対一で面談を行いました。

インターン終了時の個人目標を設定し、現状を分析した上でどのように取り組むかを考えました。

最初に目標を立てて意識的に取り組む土壌を作った上でインターンに取り組めたことはすごく良かったとおもいます。

そこで、私は

  • 様々なバックグラウンドを持つチームメンバーと交流して、より意識的に将来を見据えながら行動できるようにする・将来像を明確にする

  • これまで経験のない様々な技術を会得する

の二つを目標にしました。

特に一つ目について意識して取り組もうと考えました。
なぜかというと、そもそも私は
「将来エンジニアになると決めているわけではない」
からです。

語弊があるのでもうちょっと説明すると、
エンジニアになりたくないとかではなくて、他にも興味があることが多くあってまだ決めきれていない
ということです。

まだ語弊があると思うのでさらに説明すると、
エンジニアの能力も確実に他の興味あることにも活かせる(逆も然り)なので、今興味のあることに積極的に取り組むことで、将来をより明確にしたいということです。

語弊、、、もうないですか、、、?

メンターさんはこんな私の話を親身に聞いてくださりとても有り難かったです。


オンライン期間(9月6日〜9月16日)

ちょっとこのペースで書いてたら京極夏彦の小説ぐらい長くなりそうなので、さっき書いた二つの目標を中心にして書いていきます。

(Amazonアフィリエイトなんとかには参加していません。)



『様々なバックグラウンドを持つチームメンバーと交流して、より意識的に将来を見据えながら行動できるようにする・将来像を明確にする』について

そもそもなぜこれを目標の一つにしたのかについて話します。

私がこれまで参加していたインターンシップではエンジニアインターン生は全員同じ大学のメンバーでした。
そのため、考え方や将来像はほとんど似通ったものばかりでした。

今回のインターンシップでは、経験してきたことや、学校も学年も全く違う人たちが集まっていて、人生観など、これまで凝り固まってきた考え方を一度フラットに見つめ返すいい機会だと考えました。
どのような人たちがエンジニアを目指しているかにも興味がありました。
あと、普通に友達が欲しかったです。

まあそんな理由でこれを目標の一つに掲げたのですが、満足のいく体験ができました。

オンラインでのハッカソン形式ということもあり、iOSやAndroidの方も含めて作業中でもZOOMを繋いで雑談をしたり、夜中も繋いだまま作業をしたりして、

どういう流れでエンジニアになりたいと思ったのか
将来像
好きな食べ物
好きな音楽
趣味

など、いろいろな話をすることができました。
少なくともここ1年で新しく出会った人の人数よりも多くの人たちと話す機会があってかなり刺激になりました。
(1年間何してたんですかね😇)

自分が他のメンバーに比べてどういうところが違うかとか、どういうところに共通点があるとか考えたりしました。
まぁ、そんなこと言いながらただ楽しく雑談してただけなんですけど。


『これまで経験のない様々な技術を会得する』について

これについてはいうまでもなく、エンジニアとしての経験が他の人に比べて圧倒的に少なかったので、もっと経験を積みたいと考え、目標にしました。

私の技術スタックとしては
インターンで学んだこと【23年4月暫定版】』にも書いてるので是非読んでほしいんですが、

Python、TypeScript、HTML、CSS、Docker、AWS(Lambda, CloudFormation, Gateway, SAM)、Next.js、Vercel、FastAPI、DB(DynamoDB, MySQL)、Github Actions

(順番に意味はないです。触っただけの物も含みます。)

だけで、それ以外の技術に関しては一才知識がない状態です。

今回の開発では、以下の技術を選定しました。

  • Go

  • GraphQL

  • gqlgen(graphQLサーバ)

  • ent(orm)

  • golangci-lint(linter)

  • フォーマッタやテストツールはGo標準のものを使用しています

  • aurora (mysql)

  • k6 (負荷試験)

詳しくは、バックエンドチームで一緒だった方の記事を読んでもらえるとわかりやすいです(丸投げ

そうです。全て未経験です。

しかし、バックエンドチームで一緒だった方(上のブログの人)と序盤にペアプログラミングを行ったり、技術選定についても、様々な技術のメリットデメリットを噛み砕いて説明してくれたりして頂き、かなりスムーズに開発を進めることができました。

あの、本当にありがとう。ペアがあなたでマジでよかったです。神

具体的に私が関わった内容は、

  • DB設計

  • キーを元にそれ以下のデータを取得するエンドポイントの追加

  • PRやissueの環境整備

  • テストを書きまくる

です。

特に、エンドポイントを追加する部分は、ゴリゴリにGoと、ORMのentを生かして実装でき、「あ、俺今開発してるなぁ」って感じで非常に楽しめたし、勉強になりました。

あと、テストも書きまくりました。テスト書くのガチで好きなんですけど、なんか不思議がられました。

DB設計については、結構マスタデータがエグくて、リレーションが張り巡らされていてかなり苦戦しました。

JSONのようにスキーマレスにデータを持つことで、関連するテーブル数を減らすような工夫もあったと思うのですが、今回は
「スキーマレスの柔軟性と堅牢性はトレードオフ」
であることを鑑みて、保守性や今後の拡張性のために一個一個定義することにしました。
(あーこれ言ってみたかったんだよね、カッコいい😃)

まあこんな感じでオンライン期間は開発していました。

ちなみにメンターの方とは、毎日雑談的なことも含めて、詰まったところなどを相談する時間がありました。(ありがたい)

特に、実際のプロダクト開発において注目するところを丁寧に教えてくださってとても為になりました。
どういうことを考えて仕事をしているかとか、将来像を想像する上でも私にとっては貴重な話ばかりでした。


オフライン期間(9月17日〜9月19日)

ついに対面での開発が始まりました。

遠くからしか眺めたことのなかったアベマタワーに入り、

なぜか結構な頻度で目にするアベマくんに出迎えられ、綺麗すぎるオフィスで開発を行いました。

あと、アベマくんのボールをもらいました。

しわしわになっちゃった。

三日間ずっと、いやインターン終わってからもずっとニギニギしていたのでもうかなりボロボロです。

握りごごちも投げごごちも跳ね具合も最高です。
もう一個ぐらい貰えばよかった。

オンラインでこれまでと同じように開発をしていたのですが、決定的に違うところが二つありました。

  1. 美味しいご飯を食べれる

  2. ずっと横に社員さんがいて、なんでも話せる

ご飯の写真はマジで撮り忘れました。すいません。
焼肉とか、カレーとか食べました。おいしかったーーー。


本命は二つ目の
ずっと横に社員さんがいて、なんでも話せる
ことです。
正直、これの良さに気づいてませんでした。

あの、えぐいぐらいいいです。

詰まったところだけでなく、少しでも手が空いたら雑談をしていた(開発してください)ので、めちゃくちゃ面白い話をたくさん聞けました。

どんな内容だったか死ぬほど書きたいんですけど、長くなるので書けないです。実際に行って話してみてください。
ゲームにおけるバックエンドとフロントの決定的な違いや、データ分析の話など、ほんとに楽しい話ばかりでした。

特に、データ分析により興味が湧きました。
受かるかはおいといて、一年以内に必ず就業型インターンシップ(データサイエンティスト職)に申し込もうと決意しました。

より将来を具体的に考えれるいい機会になりました。


そんなこんなで開発が終わり、(一番大事なところですが飛ばします)
最終発表が終わりました。

発表が終わって審査を待つ間に、

「このチームメンバーいれば1つ事業始めれるじゃん。」

ってチームの誰かが言ってて、

「たしかに。」

って思いました。(激浅)

残念ながら最優秀グループにはなれなかったのですが、メンターの方に手厚いサポートをもらいながら、優秀なチームメンバー全員で協力しながら開発を行えたことはとても貴重な体験でした。


【余談】
最後に懇親会みたいなのがあって、オフィスでピザとかお寿司を食べながら色々話してたのですが、そのうちの一人が私の出身高校の後輩でした。

2個差だったので、校舎のどっかで会ってたんですかね、
少なくとも部活動的に相手の声は確実に聞いてたと思うのですごく不思議な気持ちになりました。

渋谷の中心で、愛媛の高校トークができるとは思わなかったです。

あ、あと来年から同じ大学の学科の院に進学する人も居ました。大学に友達増えそ〜😀

色々話してモチベがあがりました、やったあ!いいことづくし!


サイコー


おわりに

ダラダラ書いてたらだいぶ長くなっちゃった、すいません
いやぁ、楽しかったです。

もう7000字も書いて疲れたので手短に終わらせます。

インターン開始時に目標としていた

  • 様々なバックグラウンドを持つチームメンバーと交流して、より意識的に将来を見据えながら行動できるようにする・将来像を明確にする

  • これまで経験のない様々な技術を会得する

この二つの目標は、理想を遥かに超えるぐらい満足のいく形で達成することができました。

それもこれも、
企画や面接をしていただいた方、手厚くサポートをしていただいたメンターの方々、そして同じチームメンバーの皆さんのおかげです。

ほんとにありがとうございました。

これからも皆さん宜しくお願いします🙇


以上です!
最後まで読んでいただきありがとうございます!

ちなみに今は他社でデータサイエンスの中長期インターンシップをしています。
これは書けるかわかんないんですけど、とりあえずまた来月なんか書きます!

では〜

この記事が気に入ったらサポートをしてみませんか?