逃げるAC、追うのは誰か

投稿者: 小澤 稔浩

プログラミングコンテストがそろそろあるとかないとか。去年の新人ブログでは競技プログラミングをしている人もいたのですが、今年はまだ見かけていないので書いてみます。

今回の記事は、プログラミングの学習の難しさを知った上で、競技プログラミングを活かしてみるといった内容です。今回のブログは真面目だとかそうでもないとか。

プログラミングの学習は行き詰まりやすい?

プログラミングの上達には何か物を作るといいという話をよく聞きます。これは最近自分でも感じていることなので賛成ですが、物を作るためには2つの方向があると考えています。

① そもそも学習を始める前の一番最初の段階で作りたいものを決めておき、それに向かって必要な知識をつけていく
➁ 物の作り方が想像できるようになるまでプログラムの知識を蓄えていって、これなら作れると作れる物を見つけられるようにしていく

前者はものに対する興味から、後者はプログラミングに対する興味からというアプローチの違いです。例えば、情報系の企業で働いてみたいからプログラミングをできるようになりたい。というモチベーションなら後者になるのではないでしょうか。

前者の場合は具体性の強い知識を広げていくことが明確なので取り組みやすいでしょう。しかしながら、 後者の場合は独習だと迷子になる可能性があるように思っています。 プログラミングのテキストを読んで基礎的な構文を覚えた先で「基礎構文は分かったつもりだけど、何を作れるようになったか分からない。何を作れるのか分からないのに、次は何に触れればいいのだろうか?」という状況に陥る可能性はそう低くないはずだからです。物を作るというのは難易度が曖昧だからこそ、遠すぎて手出しができないというものです。

当社の研修では実際の製品を触る流れになるためこの問題は自然と解決されていますが、独習だと行き詰まりの壁になり兼ねません。
そこで、解決法の一つとして競技プログラミングを紹介したいと思います。何が作りたいか、何を作れるか分からない人にとって、問題を与えてもらえるため手を動かすきっかけに適しています。

競技プログラミングは難しそう

最初に大切な心構えですが、名前の威圧感は一回忘れましょう。「競技」というのは難易度が高いことを示す言葉ではなく、制限時間などのルールを付け加えて、結果に対して平等な評価を行えるようにしたものを示す言葉です。休み時間に遊ぶドッジボールも、制限時間10分で相手より多くの人数が残っていれば勝ちというルールを作ったら立派な競技として成り立つとか。

さて、競技プログラミングはどこでできるかというと、一般にはAtCoderというサイトで行うことになると思われます。ちなみに、私たちのようなSI社員であれば自社製品のTOPSICでも行えます。プログラミングコンテストと呼ばれているイベントの中身は、TOPSICで行う競技プログラミングです。余談ですが、当社の製品であるTOPSICはAtCoder株式会社と業務連携を行っています(たまにAtCoder株式会社の有名な社長さんがTOPSIC関連のツイートをしてくれています)。気になった方はTOPSICについても調べてみると面白いかもしれません。過去の新人ブログを読んでいるとTOPSICの開発をしたくて入社した人もいるとかいないとか。

AtCoderというサイトでは、初心者向けの競技が土曜日の21時に開始されることが多いです。時間が空いていればとりあえず参加してみることをおすすめしますが、過去の問題も数多く公開されているので好きな時間に取り組むこともできます。

制限時間は100分間で、6~8個程度ある問題にそれぞれ得点が振られており、正解すると得点になる形式です。問題は進むにつれて難しくなり、昨年私が事前学習無しで参加したところ3問目(c問題)が解けませんでした。c問題から難易度が急に上がるとか、いきなり難しくなってしまってどうしたのとか、情報系の学部でよく分からないまま受けていたアルゴリズムの講義はこういうところに活きると今更知ったとか。

というわけで、まずは1問目(a問題)を解けるようになってみるくらいの気持ちで参加しているのがいいと思います。a問題はif文やfor文を使えれば十分正解できる難易度なので、テキストで身につけた基礎知識を確認するには最適な難易度です。もし、余裕がありそうであればb問題も解いてみるといいかもしれません。b問題は技術的にはa問題と同等か少しだけ難しい程度で、問題が複雑になったことで頭の整理や読解力が問われている印象があります。

去年に行われたABC205という回がc問題まで取っ付き易い印象があるので、とりあえず問題だけ見てみたいという人は「AtCoder ABC 205」で検索してみましょう。(せっかくなら解いてみましょう?)

遅くなりましたが、新年あけましておめでとうございます。新年度が明けたらそれもあけましておめでとうございますなんですかね?そうでもないんですかね。噂によると、今年度もあと少し、らしいです。