2023-10-23

競技プログラミングを始めた

AtCoder で競技プログラミング (以下競プロ) を始めた。
https://atcoder.jp/users/fohte

AtCoder のレートがじわ伸びし続けている様子
AtCoder のレートがじわ伸びし続けている様子

ABC (AtCoder Beginner Contest) に 1 ヶ月前から継続的に出ていて、競プロをやる習慣ができてきた。
なぜ今になって始めたのか、今どうなのか、何を目標にしているのか、あたりを記しておく。

レート推移を見ると分かるが、まだ灰色 (一番下のルーキー帯 1) を脱していない言葉通りの初心者なので、勉強方法とかそういうことは書かない。レートが上がってきたらまたそのときに書く。

AtCoder で提出しているコードや各コンテストの感想などは fohte/atcoder にある。

なぜ今になって競プロを始めたのか

競技プログラミングは少なくとも 5 年前くらいからはやってみたいと考えていたけど、なかなか気が進まず、やらないまま月日が経ってしまっていた。
なぜやってみたかったかというと、以前からずっと競プロができる人への漠然とした憧れや畏敬の念があったから。
自分もできるようになりたい、というのが最大のモチベーション。

あと、自分はアプリケーションのコードは多少書けても基礎的なコンピューターサイエンスやアルゴリズムの知識は乏しく、そこに負い目を感じていた。
ソフトウェアエンジニアの IC (Individual Contributor) としてのキャリアを歩みたいと前から考えているのに、このままではいけないなと思った。

まあ実務で競プロ的な知識が必要になるかというと、かなり微妙なところ。
もはや自分はクラウドインフラが主戦場となっていて、磨き上げた Neovim すら触る機会が全然ない。GitHub Copilot も使う機会がない。そんな状態なので、競プロを始めてもすぐに実務で活かせることはない。
強いて言えば、自分はプログラムを書くと動くものより最善のものを書こうとしてしまってアウトプットが遅くなりがちなので、競プロをやることでそこのバランス感覚を養えるのでは、という期待はある。

実務がどうこうという話はしたけど、プログラミングはたまにやるとめちゃくちゃ楽しいので、その感覚を味わうために競プロをやっているというのが現状。
長期的に実務で何か役立てる場面が来ると嬉しいけど、単純にプログラミングが楽しいので趣味として成り立っている。

競プロをやる理由を頑張って見繕っている様子
競プロをやる理由を頑張って見繕っている様子

1 ヶ月やってみた所感

頭と手を動かして問題を解くのも楽しいし、テクニックを学習してレートを伸ばしていくのも楽しいし、今のところ趣味として楽しくやっている。
ABC に出るだけであれば、毎週土曜日の 21:00 から 100 分間取り組むだけなので、生活が極端に圧迫されることもなく、気楽。

最初は想像より出来が悪く (A, B 問題を AC 2 通すのが限界)、自分のプログラミングスキルってこれっぽっちなのかと少し落胆した。
1 ヶ月経った今は、C 問題まではだいたい解けて、D 問題はテクニックの知識不足で何も分からず提出すらできないという感じ。
このやればやるほど上達していく感じがとても楽しい。

D 問題がどうしても知識不足で詰まってしまうので、今は『競技プログラミングの鉄則』という書籍を読み進めている。これを読破すれば一皮剥けそう。

それと、自分は競プロを始める前、競プロをやるにあたってどのプログラミング言語を選択するか悩んでいた。が、何でも良いということを書いておきたい。
少なくとも C 問題 AC がギリギリくらいの実力であれば、何でも良い。具体的に言うと C++ じゃなくて良い。
自分は Ruby が一番書き慣れていて最速で書けるので、Ruby にしている。C++ を学ぼうかと結構悩んでいたけど、悩まずに慣れている言語を使ってまず問題を解いてみるのが良い。
言語のパフォーマンスより書いたコードのパフォーマンスの差異のほうが圧倒的に大きい。
もっとレートが上がるにつれて Ruby だと厳しい場面が出てくる可能性はあるが、まだしばらく大丈夫そうという感触はある。

これからの目標

前述したが、実務に活かすことは考えていない。趣味としてレートを上げていきたいという気持ち。短期的には AtCoder 緑色が目標。

長期的にはABC を最後まで解き切れるようになりたい。(これはめちゃくちゃ高い目標な気がする)

最後に

競プロ楽しいのでやりましょう。

Footnotes

  1. レートと色については chokudai さんのブログ記事が分かりやすい。 AtCoder(競技プログラミング)の色・ランクと実力評価、問題例 - chokudaiのブログ

  2. AC は Accepted の略。AtCoder 特有 (?) の略語はいろいろある。用語集 - AtCoder Beginner Contest 074