tozangezan's diary

勝手にソースコードをコピペして利用しないでください。

競技プログラミング論争 一競技の人としての極論

論争よく見ますね。普段考えていることを書いておこう。こんなこと考えてる人他にほとんどいないと思うので、参考にしなくていいと思います。

論1.競技プログラミングなんか、コード断片しか書けるようなしかならないのに、そこに逃避する三流若者多数。今年の抱負は、バカ若者の競技プログラミング阻止、にしよう。
三流若者ってなんだかよく分からないけど、コード断片しか書かない人がコード断片しか書けるようにしかならないのは当然かもしれないし、別にその人はコード断片しか書かないんだから、問題ないのでは。断片じゃないコードを書かせたい人は阻止するのもいいと思う。ただ、真面目な人は他人のいうことをしっかり聞くので、あまり何でもかんでも規制するのは(人によっては)よくないと思います。ちなみにこの文章は係り受けが難しすぎて解釈できないいわゆる悪文。プログラミングコンテストに出たら間違いなく訴訟する。

論2.競技プログラミングの自分が一番推したいメリットとしては、「問題解決能力」があります。プログラミングは、システムを開発するだけの道具ではありません。問題を解決する能力を付けるには、実際にやってみないと始まりません。アルゴリズムと具体例を結びつけることは、多くの人が出来てません。
プログラミングは、システムを開発するだけの道具ではありません。
ただし、自分にとっては「プログラミングは、システムを開発する道具ではありません。」になる。

論3.ちなみに、プログラミング初学者についても、競技プログラミングは有効だと考えています。「特に作りたいものはないけど、プログラミングは学びたい」みたいな人は多いです。競技プログラミングだけではカバーできる範囲が広いとは言えませんが、とっつきやすい選択肢の1つとして有効だと思います。
forとifレベルのところまでは有効だと思うんだけど、そこからはあんまりそんな感じしないなあ。蟻本という存在があっても多くの人はあれ読み進められないらしいし、DPとか、覚えるだけじゃどうしようもない関門を越えないと進歩したかどうか分からないというのは悲しい気がする。

論4.競技プログラミング肯定派、否定派議論は前にも聞いた気がする。取り敢えず大学近辺の否定派の主な意見は、「プログラミングは速さじゃない」ということでした。
プログラミングの速さを競っているというより、思考速度を競っている感じはありますが、速さで決まるのが嫌いならIJPCでも出ればいいんじゃないでしょうか。

論5.ちょくだいさん自身は凄いと思いますし、競技プログラミング楽しそうですねとは思いますが、言ってることは「楽しいと感じる人にとっては楽しいし、やれば勉強になるかもしれないし、勉強になったとすると現実問題として役に立つ可能性が無いとはいえない」という内容で、普及に役立ってる感じがしない
存在を知って、とりあえず1回だけでもいいからやって欲しいと思ってるんじゃないかな。才能ある人まで参加しないのは残念だと思う。

論6.定期。競技プログラミングは生産性が無さすぎて嫌い。 自分で作りたいものが思い浮かばないで、与えられた課題を解くだけとか。小学生か。
黙って作問しろ 問題足りてないし。

論7.「競技プログラミングなんて役に立たない」と言うより「競技プログラミングはLisp並に有効だ」と言う方が競技プログラマdisるのに有効なので、積極的に使うと良いですよ
Lispって何ですか、オンラインジャッジで使えないのにプログラミング言語なんですか!? 面白すぎるwwwwwwww(実際は穴あきGolfでは使えた気がするし、多分CodeForcesでも使える気がする)

論8.競技プログラミングって、コンピュータによる計算っていうツールをどれだけ上手く使えるかって話だと思ってる。
というより、数オリ+アルゴリズム+データ構造+実装、みたいな気がする

論9.競技プログラミングは生産性が無いから嫌い。 まともなプログラマが参加するのがアホくさいような大会で世界何位だとか喜んでるのがバカらしい。
未だに競技プログラミングの大会がプログラミングの大会だと思っている人がいるらしい……

