(0)はじめに
本記事では、約一年半の時間を競技プログラミング(競プロ)に費やした筆者が競プロを続けた理由と辞めた理由について述べます。
(1)バックグラウンド
本節では、競プロを始めた際(2019年8月ごろ)の自分のバックグラウンドを示します。
- 東京大学教養学部学際科学科総合情報学コースの学部3年生
- プログラミングを授業で触って一年程度で得意ではなかった
- 大学受験時の得意教科が数学だったので、多少の数学的素養はあった
(2)時系列
本節では、競プロを始めてから辞めるまでの時系列をご紹介します。年月の横に当時のAtCoderにおける色を付記しました。また、本節に興味がない方のために、折り畳みにしてあります。
友人の勧めで競プロを始めました。この時期は、AtCoder Beginner Contest(ABC)のA~D問題くらいを解いていました。当時の思いはこちらの記事に綴っています。 駒場祭やパズドラで忙しく、コンテストに参加するのみでした。また、螺旋本を買ったものの飽きて放置していました。この頃から辞めるフラグは立っていたのかもしれません。 競プロ関連の授業が大詰めを迎えていたこともあり、本腰を入れて取り組むことにしました。この時期は、毎日のようにABCのバーチャルコンテスト(バチャ)を独りで開いて精進していました。 泊まり込みでスキーのバイトをしたりイギリスへ留学に行ったりで取り組む余裕がありませんでした。この時期は、コンテストに参加するのみでした。 大学四年生で時間があったので、競プロに注力することにしました。この時期は、毎日のようにABCのバチャを独りで開いて精進していました。 この時期に競プロ用のTwitterアカウントを作りました。仲の良い方もでき非常に刺激的な日々を過ごせました。この時期は、Codeforcesのdiv2とdiv3のバチャを独りor複数人で開いて精進していました。 夏休みの精進の結果がこの時期に現れ、実力の上昇を実感しました。ただ、卒研の中間発表などがこの時期にあり、メンタル的に不安定でした。また、この時期あたりから自分のメンタルの弱さが顕在化しました。 卒論の提出まで一ヶ月を切っていたこともあり、精進はほとんどできませんでした。また、環境構築に突如として目覚めたので、アドベントカレンダーで入賞するために記事を書いていました(→受賞記事)。 卒研の提出が間に合うか怪しかったものの競プロが頭の隅にあったので、アカウントごと削除しました。前述のTwitterアカウントもこのタイミングで削除しました。 折を見て競プロを再開しようと思っていましたが、就活を始めていたためにタイミングがありませんでした。 アカウントを再作成し、気が向いた時に参加していました。気楽な気持ちで参加するつもりでしたが、参加する度に苛立ちを感じていました。後述の理由を元に、競プロから離れることに決めました。最近はWeb開発の勉強をしたり環境構築の入門記事(参考)を書いたりしています。内容
2019/8~2019/9(灰色、茶色)
2019/10~2019/11(茶色)
2019/12~2020/1(緑色)
2020/2~2020/3(緑色)
2020/4~2020/6(緑色)
2020/7~2020/9(水色)
2020/10~2020/11(水色)
2020/12(水色)
2021/1~2021/2
2021/3~2021/4
2021/5~2021/8
(2)競プロを続けた理由
本節では、自分が競プロを続けた理由を客観的に述べます。
成果を出しやすい
毎週のようにコンテストが開催され、成果が可視化されます。基本文法を抑えるのみで簡単に成果を出すことができるのは競プロの魅力ではないでしょうか。ただ、成果を出しやすいのは初めのうちで、成果が出ないことによる焦りなども出てきうることには注意が必要です。
コミュニティの思考能力の高さ
東大生や京大生が数百人参加していることからもわかるように、競プロに取り組む人の思考能力は非常に高いです。コミュニティのレベルの高さによってモチベーションが変わるタイプの人にとっては大きな魅力ではないでしょうか。
ゲーム性
毎回のコンテストで順位が出てレーティングとして反映されるため、レーティングが付くタイプのゲームが好きな人には適しています。ただ、他のゲームや競技と同様に、好不調の波が少なからず現れるので両刃の剣です。
スキルアップのわかりやすさ
アルゴリズム単位で学んでいくことができるので、スキルアップの程度がわかりやすい点も魅力の一つです。資格試験などの暗記系の勉強が好きな方には特に向いているのではないでしょうか。
頭を捻り勝負する機会
普段の生活で頭を捻る(思考する)機会はあまりないので、競プロはその機会として適しています。また、思考力での勝負という側面を競プロは持つので、受験数学などが好きな人には向いている気がします。
プログラミングのスキルアップ
様々なデータ構造やアルゴリズムを使いこなし時には100行程度を書くこともあるので、プログラミングのスキルを身に付けるのに競プロは適していると言えます。ただ、かなり知識に偏りがあるので、業務としてのプログラミングを学びたい場合には注意する必要があります。
(3)競プロをやめた理由
本節では、競プロを辞めた理由を主観的に述べます。
コミュニティの雰囲気
前述のTwitterアカウントにて交流していた方達は常識的でしたが、競プロのコミュニティの上位層の雰囲気が自分には合いませんでした。自分より下位の人を見下したり特定の人を中傷したりなど人間性に問題がある方を複数見かけました。また、個人的な考え等を公の場で発信するAtCoder社員の方々の姿勢も自分はあまり好きではありませんでした。
創造性のなさ
創造性を求めて競プロをしていたわけではないのですが、典型問題に帰着させるという営みに終始することに辟易しました。何かを作ってみたいという自分のプログラミングを始めた動機とずれを感じたために生まれた感情だと思われます。
メンタルの管理
競プロは、少ない時間内で複数の大問を解くこと、典型問題や知識の暗記が必要であること、数学的な素養が求められること、の3点で受験数学と似ています。自分はこのような特徴を持つ競技で緊張した際にブラックアウトに近い状態になるのですが、緊張状態の管理のための方法を見つけることができずメンタルを崩していました。また、客観的には自分と変わらない実力を持っている方々が青色になる中で、自分はメンタルを崩して水色から抜け出せないことにも嫌気が差し、よりメンタルを崩す結果となりました。
アルゴリズムへの興味
当然のことながら、レーティングごとに要求されるアルゴリズム等を学ぶ必要があります。初めのうちは、汎用性の高さや概念としての面白さをモチベーションとして自分は学んでいました。ただ、Grundy数やセグメント木などのある程度高度なアルゴリズム等に、あまり面白さを感じませんでした。自分でも勉強するモチベーションを探したのですが、このタイミングで"アルゴリズム自体に自分は興味がない"ことに気づきました。
成長可能性を感じなくなった
前述の緊張状態の管理やアルゴリズムへの興味という部分での課題を解決するのが難しく、自分の競プロでの成長可能性を感じなくなりました。また、AtCoder、Codeforces、yukicoder、AOJと様々なコンテストサイト等に参加して1年半で1500問程度の問題数を解いたものの、AtCoderでレーティング1450程度にしか達しませんでした。結果への評価は様々だと思うのですが、このまま続けてもトップ層(例:赤色)に辿り着くことは難しいと自分は感じました。
(4)最後に
競プロについて続けた理由と辞める理由を書き連ねてきましたが、プログラミングそのものへの面白さを感じてエンジニア職として就職することに決めたのは競プロのおかげです。各コンテストサイトの運営の方々にも感謝しています。ただ、上記のように競プロにはメリットとデメリットのいずれもあります。自分は見極めきれずにダラダラと続けたことで、他の分野の勉強を十分に行うことができませんでした。この記事を読んだ方々は、時機などを考えて適切な判断をしていただければと思います。
コメント