こんにちは、かわそんです!
先日、このようなツイートをしました。
サイバーエージェントのインターン修了👌 一言で表すと「挫折と成長」でして、周りのつよつよエンジニアに揉まれつつ、圧倒的に視野を広げました。これについて、明日の夜まで渋谷のカフェにこもって記事執筆します。ルーティンは大切にしなきゃですね、おやすみなさい💤 pic.twitter.com/SaClFGnzTj
— かわそん@Blog Life (@KKohey4) September 8, 2019
このツイートの通り、サイバーエージェントのインターンについて、共有します。
「アドテクコンペ」という、
ハッカソン形式のインターンですね。
✔️本記事の内容
- インターンの内容
- 学んだこと・反省点
- これからの自分
圧倒的に挫折して、成長した人間の記録です。
読み物として、
時間あるときにどうぞ。
目次
サイバーエージェントの「アドテク」に参加してきました[インターン]
インターンは3日間でして、順番に紹介します。
初日:お題の発表・アーキテクチャの設計
まずは、初日。
インターンの間で作るプロダクトと、チームメンバーが発表されました。
お題は一言でいうと、
「DSP」を作成せよ。
ですね。
、、、DSPとは何ぞやっていう話ですが、
広告落札オークションシステム
って考えてもらえれば、OKです。
詳しく知りたい方は、こちらの記事をどうぞ。
✔️何をどう作ったのか
詳しいことは書けないのですが、
ざっくりこんな感じ。
全部さばいて、機械学習でクリック率を予測してください。
その結果で、広告枠を争ってオークションをしてください。
競り勝ったら、あなたに売りますよ。
上記の通り。
で、僕はサーバーをGo言語で書いたという感じですね。
✔️技術選定の話
結論からいうと、
サーバー側はこんな感じ。
これを、組み合わせました。
GCPが使い放題ということで、
贅沢に設計に盛り込んでみましたw
(たぶん、8万以上の請求になってるはずです。
すみません。。)
チームビルディングをしつつ、
設計を終わらせる。
これが、初日でした。
2日目:ひたすら開発あるのみ
2日目は、ひたすら開発です。
初日はAbemaTowerだったのですが、渋谷マークシティに移動です。
ML(機械学習)側とエンドポイントや、レスポンスの形をすり合わせつつ、サーバーの構築をし始めました。
この辺りで、
ヤバめな予感が漂ってきました。
✔️何がやばかったのか
何がやばかったのか。
3つでして、下記の通り。
・Goが思った以上に書けない
・処理が重すぎる
上記の通り。
僕たちサーバー側2人が、かなりチャレンジをしていました。
Goに慣れていなかったのですが、
「スピードも早いし、せっかくなので」
という理由で、選定してたんですよね。
✔️ハッカソンあるあるが起きた
ハッカソンで一番あること
「寝れない」
問題です。
仮眠を繰り返しつつ、朝まで作業です。
ゴッティさん(@masagotty)のモンスタータワーで乗り切りましたw
#CATechChallenge アドテクコンペに差し入れ。50本分のエナドリタワー。
お ま た せ
い つ も の pic.twitter.com/chSR8tSFtE
— ゴッティ@サイバーエージェントエンジニア採用 (@masagotty) September 7, 2019
最終日:最後の追い込み、だが、、
いよいよ最終日。
午前中の開発2時間を使って、開発を追い込みました。
具体的には、
「とにかく動くものをデプロイする」
ことにフォーカス。
Kubernetesをサーバー側で使うことを諦め、GAEを使うことに決めました。
✔️エンドポイントの動きがおかしい
さてさて、、
デプロイが終わって、毎秒2000リクエストが流れてきました。
しかし事件が。
なんと204を返すはずが、ずっと500(サーバーエラー)を吐き続けていたんですよね。
焦りました。
メンターさんを呼んでも、なかなか解決せず。
結局、Goのソースコードを読むと、「ステータスコードを返すタイミング」にハマってたことがわかりました。
w.WriteHeaderだけで、statusコードは反映されません。
その後に、w.Writeも呼ばないとダメみたいです。
✔️最後の30分で正常な動きができた
原因はシンプルでしたが、
調べるのに時間がかかりました。
4時間のオークション中、最後の30分だけ、正常に動いたという状況でしたね。
残りは、
サーバー2人とメンターさんで、ひたすら調査でした。
調査の方法を盗んだり、
Goの内部を知るいい経験にはなりましたが、、、完全にやらかしです。
アドテクコンペの反省・成長
ここからは、
反省と成長について書きます。
大きく3つ。
- 「チャレンジ」には優先順位をつけること
- インフラのスキルもつけること
- 「コア機能の選定」には時間をかけるべき
ぶっちゃけ、かなり悔しかったので、忘れないように入魂します。
「チャレンジ」には優先順位をつけること
これは、審査員の方から頂いたフィードバックです。
「実務でチャレンジを入れる時は、優先順位をつけるよ」
新しい技術を入れる時は、
レガシーの技術も盛り込むようです。
つまり、
「新しい技術ばかりにならないようにする」
っていうことかなと。
✔️僕たちの場合
今回の僕のチャレンジは、下記です。
- がっつりGo言語を書く
- GCPを使う
- MLと連携する
「初めまして」ばかりのスキルでした。
ぶっちゃけMLとの連携以外は、1人の時の努力次第で、できますよね。
意識が分散して、
安定したシステムの構築が難しくなってました。
インフラのスキルも身につけること
今回使ったのは、GCPっていうインフラです。
Google Cloud Platformってやつですね。
ぶっちゃけ、かなり「慣れ」が必要な分野でして、限られた中で調べながら使うのは、なかなか骨が折れます。
✔️普段から触っておくことで解決
チュートリアルくらいは触っておいていいはずです。
というのはやっぱり
「触ったことがある」っていうだけで、
かなり出足が早くなるんですよね。
トラフィックが多い実務ではどうせ使うので、身につけておいて損はないです。
コア機能の選定には時間をかけるべき
「コア機能から作るべき」
よく聞く言葉ですよね。
特にITの世界では。
でも、特に複数の技術を混ぜる時は、意識し直したほうがいいです。
時間をかけて、
ここ以外は作らないくらいの気持ちで。
本当に大切ですよ。
予想外のところで詰まって、時間をロスすることとかありますので。
✔️僕たちの失敗
一番大きい失敗は、下記です。
致命的ですよね。
広告主が永遠に広告を出せません。
原因ははっきりしてまして、
「導通の優先度を低く見積もりすぎた」
ことです。
導通しないと話にならないのに、インフラやサーバーに意識を奪われすぎました。
最後に:サイバーインターン後の展望
ぶっちゃけ、かなり悔しい結果でした。
インフラ知識不足、
実装手順の不備、、
ですが、もう繰り返しません。
こうやって文字に起こして、整理したので。
実は、ちょっと余談なのですが、僕はTwitter(@KKohey4)で「#今日の積み上げ」っていうタグを使って、毎日のタスクを宣言しています。
外さないのは、
ブログの毎日更新ですね。
ここに「Go言語の勉強」を加えます。
次にみんなにお会いする時は、Goスキルで引っ張れる立場になるために。
あとインフラは、サイバーからもらった、4000円くらいのクレジットで勉強。
「つよつよエンジニア」になるために、
毎日頑張っていきます。
力をつけていく様子や学びは、Twitterにて発信しますので、よかったら「かわそん」って調べてみてください。
ではでは、以上です。
今回みたいに、「自分のカラを破る」きっかけを下さった、サイバーエージェントの皆様に、改めて感謝いたします。
コメントを残す