最近、僕の所属しているGMOペパボの競技プログラミング部に参加するようになったことをきっかけに競技プログラミングにハマっています。
毎週お昼のランチの時間を使ってみんなでワイワイ問題を解いたり、時には業務時間後に「P社の放課後」として活動することもあります。
競技とはいってもみんなで競い合う、という雰囲気ではなく、解けなかった問題について議論したり、こういう書き方もあるよーとアドバイスしあったり、本当にいい雰囲気のクラブ活動となっています。
競技プログラミングと自分
自分自身は学生の時から競技プログラミングには興味があって、ブログとしては5年ほど前に以下のような記事を書いたりもしていました。
なぜ競技プログラミングをやるのかというと、やはりデータ構造とアルゴリズムをしっかりやってた方が強いよね、という考えがずっとあるからです。
それに加えて、AtCoderなどのサービスではレーティングがついてランクによって色分けされたりと、上を目指すとまるでネットゲームのような中毒性があります。
そんなこんなで競技プログラミングやっていくぞーとなっていたのですが、入社まだ半年で業務を通してなかなか思ったようにバリューを出せないでいる中、身につけるべきことがたくさんあり、ちょっと優先順位考えねばならぬなと思い始めました。
やりたいことがたくさんあっても時間は有限なので、やることを選択する必要があるなと考えさせられたのです。
ハマり始めた頃はAtCoderの水色コーダーを目指そうかとも考えましたが、下のような記事を読んで覚えることの余りの多さに「ウッ」となってしまうような状況なので、生半可な取り組み方じゃ難しそうだなとも気づかされました。
職業プログラマーな以上、やはり一番は仕事においてバリューを出すことなので、いったん競技プログラミングについてはたしなむ程度にとどめようと思いました。
でも問題解くのは楽しいし役に立つ
ただ、問題を解いて他の人の解答も見ながら言語を覚える*1というのはとても楽しく、かついい体験なので、何かしらコーディングチャレンジは継続していきたいなと思っています。
AtCoder ABCのC、D問題を安定して解く、ぐらいならそこまで時間を投資せずともこなせそうな気がするので、それを第一にやっていこうと考えています。
また、コーディングチャレンジサイトはAtCoderの他にLeetCode、Codewars、Exercismなど色々ありますが、迷った結果、LeetCodeの問題は見た感じアルゴリズムとデータ構造をきちんとやることが求められそうなので、そこは将来余裕が生まれた時にしっかりやっていくことにし、当面はカジュアルな知識でも解けていけそうなCodewarsをやっていくことにしました。
まとめ
競技プログラミングについては会社のクラブ活動をメインとし、気が向いた時にAtCoder ABCに参加して茶色コーダーを目指しつつ、Codewarsも余裕がある時にやっていく。
そんな方針でいきたいと思っています。