nakashiiiの自由帳

自由に書きます

競プロ(AtCoder)の目標をレーティングではなく勉強時間にした理由

2022年の目標のひとつとして、「半年で競プロを700時間勉強する」というのを決めた。 なぜ、そんな目標にしたのかを忘れないうちにメモ

なぜ競プロ?

一応仕事はwebエンジニアなので、以下の条件を満たすものを目標にしたいと思っていた。

  • webエンジニアの仕事に役立つ
  • 即効性のあるものより、将来的に長く役立つ
  • キャリアアップにつながる可能性がある

このあたりのバランスを考えて競プロで得られるアルゴリズムとデータ構造の知識が該当すると考えた。あと、単純に楽しいので継続できそうだったからというのも大きい。

なぜレーティングではなくて勉強時間?

競プロと言っているが、私の場合はAtCoderのみやっていて現在は茶色(レーティング500くらい)。
そうなると目標を立てる場合は大概、「緑になる!(レーティング800を超える)」「緑安定(レーティング1000くらいで、パフォーマンス加減が1000程度)」みたいになると思う。最初はそれも考えたけど、そうすると自分の特性的に以下が微妙だなと思った

  • あとどれくらい頑張れば目標達成なのか分からない
  • 目標達成に対して、自分のがんばり以外の変数がある(他の参加者のレベル、自分の習得スピード)

まあ2番目に関しては「緑くらいなら、そんなの気にするまでもないでしょ?」という意見もあると思うが、気になっちゃう怠惰な性分なので、、
あと過去に年始に成果目標立てっぱなしで、結局うやむやにしてしまったことがN回くらいある(Nは十分大きいとする)ので、それをどうにかしたいという気持ちも強かった。

なので、「100%自分で達成がコントロールできる&途中経過が見えやすい目標」でなおかつ、それを達成すれば自動的に成果も出そうなものにすればいいのでは?と思って、勉強時間を選んだ。

AC数とかにすればいいのでは?

AC数も考えたけど、やめた。
まず、AC数を目標にすると数を増やすために簡単な難易度の問題ばかり解いたり、解説すぐに見てACして復習せずに次の問題に行ってしまったりする可能性があると思った。
あと、物事の習得にはいくつか段階があると考えており、競プロで言うと

  • 解説を見て理解できる(座学)
  • 解説を見なくても実装方針を思いつける(座学+実践)
  • 実装方針通りに実装できる(実践)

という感じ。したがって、学習ステップの最初ほど座学が多めになるため、仮にAC数を目標にすると、

  • AC数が伸びなくて目標に対して遅れて焦るorやる気を無くす
  • AC数を伸ばすために座学を疎かにする

ということが起こるかもと思った。なので、AC数ではなくて勉強時間を目標においた。

700時間の根拠は?

結論から言うと割と適当に決めた。
そもそも「何時間勉強すればレーティングOOに行けるのか?」というのは算出できないと思ったので、「可処分時間をガッツリ使って、行けるところまで行ってみる!」という作戦にした。 というわけで、可処分時間を計算すると

  • 平日:780h(= 3h * 5日 * 52週)
  • 休日:520h(= 5h * 2日 * 52週)
  • 合計:1400h

という感じになった。フルタイムジョブ & 通勤片道45分 & 0歳児が家にいる という状況で、自分の中で限界ギリギリの設定かな?と思う。上記より半年分で700時間に決定した。

なんで半年にしたの?

前述したように、「どれくらい勉強すれば成果が出るのか?」というのは算出が非常に難しい。ただ、それは経験があまりないからであって、過去のデータがあれば予想がつく。
そのため、いったん半年がんばってみてデータを蓄積して、後半の目標は振り返り後に再設定しようと思った。
あと、自分が必要とするスキルの中では、競プロは即効性が低いためその他の内容も後半に取り組みたいと思ったから。

どうやって進捗管理してくの?

スプレッドシートに書いていく。スマホからも書けるのでこれが一番しっくり来そう。
実際のスプレッドシートはこんな感じ。

f:id:nakashiii:20220109082208p:plain

工夫したポイントとしては、目標の勉強時間を日割り計算して「今どれくらい遅れているか?」が見えるようにしてある。画像の赤字が今遅れている時間数になる(だいぶ遅れてて焦ってる、、、)

実際に進捗が見えると「やばい!遅れてる!やらなきゃ!!!」みたいな意識がはたらくので今のところは割といい感じに取り組めてるかな?と思う

まとめ

今年こそは年始の目標達成するぞ!!!達成したらうまい肉食べようっと。