論10.競技プログラミングが問題解決能力身に付くとか、どんだけレベル低いんだよ。問題を見つける能力がないからそんなこと言えるんだ。
問題解決能力が身につくとは思いません。数こなしてパターンで覚えるとかしたら後は「競技プログラミング」という学問の能力みたいな感じがする。

論11.既存のアルゴリズムの適用なんてプログラマとして最低レベル。そこだけ磨いてどうする。
僕はプログラマーになる気はないし、プログラマーじゃない人は別に他のところ磨いても無価値だと思う。JOI OBとかを見ていても情報進んだ人は開発とかしている人余り見ないし、理論的なことをやってる感じの人多いからなあ。そういう人は新しいアルゴリズムを考案しようとがんばっていると思う。

論12.界隈の敷居を不用意に上げる発言ってその界隈に新規参入者が入りにくくなるだけで全然有益じゃないと思う (一般に)
これは参加者層からして改善できなさそうな気がする…

論13.競技プログラミングを紹介する立場なら、デメリットもきっちり紹介してほしい。生産性0.ランキングにたいした価値なし。就職に役に立たない。社会に貢献してない。通常の開発に必要なスキルのうち一部しか身につかない程度はちゃんと紹介してほしい。
生産性がないこと:趣味でやってると思えない人はやるな
ランキングに価値のないこと:ゲームなんだから普通は価値はないはずで、そこに賞金がついているだけいいと思うべき
就職に役に立たない:これはどうなんでしょうね。ICPCのOBたちがどんどんGoogle社に入っているという話を聞いたのですが、実際どうなのかは分かりません。情報やらない人は当然社会に役に立たない。
社会に貢献してない:普通のゲームが社会に貢献していないのに、このゲームはたまにNASAとかでアルゴリズムが使われることがあるんですよ。これはすごいゲームだと思います。
ゲームやって開発できるようになるわけないでしょう。

論14.競技プログラミングは、筋トレとかランニングみたいなもので、プログラミングに対する「基礎体力」づくりには役立つと思う。
アルゴリズムの断片(Dijkstraとか、Segtreeとか、Aho-Corasickとか、Dinicとか)を覚えるのには適してそう。ちなみにDinicとか他で使われることあるのだろうか。

論15.与えられた問題を既存のアルゴリズムを適用できる形に落とし込むというのが重要なのでは。
すこし変わったものになると(fizzbuzzとか)何も書けないプログラマというのがいるらしいですね。それでも開発はできるらしく、ずいぶんと世界の隔たりを感じる。

論16.昨日の議論、競技プログラミングをやる理由なんて「気に入ったからでスポーツ感覚っす」は、やっている人にとってはそれでいいと思うのだけれど、やってない人に「宣伝文句として」言うにはだめだ、と思っている。なんか宣伝文句と各々にとっての理由がごっちゃに議論されていた気がしなくもない。
ちなみに僕が部活の後輩に宣伝するときは「無料で予選に参加できて本選以降は無料で宿泊できて、上位3人に入るとパソコンがもらえるよ!」でしたが、最近宣伝しなくても後輩が始めてくれるようになっていてやばすぎる。

論17.それは順位の低い人の発言に説得力が無い,につながりそうでやばい気がするが
そりゃあそうでしょ、なるべく多くの人の意見を聞きたいとかなら別だけど。僕のレートでも説得力は無いと思いますよ。

論18.競技プログラミング勧めてる人たちは、「誰に向かって」勧めてるのかという前提をはっきりしといた方がいいんじゃないでしょうか。「そもそもあなたたちみたいなレベルの低いコーダーはout of 眼中です」でも何でもいいんですけど
僕は数オリの人たちに勧めたいですね。開発系プログラマーの人には不向きだと思う。

