Gマイナー志向

とくに意味はありません

AtCoderとHighLoad Cupによるスキルアップ術 - ISUCON予選突破を目指して

こんにちは、ISUCON駆動のmatsuuです。

第1回ISUCONではそこそこ良い順位につけたものの、その後下降の一途をたどりここ数年に至っては予選を突破できてない現実。

この現実を省みて今の自分に足りないものは何かと考えた結果、以下の結論に至った次第。

  • プログラミングの実装速度が遅い
  • メインの開発言語としているGo言語力が弱い

今の職業はインフラエンジニアなこともあってちょっとしたプログラムを組むことはあってもGo言語をがっつり扱うのはほぼISUCONだけという状態。これはいかんね。

上記2つを改善すべく、2019年からAtCoderとHighLoad Cupを始めてみた。

AtCoder

言わずと知れた競技プログラミング。昔はGo言語に対応していなかったらしいが今は使える*1

競技として早く解くためにはよくある操作(標準入力処理や文字列変換など)をスニペットとして保存しておくのが良さそうだが、自分の目的は手を速く動かすことなのでそのようなスニペットは用意せず毎回手書きで書いている。

AtCoderの進捗

f:id:tmatsuu:20190416225043p:plain
11回目の参加で先週ようやく緑に。わいわい。

スキル的にはC問題が解けない時がある程度なのだが11回目にして初の4完。 アルゴリズムに少し詳しくなった気がする。

AtCoderの効能

以前に比べてGo言語に慣れ親しんだ気がする。文字列処理やslice、mapなどを扱う際に都度ググらなくてもよくなったのは大きい。

ただ、まだ手を動かすのが速くなった感触はない。今後もっとスピードアップしていきたい所存。

HighLoad Cup

高負荷システム開発コンテスト。誤解を恐れずにいえば長期戦オンラインISUCONでしょうか。

ロシアのMail.ruグループが主催しており、ロシア語と英語が用意されている。

過去に2回行われており、現在は過去問(Sandbox)が公開されている状態。過去問でもランキング機能があるので競うことができるぞ!

HighLoad Cupの特徴は以下の通り

  • 英語(もしくはロシア語)で書かれた仕様があるのでそれを満たすように自力で実装
  • リファレンス実装はない
  • コンテストの期間は1ヶ月強あることもありボリュームは多め
  • HTTPのリクエストとレスポンスのサンプルがダウンロード可能(実際の負荷テスト)
  • アプリの提出はDockerコンテナで。コンテナ上で動くならどんな言語/ミドルウェアを使ってもok

HighLoad Cupの進捗

ここ1ヶ月ぐらい細々とSandbox 2018に取り組んだ結果、先週末に初めて完走して末席にランクイン

f:id:tmatsuu:20190416225038p:plain
いやぁここまで来るのは大変だった

英語仕様の行間を読んだり、ロシア語のソート問題に戸惑ったり、公式サポートのロシア語が飛び交うTelegramに英語で突撃したりね。

リファレンス実装がないというのはこんなにも大変なことだったのねと痛感。

引き続き上位ランクインを目指してチューニングしていく所存。

HighLoad Cupの効能

  • REST APIサーバの実装力がメキメキ上がった(気がする)
  • テストの重要性を痛感した(リクエスト/レスポンスでテストを書くと良い)
  • 英語の文書でも物怖じしなくなった

まとめ

  • みんなAtCoderやろう
  • みんなHighLoad Cupやろう
  • 今年こそはISUCON予選通過するぞ
  • SELinuxはEnforcingだぞ

*1:goのバージョンは1.6だけど