memo46

競プロの精進記録その他。

FORCIA社 の Summer Internship 2022 に参加しました

8/15 〜 8/19 の 5日間、FORCIA社 のサマーインターンシップに参加させて頂いていました。

www.forcia.com

非常にお世話になり、また沢山のことを学ばせて頂きましたので、是非紹介したいと思い筆を執ります。

選考まで

M1 になりそろそろ就職活動も意識しないといけないなぁという時期で、5月ぐらいから「どこかインターンに行けたらいいなぁ」と思い探し始めました。応募した時の自分のプロフィール的には多分こんな感じです。

  • 情報系学科卒、情報系修士M1
  • AtCoder
  • web系のバイトを少しやっている

話は少し逸れますが、数年前に「ゆるふわオンサイト#3」というフォルシアの社員の方が主催オンサイトコンテストイベントに参加したことがあって、その際にフォルシア社のことを知りました。(とても楽しかったです)他にもフォルシア社のインターン参加ブログなどをいくつか読んだことがあったため、インターンを探す時に候補に入れていました。 そんな中フォルシア社のインターンのコースを眺めて

チューニングコンテスト形式で、検索システムの高速化を目指していただきます。

という文言に惹かれて楽しそうと思い、「検索アプリケーション高速化コース」に応募しました。(面白そうかどうかはかなり大事な要素だと思っていたので、そこは一番意識して探していました)

5日間と期間が短いので自分のスキルがちゃんと合っているかどうかももちろん重視して考えました。「一応TypeScript 書いたことあるし、生のSQLは書いたことないけど prisma は触ったことあるからゼロってわけじゃないだろうし(?)、これから勉強すれば大丈夫だろう」と思ったので応募しました。

選考

AtCoderJobs から応募しました。

面接では研究の話や、アルバイトでどんな風に開発を進めていたか、どんな技術を使っていたか等を話したように思います。競プロの話はほとんどしていないと思います(多分、、、うろ覚えですが)

開発経験がガッツリあるわけじゃないので受かるかどうか不安でしたが、採用メールが来たときは嬉しかったです。

選考後〜インターン開始まで

面接で PostgreSQL を使うと聞いていたので、採用のメールが来てから大学で本(https://www.amazon.co.jp/dp/4798160431)を借りて勉強しました。(全部は読んでいません)

最低限 SQL は書けるようにしておこう...と思い、https://topsic-contest.jp/contests/practice で練習したりしていました。

実際問題を解いてみると勉強したはずなのに全然書けなくて焦ったりしていました...やっぱり知っていると使えるは違うなぁって思いました。今思うとここで最低限書けるようにしておいてよかったです。あと競プロみたいに問題を解く形式だと勉強にも身が入りやすかったです。

あとは docker を使って PostgreSQL のサーバーを立てて、実際に色々触ったりもしていました。高速化についても勉強しようと思ったのですが、自分でデータセットを作るのが面倒で断念しました(?)

一応よくある高速化の手法はググって一通り確認していた感じです。

インターン中やったこと

テストデータの入ったDB+簡単な web アプリが与えられていて、それを高速に検索できるようにするといった内容の課題でした。テストデータを用いているとはいえDBのそれぞれのテーブルのサイズが非常に大きく、また実運用に近いデータセットであるというのが特徴です。

初日は何をしていいか分からなかったので、事前にググって調べていたよくある高速化を一通り試してみようと思ったのですが、中々上手くいかずほぼ進捗がないまま 1 日が終了してしまいました。この時内心めちゃくちゃ焦っていたのを覚えています。

しかし自分の席の近くの社員の方々が気さくに声をかけて下さったり、メンターの方に様々アドバイスを頂いたり分からないことを教えていただいたりなどの助けもあり、残りの日数で必死に課題にかじりついた結果、なんとか結果を出すことが出来ました。

特に、やみくもに高速化の手法を試すのではなく、EXPLAIN ANALYZE して実際にボトルネックになっている箇所を調べ、そこに対して適切に対策するというプロセスを学べたことが良かったです。3日目ぐらいに実行計画の読み方を社員の方に教えて頂けて正しく読めるようになり、そこからは対応策も適切に立てられるようになって、進捗も出やすくなりました。一般的なSQLの高速化方法は広く知られたものがいくつかありますが、それを用いるにもデータセットによって柔軟に対応する必要がある点が難しく、また面白かったです。

他のインターン生の方々が非常に優秀だったことも良い刺激を貰いました。

最終発表では多くの社員の方々に沢山のフィードバックを頂きました。かなり褒めて頂けたので嬉しかったです。

インターンを通して感じたこと

インターン中はオフィスの 1 席を実際に割り当てられて作業することができて、他の社員さんの仕事している様子を肌で感じることができたことが良かったです。

また「座談会」といって社員さんと雑談をする時間が設けられていて、社内に関する様々なことを聞いたり競プロの話をしたりと非常に楽しめました。個人的にはこの時間がとてもありがたかったです。

オフィス環境も、かなり良いスペックのマシンを割り当てて頂けましたし、休憩室のフリードリンクも充実していました。机にバナナが置いてあったり冷蔵庫にピノがあったりして、糖分補給に良く頂いていました。美味しかったです。

昼ご飯は高島屋の弁当が用意されていて、いつも豪華で毎日驚いていました。ご馳走様でした!

これで報酬が出るというのは驚きですね...。

(本当の本当に余談ですが、競プロの話をした社員の方々が全員で、強すぎ...となっていました :thinking_face:)

最後に

長いような短いような非常に充実した 5 日間で、参加させて頂けて非常に感謝しています。

この参加記が今後このインターンシップを受ける方々の参考になれば幸いです。

おまけ:お昼ごはんのお弁当の写真たち

1日目

2日目

3日目

※ 4日目は写真を撮り忘れたんですが、ヒレカツ弁当と豚汁でした。美味しかったです。

5日目