競プロ(AtCoder)とKaggle
作成日時: | 2020年5月9日 |
更新日時: | 2020年7月30日 |
競プロは昔に水色になってからちょっと足が遠のいている「やみとも」です。
AtCoderにはhiyokko2というハンドルネームで参加していました。
Kaggleの方は最近始めたのですが、競プロとは違う面白さがあって、どうやら僕はこっちの方が性に合っているのではないかと思うようになってきました。
ただKaggleの方はまだ何も結果を出せていません・・・(これから頑張ります!)
ただ、人によって向き不向きがあったりするよ!という話。
1番の理由は他人のコードが見れるからです!
現役プログラマの方は別ですが、プログラミング初心者の頃って正しいコード・お手本になるコードを探すのが大変じゃないですか?
OSSやブログなどで公開されているコードなどありますが、プログラミングに慣れてない頃に感じる「データをまとめたい」「まとめたデータを処理したい」「文字列をくっつけたい」「文字列を〇〇したい」など、今ではググりかたが分かると思いますが、初めてだとググり方すら分からなかったりします。
そんな時は競プロ(AtCoder)がおすすめです。
特にAtCoderのAtCoder Beginner Contest(通称ABC)の最初の3問くらい(最近はコンテストに参加できていないので正確には言えません)を重点的に解いて、他の人のプログラムを見るのがめちゃくちゃ効率の良い勉強になると思います。
なぜなら他の人も同じ問題を解いているので、自分とやりたいことが似ているので、それを実現するプログラムコードの書き方が分かったり、そもそもプログラム的にその問題をどう解けば良いのかがわかります。
プログラム的思考を鍛えるのにABCの序盤の問題は最高の問題集だと思います。
というのも、AtCoderは日本のサイトで問題も日本語だからです。
ついでに言うと解説PDF、YouTubeの解説放送も日本語。
プログラミングを学びたいのに英語の勉強も同時並行でやるとなると大変です。
ですが、デメリットみたいなこともあります。
AtCoderの後半の問題になると実務ではあまり使わないようなアルゴリズム・競プロ的テクニックがないと解けない問題が多くなります。
もちろんこれらの手法をマスターして競プロの問題をどんどん解いていき、コンテストでも上位に食い込めるようになると楽しいのですが、実務へのメリットは少なくなります。
プログラミングというより、数学で解かないといけない問題がAtCoderは多い気がして、僕は数学苦手なので段々撤退しました。
ただ、数学が得意、もしくはパズルが得意な人は楽しいかも。
あろう、というのはデータサイエンティストみたいなデータ分析をするような職に就きたい人にとってはほとんど無駄になるような知識はないだろうから。(データサイエンティストになったことがないので予想)
例えばPythonでデータを加工していくプログラムの書き方、データをビジュアライズ(グラフなどに)するプログラムの書き方、機械学習モデルの使い方、Kaggleのコンペで実際に学ぶこれらは多分、競プロのテクニックより実務で使われると思う。
言い忘れたが、Kaggleももちろん他の人のコードが見れる!
見れるだけではなく、他の人のコードはJupyter Notebookみたいな形式になっていて、コメントや図などがわかりやすく書いてあることが非常に多い。
というのも、そういうNotebookも、良い(分かりやすかったり、斬新な)Notebookを公開した人にはメダル獲得などのメリットがあるため。
競プロの他人が書いたコードにはコメントなどは期待できないが、Kaggleの場合はコードの説明が詳しく書いてあるのが良い点の一つ。
Kaggleは海外のサイトなので全部英語です。
先ほど言ったNotebookも英語です。
僕は英語そこまで得意じゃないのでブラウザの拡張機能で翻訳しながら読んだりしています。
競プロは数学がネックだったけど、Kaggleは英語がネック。
逆に言えばそこだけクリアできる人は競プロもしくはKaggleですぐに上位に食い込めると思う。
プログラミング中級者以上の人はどっちもやってみて向いた方をやると良いかも。
AtCoderにはhiyokko2というハンドルネームで参加していました。
Kaggleの方は最近始めたのですが、競プロとは違う面白さがあって、どうやら僕はこっちの方が性に合っているのではないかと思うようになってきました。
ただKaggleの方はまだ何も結果を出せていません・・・(これから頑張ります!)
この記事の主旨
プログラミングを学びたい・覚えたい人は競プロ(AtCoder)かKaggleをやると良い。ただ、人によって向き不向きがあったりするよ!という話。
プログラミングを学びたいなら競プロかKaggleをやるべき
1番の理由は他人のコードが見れるからです!
現役プログラマの方は別ですが、プログラミング初心者の頃って正しいコード・お手本になるコードを探すのが大変じゃないですか?
OSSやブログなどで公開されているコードなどありますが、プログラミングに慣れてない頃に感じる「データをまとめたい」「まとめたデータを処理したい」「文字列をくっつけたい」「文字列を〇〇したい」など、今ではググりかたが分かると思いますが、初めてだとググり方すら分からなかったりします。
そんな時は競プロ(AtCoder)がおすすめです。
特にAtCoderのAtCoder Beginner Contest(通称ABC)の最初の3問くらい(最近はコンテストに参加できていないので正確には言えません)を重点的に解いて、他の人のプログラムを見るのがめちゃくちゃ効率の良い勉強になると思います。
なぜなら他の人も同じ問題を解いているので、自分とやりたいことが似ているので、それを実現するプログラムコードの書き方が分かったり、そもそもプログラム的にその問題をどう解けば良いのかがわかります。
プログラム的思考を鍛えるのにABCの序盤の問題は最高の問題集だと思います。
競プロ(AtCoder)をやるべきかKaggleをやるべきか
プログラミング初心者の方はAtCoderのABCの序盤の問題を解くのが一番おすすめです。というのも、AtCoderは日本のサイトで問題も日本語だからです。
ついでに言うと解説PDF、YouTubeの解説放送も日本語。
プログラミングを学びたいのに英語の勉強も同時並行でやるとなると大変です。
競プロ(AtCoder)のデメリット
AtCoderはプログラミングに慣れてない方が勉強をし始めるのには最高の環境です。ですが、デメリットみたいなこともあります。
実務ではあまり使わないような難しいアルゴリズムなどを勉強する必要がある
ABCの序盤の問題(だけ)を解け、というのはこれに由来します。AtCoderの後半の問題になると実務ではあまり使わないようなアルゴリズム・競プロ的テクニックがないと解けない問題が多くなります。
もちろんこれらの手法をマスターして競プロの問題をどんどん解いていき、コンテストでも上位に食い込めるようになると楽しいのですが、実務へのメリットは少なくなります。
数学パズルが得意な人向け
2つ目の理由は(これが僕が遠のいた理由ですが)数学っぽい問題が多くなる点です。プログラミングというより、数学で解かないといけない問題がAtCoderは多い気がして、僕は数学苦手なので段々撤退しました。
ただ、数学が得意、もしくはパズルが得意な人は楽しいかも。
Kaggle
Kaggleのメリット
競プロとは違って学んでいくべきテクニックがほぼ全て役に立つであろう。あろう、というのはデータサイエンティストみたいなデータ分析をするような職に就きたい人にとってはほとんど無駄になるような知識はないだろうから。(データサイエンティストになったことがないので予想)
例えばPythonでデータを加工していくプログラムの書き方、データをビジュアライズ(グラフなどに)するプログラムの書き方、機械学習モデルの使い方、Kaggleのコンペで実際に学ぶこれらは多分、競プロのテクニックより実務で使われると思う。
言い忘れたが、Kaggleももちろん他の人のコードが見れる!
見れるだけではなく、他の人のコードはJupyter Notebookみたいな形式になっていて、コメントや図などがわかりやすく書いてあることが非常に多い。
というのも、そういうNotebookも、良い(分かりやすかったり、斬新な)Notebookを公開した人にはメダル獲得などのメリットがあるため。
競プロの他人が書いたコードにはコメントなどは期待できないが、Kaggleの場合はコードの説明が詳しく書いてあるのが良い点の一つ。
Kaggleのデメリット
全部英語。Kaggleは海外のサイトなので全部英語です。
先ほど言ったNotebookも英語です。
僕は英語そこまで得意じゃないのでブラウザの拡張機能で翻訳しながら読んだりしています。
競プロは数学がネックだったけど、Kaggleは英語がネック。
逆に言えばそこだけクリアできる人は競プロもしくはKaggleですぐに上位に食い込めると思う。
結論
プログラミング初心者はまずAtCoderのABCの序盤の問題でレベルアップ、競プロがハマったらそのままやれば良いし、実務的なことがやりたくなったらKaggleに転向しても良いかも。プログラミング中級者以上の人はどっちもやってみて向いた方をやると良いかも。