F@N Ad-Tech Blog

株式会社ファンコミュニケーションズ nend・nex8・viidleのエンジニア・技術ブログ

インターンで圏論に目覚めた学生の話

3月19日から1週間お世話になっているy_koizumiです。
2月頭からインターンを転々としており
これが5社目で春休み最後のインターンとなりました。

普段は学生団体でチーム開発をしています。
技術領域としてはゲーム・Android/iOS・サーバといろいろ経験してきました。

インターンのブログを書くとのことで1週間で思ったことを
他のインターンなどの比較を踏まえながらツラツラと書いていきます!

やったこと

今回のインターンではviidleの機能開発をScalaでやらせてもらいました。
「viidleのアクション(View)を別アプリケーションで実行する」機能の一部を開発しました。

実際に担当したのは「Pub/SubのMessageをSubscribeしてHTTPリクエストを送る」というものです。

参加の経緯

他のインターン生と同じくサポーターズで面談したことがきっかけで
インターンに参加させていただくことになりました。

他の会社のインターンにも結構入っていたので
何か得るものがあるかな〜というラフな気持ちできていました

インターンの目的

・Scala触ってる会社を色々みてみたいと思ったから
・Scalaでの関数型プログラミング能力を向上させたかったから
・ScalaとかDDDやっている人たちとの人脈作り
この時点では圏論なんてことは頭の中にありませんでした(笑)

4日間の日程

・1日目:AkkaStreamsとGCPを使ってサンプルを動かす
・2日目:AkkaStreamsを本格的に使ってみる
・3日目:並列化によるパフォーマンスの向上、DDDについて雑談
・4日目:圏論について学習、ブログを書く、Rustについて雑談

1日目

業務内容

午前中は入社手続きをやりました。
他の会社よりも約2割り増しの記入量だったと思います ^^;

午後からは1週間でやることの説明と実装に取り掛かりました。
初めてAkkaを使うのでわからないことが多かったですが
石川さんに色々教えてもらって実装していきました。

余談

戦術的DDDを取り入れている最中とのことで、これからメンバーに浸透させていくのは大変だろうなぁと勝手に思っていました。
DDDを取り入れるのはどの会社でも苦戦しているようだったので
何かチームとして勉強していく方法はないものか自分でも探してみようと思います(笑)

2日目

業務内容

2日目はAkkaStreamsを使ってロジックの実装を行いました。
基本のSource、Flow、Sinkを理解して
BroadCastやZipなど色々な実装方法を試していました。

ドキュメントが英語なので少し苦戦しましたが
石川さんに助けてもらいながらロジックを実装することができました。

感じた事

石川さんが英語の文献をさらっと投げてきていたので
やっぱり英語の文献を積極的に活用しなきゃダメだなー感じました。

3日目

業務内容

パフォーマンス改善と認証情報の外部ファイル切り出しに取り組みました。
AkkaStreamsの仕様を理解するのが苦しかったので
石川さんに英語の記事を紹介してもらって頑張りました。

2日目で処理フローを分けていたのですが
これでは実装できなかったので処理フローを1本化して実装し直しました。

パフォーマンスの詳しい値を検証することはできませんでしたが
非同期で実行するため処理が詰まることは無さそうです。

圏論に興味を持ち始めた

機能開発がある程度落ち着いたら、関数型や圏論について色々お話しさせていただきました。
Scalaの基本的な操作はある程度できるようになっていたので
これからはモナドとかを学習していこうかなと考えるようになりました。

学生のためのインターンイベントに参加した

業務後にインターン生の成果発表イベント?なるものに参加しました。
イベントでは元営業の方とお話することができて新鮮でした。一人が数十社の企業を相手にすると聞いて面白そうな世界だなと感じました。

思い返すと、どこの会社に行っても人事、エンジニア、役員としか話していなかったので
営業の方と話すのは初めてだったかもしれません。

4日目

業務内容

3日目終了の時点でタスクは一区切りついたのでブログを書いていました。
ブログを書くこと自体は初めてで、ただ感じたことを書いたんですが大丈夫なんですかね ^^;

圏論について

石川さんや酒井さんから圏論についての話を聞いていると面白そうだなと思ったので、
午前中は関数型プログラミングと圏論についてひたすら情報を集めていました。

友達に数学科の人がいたので圏論について聞いてみると
「かなり抽象的だから数学をある程度やってから嗜むもの」
と言っていたのでかなり難しい概念なんだと再認識しました。
職業エンジニアの場合ライブラリの使い方を理解できていれば十分なのかな〜とも思ったりしました。

圏論を適用した高度なライブラリが開発され続けており、関数型プログラミング言語をやっていく上では重要な概念なので、これから1年かけて勉強していこうと思います。

まとめ

・技術的な気づきを多く得ることができたと思います。
・会社の雰囲気については、落ち着いてるな〜という印象を受けました。
・関数型の理解を深めるためのキッカケとなったのでよかった。
・ピザを沢山食べる事が出来た
・圏論頑張る。

1週間ありがとうございました!

ランチに誘ってくれた社員の皆さんありがとうございました!
石川さんと酒井さんとは技術的なお話をする機会が多かったのでとても助かりました!
内田さんにも手続き周りでサポートして下さりありがとうございました!