読者です 読者をやめる 読者になる 読者になる

社内イベントで ISUCON を模した何かを開催した話

ISUCON 界隈を見てて羨ましかったので、社内イベントとしてそれらしいものを開催した。
なお、Web系ではなくWindowsのパッケージ開発をやってることや、参加者の技量を考慮して内容を考えた。

出題内容

  • この内容を当日説明し、 10:15〜16:00 の間、課題に取り組む
  • IDatabase の実装をC#で書き、アセンブリを提出する
    実際のコードとは若干異なるけど大体下のような感じ
class EventItem
{
    int X { get; set; }
    int Y { get; set; }
    DateTime Created { get; set; }
}

interface IDatabase
{
    void Initialize(IEnumuable<EventItem> items);
    EventItem[] OrderByX();
    EventItem[] OrderByY();
    〜中略〜
    EventItem[] HigherThanX(int x);
    EventItem[] LowerThanX(int x);
    〜中略〜
    string Name { get; set; }
}
  • ベンチマーカーが用意されており、規定時間以内に何回 IDatabase のメンバをコールできたかでスコアが計測される
    Initialize, OrderByX, OrderByY, (中略), HigherThanX, LowerThanX, (中略) までがワンセットで後は繰り返し実行される
  • 本番計測は運営側で行う
    仮計測は手元で行い、その暫定スコアは GrowthForecast に送られる
    他の参加者のスコアも自由に見れる
  • 運営が15人くらいの参加者からおおむね2人組のチームを構成した

感想・反省点

  • Initialize は規定時間に含めていなかったため、処理をここに寄せることでハイスコア獲得が可能になっていた
    禁止事項を曖昧にしてしまったため、どこまでの処理を寄せていいのかが参加者間で認識統一されておらず、不完全燃焼になってしまったチームが見受けられた
    この点が一番の反省点で、最低限禁止事項を明示すべきで、参加者に委ねるのは得策ではないと感じた
    スコア計測とは別で、10秒以内に処理を完了すること、などの制約をつけておくのがよさそうだった
  • 普段組むことがないメンバーがペア作業をしているのは、見ていて新鮮だった
    飲み会とかせずとも、こういうイベントを通じてコミュニケーション取るのはよさそうに見えた
  • 終了直後に上位者に解説してもらうことで、温度が温まった状態でハイコンテキストな話がされていて(少なくとも自分は)面白かった
    ただし「こうすると伸びた」が中心で、「なぜそれが早いのかを計算量から考えると・・・」といった話まで掘り下げられなかったのが惜しかった
  • 暫定スコアを公開したのは評判よかったが、終了30分前くらいまで GrowthForecast のサーバーを落とさなかったため、結果がほぼ見えてしまった
  • ベンチマーカーにバグが何度か見つかり、その場で修正することになった

運営について

  • 出題内容の検討、エントリのためのサイト作成、ベンチマーカーの実装、スコアサーバーの準備、当日の進行は自分で行った
  • 出題内容の相談やチーム分けなどは唯一の運営スタッフ1人に協力してもらった
  • 優勝の副賞を出すための予算はエライ人に協力してもらった
  • 集客はニガテなので近辺の人にお願いして宣伝してもらった
  • 参加者の規模感から、運営は自分を含め2人までと決めていた
    運営に協力してほしい人≒上位に入りそうな人 なので、極力参加者に回ってもらえるように配慮した

あとがき

データベースのインデックスってどういうロジックで早くなってるんだろうか?という疑問から、調べてみたら面白かったので、それをそのままテーマにした。
今考えるとそれを理由にして、データベースがやるべき実装はすべてOK、結果のキャッシュは外側のミドルウェアがやるべきだからNG、としておけば反省点に挙げた問題は多少解消できていたかもしれない。


この手のイベント運営はわりと大変に思われるが、やっていくうちに洗練される。
出題内容の検討のみ大変で、実施だけは決まっていた3ヶ月以上前からアイデアだけ何個か書いてたけど、実務との関連が薄く、ただ楽しいだけのものになってしまいそうなので、大体ボツにした。
(それでもいい気はするが、体裁上・・・)


あと終わった後に話しそびれたこと。
今回はロジックやパフォーマンスをテーマに挙げたものの、別にそれが得意じゃなくてもいいよって話をしたかった。
パフォーマンス厨みたいな人がいれば、システム全体のアーキテクトが得意な人がいたり、たいがいの技術情報を知ってる勉強マンがいたり、コミュニケーションを円滑にするための触媒みたいな人がいたりしてチームは成り立っているよね、っていうエモい話をどっかでしようと思ったけど、エモすぎるのでここに書いておくくらいにする。


勉強会を開こう!〜IT業界に学ぶイベント運営ノウハウ・初級編〜

勉強会を開こう!〜IT業界に学ぶイベント運営ノウハウ・初級編〜