『CYCOMPE』に参加してきました!
はじめに
こんにちは。Dot-Pです!
今回は 2024年8月24日~25日に開催されたサイバーエージェントのチューニングコンペティション『CYCOMPE』に参加してきたので、その内容や感想について書いていこうかなと思います。
iOS、Android、バックエンドにおいて開催されたのですが、
私は、バックエンド部門で参加してきました。
他の部門の方と話した感じだと、形式が同じではなかったので、
今後、iOSやAndroidの部門に参加したいという方は参考程度に聞いてください。
今年から始まったコンペティションで、情報もあまりないのかなと思いますので、皆さんに楽しさを共有できればと思います。
志望動機
はじめに、前提の話としてなぜ「CYCOMPE」に参加しようと思ったのかについて話していきたいと思います。理由は3つあります。
自分が身に着けてきた技術がどんなものか試してみたかったから
社員の方々や優秀な同期がどんな考え方をしているのか知りたかったから
コードの品質管理とスピーディーな開発に興味があったから
後述しますが、面接でもこの3つについて話した気がします。
そもそも「君、何者なの?」と思った方は、Xを見てください!>> https://twitter.com/DotP_engineer
選考
選考フローは、
書類選考 -> 人事面接 -> 合否連絡
でした。
書類選考
先ほど挙げた3つの志望動機をまとめたのと、経験について詳しく書いていった感じです。ChatGPTと壁打ちしながら、少しづつよい文章になるように修正していました。
あと、長期インターンについてのスライドやハッカソンで開発したプロダクトがあったので、それらを提出しました。
ハッカソンでや1on1イベントでアウトプットがあったので、イベントに参加していてよかったなと思いました。
もし、学部1、2年の方が読んでいるなら、
ハッカソンや 1on1イベントに参加することをオススメします!
人事面接
詳しい内容は忘れてしまいましたが、物事に取り組む姿勢みたいのを評価していた気がします。主にESに書かれている内容について深堀りされました。
面接の前日は心配の気持ちが大きかったのですが、面接官の方が緊張しないように振る舞ってくれたので自分の気持ちを正直に話せました。
無事、選考を突破できました🎉
インターン内容
そろそろ「はよ、インターン内容教えろや」という声が聞こえてきそうなので、インターン内容について書いていきます。
正直、インターン前に読んでもあまりピンとこなかったのですが、終わった後に読むとそのことかとスッキリします。
ある架空のプロジェクトがあり、そのプロジェクトの要件を満たすような
コードを 1 から設計・開発しました。言語はGoでした。
具体的には、仕様書が与えられ、その内容に沿って開発します。
しかし、仕様書は時間によって変わっていきます。
追加機能を含め、ドキュメントがどんどん増えていきます。
ブログに書いてあった課金要素も仕様変更の一つでした。
(伏線になってると思わなかった)
仕様変更によってコードが動かなくなることを防ぐために、
テストをつくったり、設計に力をいれたりします。
テストコードの拡充、lintの指摘項目数の少なさ、ドキュメントの整備、プロダクションを意識したコード設計、コーディングの4つの視点でプログラムが採点され、スコアが得られます。このスコアを参加者同士で争い、優勝を目指します。
開発時間は10時間以上はあったはずですが、全く足りませんでした😅
そのため、戦略性もかなり必要で、テストカバレッジをあげるのか、どんな設計にするのか、リファクタリングをいつするのかなど多様な観点で考えなければならなかったと思います。
開発タイム
開発は2日間ありました。
私は、1日目はオンラインで2日目はオフラインで参加していました。
それぞれの期間に何をしたのかについて話していきたいと思います。
1日目
レポジトリを見てびっくりしました。
「あれ、ファイル少なくね?」
ISUCON みたいなチューニングコンペだと予想していたのでびっくりしました。
先ほども書いたのですが、1から作成するという珍しいコンペティションでした。そのため、アーキテクチャ設計からがっつりしていくことになるのですが、ここで失態をおかします。
アーキテクチャ設計にじっくり時間を割いてしまいました。
パッケージをあーしてこーして、抽象化は…
みるみる時間は溶けていきます。
実装自体に遅れが生じ、ほかの人のスコアを見て焦り始めます。
「数万点でてる人おるやん。こっちはまだ提出すらしてないんですけど…」
今思えば、先にmain関数にすべて実装して安心してからリファクタするべきでした。完全にやらかしましたね。
やっとの思いで提出して、スコアを確認。
競プロをやっている人にはわかると思うのですが、
ジャッジ判定待ちに似た気持ちになります。
「高得点こい…、こい…」
Slackでスコアを確認します。
少し、ほっとしました。この段階で何点が上限なのかはわかってなかったのですが、すこしは追いつけたかなという印象です。
詳しくは忘れてしまいましたが、この段階では、そこまで悪い順位ではなかったと思います。
「バグが少しあるので、修正しなくては…」
そんな矢先に、社長がきます。(もちろん、設定上の社長です。)
\\ 仕様変更、確定演出 //
またまた、焦り始めます。バグ修正終わってないのに…
とりあえず、バグを残したまま、バージョンアップするわけにはいかないので、とりあえず修正します。
キーボードをたたきまくって、修正します。
テストコードの拡充をしてなかったので、その分以外は点数を取れたのではないのかなという感じです。
そろそろ、バージョンを上げたほうがよいかと思ったので、機能追加をしようとしてバージョンアップを目指しました。
しかし、ここでまたしても問題が。
最近、Go言語で実装してないので、実装方法がわからんという問題発生。
とはいえ、調べまくればどうにかなるだろうと思い、Googleの検索エンジンにクエリを投げまくります。
調べながらであったため、時間はかなりとられてしまいました。
とはいえ、1日目の開発終了の数分前に作り終えました。
「マージして、スコア見てみるぞ!」
「どれ、どれ…」
スコアが真っ白…
頭も真っ白です( ゚д゚)ポカーン
Q&Aセクションで確認すると、すべてのテストで失敗したらしいです。
そんなわけ…
よく確認してみると、 一部のコード変更が反映されていません。
ステージング漏れです。
「ばかやろう」
自分を殴って、1日目は終わります。
2日目
この日はオフラインでの参加を予定していたので早めに起きて、
アベマタワーズに向かいました。
「ビルでけぇなー」
田舎心が全開なまま、会場に向かいました。
この日の最初はランキングの発表があったので、ドキドキしながら聞いていました。というのも10位以内に入ると、決勝に進めるのでランキング内に入れればいいなと思っていました。
「ワンチャンないかな…」
そう思っていたのですが、そう甘くはなく10位以内には入れませんでした。
ステージング漏れをし、v2スコアが0点状態なので分かっていたといえば、分かっていました。
ただ、v1スコア単体で見たときにランキングでは上位の方にあったので、
下剋上してやるぞと、気持ちを入れ替えて、開発を進めることにします。
さあ、2日目も社長がやってきます… (何度もいいますが、設定上です)
ここでブログに書いてあった課金要素の仕様変更が来ます。
「仕様変更が多いな…」
絶望しながらも、昨日起こった問題をとりあえず修正しなくてはならないので、午前中に解決してしまいます。
~パソコン、かちかちタイム~
前日の反省を生かし、ステージング漏れがないかしっかり確認して、こまめにマージしていきます。ここでもバグを見つけたので修正していきます。
なんとか無事に午前中の開発を終え、途中結果が出ました。
順位は、v1は6位、v2は10位!
午前中の90分でかなり追い上げてきたぞと思いながら、午前中の開発を終えます。
~昼食タイム~
ここで、昼食休憩が始まります。
社員さんと一緒に食事しながらキャリアのことを聞いていました。
さすがに、詳細をここに書くわけにはいかないので、
気になる人はCAインターンにぜひ参加してみてください~
追記:「黒牛ハンバーグ弁当」がおいしかった。
さあ、午後も開発を行っていきます。
だいぶ、実装が遅れていますが、開発に仕様書は絶対ですので、改めて、確認します。
「仕様変更、めちゃくちゃ多いな。」
「ん…? これってどのことだ?」
仕様がかなり複雑になり、頭は錯乱状態になりました。
とりあえず、簡単な部分から実装しようとしてコードを書き始めます。
今思えば、ここがよくありませんでした。
一部、実装が完成して軽く目視で確認しようとして、よからぬことに気づきます。
「あれ、なんか仕様と違くね?」
ツールの使い方が正しくないことに気づき、実装をやり直さなくてはいけないことに気が付きました。かなりのタイムロスです。
そんな感じでグダグダとなってしまい、最終的にはバグ修正の途中でタイムアップとなってしまいました。
ちゃんと仕様を確認することは大事だと、あれだけわかっているはずなのに、タイムプレッシャーで手を先に動かしてしまいました。反省です。
結果・懇親会
結果は、惨敗でした(´;ω;`)
スコアも技術力も、桁が違いました。
ただ、二日目でスコアを追い上げていたので、
そこは評価できるところだなと思っています。
残念ながら、入賞となりませんでしたが学びはあったと思います。
単純に、自分の実装で理解があいまいなところや悪い癖を見つけられたのもよいですが、なによりこんなに優秀な人たちと一緒にコンペをしていることがなんて幸せなことか!
昼食や懇親会で社員の方々や優秀な同期と話す機会がありました。普段、どんなことをやっているのか、何をしていきたいのか、みんな熱心に話していて、素直に尊敬しました。
「ん…? 本当に学生なのか?」
「人生何周目なんや、この人は…」
つよつよ過ぎてずっと聞き入っていました。
大学の情報学部であっても授業以外でプログラムを書いているだけで偉いみたいな風潮にあるので、別世界に来たかのような感覚でした。
完全に宇宙猫状態です。
普段の生活だけでは会うことがないであろう方々ばかりであったので、刺激的でした。ずっと、ハラハラドキドキしている最高の二日間でした。
おわりに
写真は、Xでよく見かけるお別れの一枚です。(伝われ~~)
この日の夜、なかなか寝付けなくて、この記事を書いていました。
「自分まだまだやな」というのをずっと考えていました。
決して、自分を否定しているのではなくて、まだまだ自分は上を目指せると感じています。
そんな気づきやモチベーションをくれたCYCOMPEの運営の皆さんには感謝しています。
最高の2日間でした。ありがとうございました!