It's okay to be weird

レールの無い道を行くプログラマーのブログ

競技プログラミングに参加するためにC++の勉強を始めた

久々の投稿です。 表題の通り、競技プログラミングに参加するためにC++の勉強を始めました。

始めたきっかけは色々あるのですが、主な理由としてモバイルアプリ開発に行き詰まったことが挙げられます。

モバイルアプリ開発の難しさ

行き詰まった原因として、AndroidiOSアプリ開発を目標に勉強をしてきたのですが、それを活かすためのアプリのアイデアが自分の貧弱な想像力では湧かなかったというのがあります。
さらに、AndroidiOSとも、目まぐるしく開発環境や仕様などが変わっていくので(特にiOSSwiftの関係で顕著)、ある程度落ち着くのを待ってから取りかかった方がいいのではないかと思いました。

アルゴリズムとデータ構造は普遍的

その点、アルゴリズムとデータ構造を実践しながら学べる競技プログラミングは、課題というものが出題者から与えられる上、普遍的であり、プログラミング力を鍛えるにあたって地となり肉となってくれるものであると考え、勉強を始めようと思いました。

なぜC++

Javaが使えるならそれでいいんじゃないかという見方もあると思いますが、C++を新たに学ぼうと思った理由は、単純に新しい言語を触ってみたかったという欲求と、AtCoderの上位提出を見てみるとC++がほとんどを占めていること、今年出た『プログラミングコンテスト攻略のためのアルゴリズムとデータ構造』というAOJの問題を解きながらアルゴリズムとデータ構造を覚える本で使われているのがC/C++だったためです。
特にこの本は競技プログラミング攻略のバイブルとも言える『プログラミングコンテストチャレンジブック』への橋渡しをしてくれそうなので興味をそそられました。

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

予定している勉強の進め方

最初に取りかかっている書籍は『Accelerated C++』という本で、他の言語の経験がある人にとってC++を学ぶ一番の近道との評判だったので選びました。
ただこの本はけっこう古い本なので、これを読んだあとに『A Tour of C++』というC++11対応の、C++作者自身による短いクイックガイドを読んでから、『プログラミングコンテスト攻略のためのアルゴリズムとデータ構造』に進もうと思っています。

Accelerated C++: Practical Programming by Example (C++ In-Depth Series)

Accelerated C++: Practical Programming by Example (C++ In-Depth Series)

A Tour of C++ (C++ In-Depth Series)

A Tour of C++ (C++ In-Depth Series)