論19.競技プログラミング、なんてあたかもプログラミングのサブセットみたいな名前をつけるから嫌。情オリみたいに"プログラミング"を冠から外せ
僕もそう思います。ただ、適切な名前をつけるのが難しい。ソースコードを書くことをなんと表現すればいいのか分からないからなあ。「計算機数学」とか?

論20.そうも思ったんですが,競技系の人って総じてプログラミングが好きなわけではないのではないでしょうか.問題をとくのが好きなだけで,もしプログラミング以外の手段で問題を解く大会があって,それが面白ければ多くの人はそっちにシフトすると思います.なので,彼らにとってプログラミングは本質ではないと思うし,(上位さん達が)競ってる部分は明らかに"プログラミング能力"でないと思っています.だから「競技プログラミング」という言葉が適切でないと思います.
確かに、競技の人たちではたとえば共円判定問題集とか、Herbert Online Judgeとか、プログラミングとぜんぜん関係ないものまでやっている人結構多くて(これらは数学まわりの人が多い?らしく自分にはHOJはついていけない)、単純にパズルが好きでパズル的に解ける競技の問題が好きな気がする(たまに、実装が好きでやっているという人もいるかもしれませんが)。ランクとかレートとかつながりだと音ゲーやってる人もそこそこ(そこまで多くない、お金かかるからしょうがないけど)いるね。

論21.「プログラミング自体」に主眼があるわけではないのは同意しますが、(1)彼らが解いている問題はプログラムならびにコンピューターとは切っても切れない関係にありますし、(2)また、プログラムに落としこむことも含めて競技とみなしていると思います。実際、例えばバグを無くす必要性という点では、それ以外のプログラミングと共通しています。ですから、僕の感覚としては、競技という断りを入れた上でプログラミングと名乗るには十分なほど、プログラミングという要素と密接に関係していると思います。
ちなみに、僕はあまりにバグを量産して大変なことになるので、紙に方針(使うデータ構造とか計算量)を書いて筆記試験にしてくれたら嬉しいし順位上がりそうな気がするけど、そうすると数学オリンピック情報オリンピック数学オリンピック甲と数学オリンピック乙になる気がする。

論22.なるほど、まず競技プログラミングやるとコードが汚くなるという偏見があるのか…。
個人的には、他のコードのほうが縦に長くて同じようなことばかり書いてあって汚いと思うし、絶対にあれは読み書きしたくない(のに書いてしまう不思議 実装力が無さ過ぎるんですよね)。単純に多重ループに対する耐性がないだけでは? そういえば、競技じゃない人って変数名に2文字以上のを使うんだっけ。忘れていた。

論23.プログラミングコンテストの意義,スポーツと同じ感じという認識でいいんでは.
当然だと思う。変な目的(なんたらかんたらの向上、とか)でやってる人は長続きしないんじゃないかな。

論24.逃避って言えるほどプロコンやりこんでる奴がこの日本に何人いるというのか。1000時間もプロコンに費やしてないやつとかライト層すぎるレベル
たしかにすごくたくさんいそう。累計1000ACoverの高校生がたくさんいるくらいだし。

論25.競技プログラミングって強い劣等感耐性があるかアルゴリズムのエキスパートじゃないと続けるの難しい
強い劣等感耐性がある人が続けてアルゴリズムのエキスパートになります。層でない人は淘汰されます。

論26.格ゲーと競技プログラミング似てる
音ゲーと競技プログラミング似てる。クリアした曲は「簡単」。解けた問題は「やるだけ」。

論27.あとなんだろう。会社ができた。よかった!
すげー

論99.kyuridenamida:僕のようなアイコンにしている人がみんなから信用される良いプログラマだと思う。
君のようなアイコンにしている人が山形県からパクリだと思われる悪い緑三角だと思う。

まとめ:
競技プログラミングはゲームである。1つのゲームとして見てみれば、大概の批判はないことになる。(そのうち競技プログラマーは民度が低いとか言われるとまた別の話になる)

ところで、Vim批判の話をりんごさんにやってもらいたいのですが…