初心者こそ競プロをおすすめしたい
週に一回ぐらいなにかプログラムのアウトプットしたい、と考えてる最近です。
そこで今回はプログラミングブームに乗っかって、初心者向けの記事でも。特にこのブログはほとんど英語関係な気がするのでなにか参考になれば幸いです。
今回のテーマは「プログラミング最初の第一歩」です。
学ぶ言語を決める
プログラミングといっても様々な言語があります。どれを学ぶかはものすっごい重要。
とはいえ、何をやりたいかが決まっているなら言語選びは簡単。それに応じた言語にするだけです。
例
- iPhoneアプリ作りたい!
- Swiftしかない
- Androidアプリ作りたい!
- Java
- 将来的にKotlin(いきなりKotlinは周りにいないので不明)
- Webサイト作りたい!
- HTML/CSS/JavaScript
- 将来的にTypeScript他多数
- ゲーム作りたい!
- C# (※Unity)
- サーバ作りたい!
しかし、問題なのが特にやりたいことが決まってない人。 この場合はPythonがおすすめです。
Pythonのいいところとして
- 世界的に人気(日本でも)
- 人気だから解説記事が豊富
- ググればすぐ答えがでる。しかも日本語で
- シンプルなので簡単に学習できる
- もちろん深いところにいくとハマりありますが、それはどれも一緒です。
- 統計からディープラーニング、サーバまで用途が豊富
- モバイルアプリ以外ならだいたいできると思ってください
- (モバイルアプリもできなくはないですが敷居高い)
入門にはピッタリですね! デメリットとして、
- Python2 と Python3 で互換性がなく、記事をみるときに気をつける必要がある
- 今はもうPython3ですが、 ちょっと前の記事だとPYthon2は珍しくない
- ある程度規模以上になると作りづらい(個人の主観です)
というところでしょうか? 初心者視点だと前者がつらい。どの言語も「記事が古くて動かない」があるのですが、Python2は多い印象です。
教材をあつめる
言語が決まったら早速勉強にとりかかりましょう!まずは とりあえず書店にいって本を一冊買ってください。
書店にいき、フォントの大きさや文章の調子など自分の肌にあうものがいいです。初心者向けなら、インストールから画面キャプチャ付きで丁寧に解説されているものがハマりが少なくていいと思います。Amazonのレビューをみるのもいいと思います。この世界では、いわゆるサクラレビューは少ないと思います。
周囲に経験者がいるなら相談したほうがいいです。
個人的にリアル本推奨です。電子書籍はiPadなど大きい端末があるならOK。iPhoneでは満足に見れないと思ってください。
スクール等は不要。お金に余裕あるなら行けばいいと思いますが、費用対効果は悪すぎる。本1,2冊あれば十分です (現役プログラマはたぶん全員思ってる(笑))。オンライン講座ならまだアリ。特にインストール部分は動画のほうがわかりやすく、どうしても初期セットアップに詰まったら受けてみるのもアリです。Udemyならしょっちゅう1200円セールしてますし、セール狙いましょう。
とはいえ本はあったほうがいい。 動画では検索性が悪いんですよね。「ちょっとアレどうやるんだっけ?」という事態では本の索引を引くほうが100%早いです。
どの言語を選んでも、最初はおそらく簡単な文字列を出力したり、四則演算から始まるはずです。本によってはいくつか簡単な例題もあるでしょう。つまり全然おもしろくありません(笑)
そこでそのフェイズに入ったらおすすめなのが、競技プログラミング です。
競技プログラミング
「競技プログラミング」とは名のごとくプログラミングで競技するものです。「プロコン」とか呼ばれたりもします。
いくつか種類がありメジャーなものは以下でしょうか?
- 指定時間内に与えられた問題を解くパズル的なもの
- 解いた問題数と、解くまでの時間で競う
- メジャーなのは最大2時間程度
- 特定の課題にそった、一番性能のいいプログラムを開発するもの
- 例:画像の中から人を検出する。その精度と実行速度を競う
- こっちは期間が長い傾向。1週間から数ヶ月。短いと半日程度
- 特定のテーマに沿ったプログラムを作成して出来/独創性を競うもの
今回扱うのはこの中でも一番上のものです。
以下、競プロと略します。よくこう略して呼ばれます
説明するより具体例を見てもらうほうが早いと思うので簡単な問題例を。
3つの数字の中で、一番大きい値と一番小さい値の差を答えなさい
自分の頭で解いていいなら小学1年生の問題ですね。3つの数字が何なのかはわかりません。どんな入力でも正しい答えを出すプログラムを作るのが目的です。(厳密には入力にも制限があるのが普通ですが。入力は0〜1000の整数、など)
競プロの場合はここからが面白くて、作ったプログラムが正しいかWebサイトが判定してくれます。
プログラム完成後、まるごとサイトに提出するとサーバが自動的に正しいか判定します。およそ20パターンぐらい様々な数字パターンが与えられ、20個が正しい答えを出していればOK、一個でも間違っていたらNGです。
ただしどういう入力かはわかりません(※競プロのサイトによってはわかります)。自分のプログラムとにらめっこして、何がおかしかったのか必死に考えて修正。そして再度提出するのです。
これの何が初学者にいいかというと、その言語の基礎中の基礎を徹底的に叩き込まれること。高難易度問題は別ですが(※競技用の、実務とかけ離れた高度な数学的知識がいる)、低難易度問題はプログラムの基本さえ知ってれば解けて当たり前のような問題ばかり(経験者だと解けないとまずいレベル)。逆に言うと安定して解ければ基本は身についたといえます。
何より 手を動かすのが最も効率的な勉強法です。基本的に本は解説だけなので読むだけでは実力は身につきません。何度も何度もプログラムを書かないと身につかない。とはいえ初学者のころに単純なプログラム書いても面白くないんですよね。足し算と引き算するだけとか(笑)。問題を考えるのがそもそも面倒だし、考えても解く気になれません。
しかし競プロなら豊富な過去問があるので問題を考える必要もありません。正誤判定も機械がしてくれます。その上、「解けた!」という充実感 があります。意外とこれは馬鹿にならなくて、自分も新しい言語を習得するときは必ず競プロを使います。
さらに過去問なら「熟練者の解答」を見ることができ、これまた勉強になります(※ただしお手本になるコードは決して多くないので、初学者は参考にならないかも)
このような理由により、ある程度本が進んだら競プロ というのは非常におすすめです。(実際に競技はせず、過去問を使わせてもらうだけです。)
AtCoder
では競プロするぞ!となったとき、おそらく 国内で一番有名なのが AtCoder というサイトです。初歩から上級者まで豊富に問題があり、1〜2週間に一度のコンテスト開催されてます。
本番コンテストに参加すると「ランク」が変動します。ランクといっても順位ではないのでスコアという方が近いかも。このランクがある程度あると就活等でも(多少)有利に働きます。そのため最近の学生さんは競プロ頑張ってることが多いです。
とはいっても9段階あるうちの下から2番目で十分。一番下はさすがにアウト。基礎ができてれば下から2番目にはいけます。それより上は「競プロの知識」が必要になってきて実務とは別。自分の周りの「現役」もほとんどが下から2番目、競プロ大好きな人で4番目程度です。ただし現役なら2番目には一瞬で到達します。AtCoder社長さんの解説はちょっとレベル高い、と思います
もちろんコンテストに参加する必要はありません。過去問を好きなときに解くこともできるので、まずは過去問を使います。
そこで便利なのが AtCoder problems というサイト。過去の問題が難易度別にズラッと並んでおり、左上のID欄に自分のAtCoder-IDを入力すると回答済みが表示されます。
勉強したてはここからA問題を数十問ほど、その後本をすすめるに従ってB問題を数十問、さらになれてきたら数学的知識が要求されるC問題に進むのがいいと思います。
D,E,F問題は「競プロの」勉強をしないと厳しいので無視でいいと思います。
その後
これで基本が身についたら二冊目の本を買いましょう。このときは「作りたいプログラムにあった本」がおすすめ。サーバだったりアプリだったり。そういう成分が多い本に進むといいと思います。
おそらくこれ見た人のほとんどが「気の長いこと言ってる」と思われたんじゃないかと思います(笑)。お仕事しながらで、かつ本当に初めてなら基礎だけで数ヶ月モノでしょう。とはいえ数年かかる英語よりは格段に短いから大丈夫です!(笑)
それでもやってみたい!というならおすすめです。きっと就職だけでなく、普段の仕事もプログラムを活用することで効率的になるでしょう。新しい趣味になるかもしれません。ぜひトライしてみてください。
ちなみに英語、先月からやたら長い本にトライしてしまいました。あと数ヶ月はかかりそうです