こんにちは、downmeltです。
最近、「AtCoder」を真面目に初めて見ましたのですが、毎週コンテストが開かれているという事実を知り結構驚いてたりします。
今更かよと思われるかもしれないですが、AOJという問題演習サイトと、たまにやる学生用の大会しかやったことがなかった私にとっては革新的だったんです。(何の弁明だ。)
それはさておき、今回は私がプログラミングの勉強をし始めて、競技プログラミングをやってよかったなと思うことをまとめてみようと思います。
目標を見つけやすくなる
私がプログラミングの勉強を始めて一番最初にぶち当たった壁は、
「何ができるかわからねぇ…」でした。
条件分岐が使える高性能演算機を見た初心者がJOI君(情報オリンピックの問題に出てくる天才少年)のようにガリレオ的発想ができるはずもないため、簡易計算機を作った後は手づまりに。
画像の表示などができるゲームエディターなどに比べて、計算と文字の表示しかできないプログラミング言語のできることのわかりにくさは大きいと思います。
競技プログラミングを始めてみると、自分ができると思う範囲以上のプログラムを作らせてくる問題に多く触れることができ、今の技術でできることとまだ自分に足りてない技術を見つけられるようになります。
そして、その二つがわかることにより次にしなければならない目標が見つけやすくなります。
人のソースコードを理解できるようになる
たとえ自分で同じ動きをするプログラムを作ることができても 、人のソースコードを理解するのは案外難易度が高いです。
競技プログラミングは人に作れと言われたものを作る競技であるため、繰り返しているうちに製作者の意図をくみ取るという技術が付きます。
人のソースコードを理解するという行為は、競技プログラミングの問題を解くことの逆算のようなものであるため、製作者の意図をくみ取る技術が付くことによりソースコードを理解しやすくなります。
この技術は、基本情報技術者試験の午後の問題のアルゴリズムなどを解くのにとても役立ちました。
勉強するのが楽しくなる
競技プログラミングはゲームに近い感覚でプログラミングを勉強することができます。
まず、常に次の目標が見つかる副産物として、勉強をクエスト消化のように進めていくことができます。
これにより、行き詰まりやる気がそがれるのを減らすことができ勉強するストレスを減らすことができます。
それに加えて、問題が解けた、解けなかった問題が理解できたという目に見える成長が自信につながり、勉強する楽しさになります。
このストレスを少なく、楽しくやるというのは物事を継続してやっていくためには重要であり、継続力は力につながります。
おわり
今までC言語や基本情報技術者試験の勉強法で少しだけ競技プログラミングを紹介してきましたが、競技プログラミングの良さを伝えきれていなかったため今回の記事を書きました。
正直まだこの記事ではまとめ切れていない気がしてなりませんが、とにかくプログラミングを勉強するのに競技プログラミングが役立つことは確かなのでぜひとも1度試していただきたいです。
AtCoderのBiginner Contestの問題が難しい場合はAizu Online Judgeの問題から始めてみてください!
↓AtCoderのリンク
https://atcoder.jp/
↓AOJのリンク
http://judge.u-aizu.ac.jp/onlinejudge/index.jsp?lang=ja
コメント