2024年11月27日
「競技プログラミング(以下、競プロ)は仕事に役立たない」――。プログラマとしてのスキルアップに、競プロは実用性がない。競プロ出身の人材は、企業で能力を発揮できない。このような言説が、たびたびSNS上などで噴出してきました。
日本最大級の競プロプラットフォーム「AtCoder」の代表であるちょくだい(高橋直大)さんは、国内に競プロを大きく広めてきた立場として、「役立たない」批判の矢面に常に立たされてきました。
「一時期は毎月のようにこの批判が噴出するので、『月刊・競技プログラミングは役立たない』と呼ばれるほどでした。近ごろではだいぶ、落ち着いてきましたが」とちょくだいさんは語ります。そもそもなぜ、競プロは批判され続けているのでしょうか? 競プロが人気を博するにつれ抱えるようになったジレンマとは何か、そして、エンジニアと企業は競プロをどう捉えるべきなのか。話を聞きました。
ちょくだい:人によって異なると思いますが、多くの場合、業務でプログラミングをやったことがある人とない人とでは、競プロに触れたときに感じる印象がまったく違うから、ではないかと考えています。
ちょくだい:競プロと、業務上のプログラミングには、「共通点」も「相違点」もあるからです。
まず、共通点として、プログラマとして働くうえでの基礎的なスキルを鍛えることができるといえます。例えば、プログラミングの基本概念、正確なコーディング力、論理的思考力など。これらは競プロでも、業務としてプログラミングに取り組む中でも、徐々に鍛えられていきます。
しかし一定レベルまで達すると、それぞれ違う力が求められるようになります。競プロでは、制限時間内での問題解決に特化した、計算量の改善や、高度なアルゴリズムの活用能力が必要になる。一方、業務では、可読性の高いコードを書くこと、メンバーとの協調やプロジェクト管理など、チーム開発に必要なスキルを求められるようになる。
競プロでプログラミングを始めた人がプログラマになった場合、「共通点」にあたる基礎スキルが業務にも生かせるため、「競プロが役に立った」と感じることが多いように思います。
一方、業務経験者が競プロに触れた場合、競プロで鍛えられる基礎スキルはすでに持っている状態で競プロを始めるため、競プロと業務の共通点には気づきません。むしろ、「相違点」ばかりが目につきます。「こんなマニアックな技術、業務では使わないぞ…」「業務と違って、保守性を気にする必要がないんだな」など。
この「相違点」をもって「競プロ出身者は仕事に必要のないスキルしか持っていない」と偏見を抱く人もいるのでしょう。
このギャップから、「競プロは役立たない」という批判が生まれるのです。
ちょくだい:はい。膨大なデータベースを扱うバックエンドエンジニアなど、普段の業務が競プロに近い人なら、そうしたギャップも感じにくいのでしょうけれど。
ちょくだい:そう思います。
そもそも、「ITエンジニア」同士でさえ、職種によって業務は大幅に変わる。フロントエンドエンジニアがデータベースエンジニアの仕事内容を見たら、やっていることがずいぶん自分とは異なると感じるはず。ところが、自分の業務との比較対象が「競プロ」になった途端、「その作業は仕事では役立たない」と批判的になる人が出てくるのですね。
なぜ競プロに限って、単なる「違い」が「批判」を集めてしまうのか? というのも競プロは、AtCoderがきっかけで国内に急速に広がったからこそ、偏った見方をされるようになってしまったからなのです。
ちょくだい:当初は単なる「楽しい趣味」だったところ、様々なユーザー層に認知が広がっていくにつれて、「エンジニアとして対外的に評価されるためのツール」という側面ばかりが過剰に注目を集めるようになりました。
AtCoderが生まれた2012年は、ユーザーの大半がコアな競プロer(競技プログラマ)。僕も含めて、みんなあくまで楽しい趣味として取り組んでいました。転機は、2016年7月。競プロの実力を可視化するレーティングシステムをコンテストに導入したら、競争性がウケたのか、ユーザー数の増加ペースが急上昇したんです。同時に、AtCoder上で大会を主催したり、競プロerを採用したりする企業もどんどん増えていきました。
すると、2016年以降には「競プロをやっていると就職に役立つ」というような風潮が、一部の就活生や若手エンジニアの間で漂うようになりました。その風潮に対して「競プロのせいで実務経験が軽視されている」「あんな役立たないもので評価されるのは不公平だ」といった批判の声が相次ぐようになっていったのです。批判のピークは、2018年ごろでしょうか。
ちょくだい:最大の原因は、AtCoderの目的への誤解です。
AtCoderは、競プロの楽しさをより多くのエンジニアに広めるために創業したので、現在まで一貫して、競技としての面白さを最優先に追求しています。もちろん、ビジネスモデルとして採用支援サービスも取り入れてきましたが、採用につなげることは副次的な目的に過ぎません。
しかし、競プロにあまり興味のない人が傍から見ると、どうしても競技の話より採用関連の盛り上がりばかりが目につくのです。そのうち、採用ビジネスが主目的だと誤解され、「競プロなんて業務に役立たないのに、AtCoderは採用ビジネスにばかり力を入れている」「企業に調子のいいことを言って、役立たない人材ばかり送り込んでいる」などと言われるようになりました。
また、AtCoderが採用に特化したサービスだと勘違いした企業が、「競プロはエンジニアの能力を完璧に測れるツールなんだな」と誤解し、AtCoderのレーティングを鵜呑みにした採用を行うケースもよくあります。その誤解は、最終的には、競プロへの怒りにつながります。実際、こうした企業の誤解によって生まれたエンジニア達の不満が「AtCoderの成績だけで採用された協調性のない人材が、自分のチームにきた」との形で噴出するのをしばしば見かける。
さらに、企業の採用担当者がエンジニア職への理解が浅く、安易に「今は競プロで実力を測ることが流行ってる」と考え、エンジニアの採用試験に、業務内容とかけ離れた競プロ風の「コーディングテスト」を課してしまうケースもあります。フロントエンドエンジニアの応募者に、高度なアルゴリズムの問題を出したりだとか。
募集要項に書かれた業務内容とは関係ないテストを受けさせられ、しかも不採用になった応募者は、強い不満を抱きます。そして、怒りの矛先はしばしば我々に向けられます。「業務で役立たないのに、競プロで仕事上の能力を評価される風潮はおかしい! こうなったのも、AtCoderが競プロなんかを流行らせたせいだ!」と。
ちょくだい:AtCoderが採用ビジネスに偏重しているとの批判には反論したいですね。多くのユーザーは、純粋に趣味として競プロを楽しんでいます。毎週土曜日21時に開催の「AtCoder Beginner Contest」を例に説明しましょう。これは初心者向けの部門で、学生や、プログラマとは違う仕事を本業にしている人たちが、毎回約5000名、参加します。
非プログラマの一般ユーザーが、わざわざ毎週、土曜夜というゴールデンタイムを2時間も割いて、数学の式のような難解なプログラムを書くんです。なかなかの狂気ではないでしょうか? 本当に就職だけを考えている人なら、こんな奇怪なことより、資格試験にでも時間を割くでしょう?
また、採用ツールとしての企業からの過大評価についても、我々としては企業が誤解をしないよう、透明性のある説明をしているつもりです。
例として、公式サイトでは、AtCoderのレーティングを通じて測れるユーザーの能力を明記しています。「正確なコーディング」は成績から期待できても、定量化の難しい「チーム開発」能力についてはユーザーの自己申告になりますよ、などと。企業から採用活用の問い合わせを受けるときも、レーティングはあくまでひとつの指標に過ぎないため、必要に応じて面接やテストで補完するよう伝えています。
ちょくだい:「競プロはあくまで趣味として楽しむものです」との発信は昔から続けています。でも「所詮はちょくだいのポジショントークだ」などと言われてしまう。
そんな扱いは心外なので、最近は「チーム開発においては、競プロで計測できない能力は多いから、AtCoderが就職や採用に必ずしも役立つわけではない」とも強く訴えています。すると、今度は競プロer側から「そんなこと言わないで、もっと競プロの地位を上げる発言をしてくれ」と、とがめられる始末です。
違うんですよ…。採用に競プロを用いるなら、闇雲に競プロを過大評価するのではなく、過小評価するのでもなく、最適なマッチングが行われるべきなんです。
ちょくだい:これは多少うがった見方かもしれませんが、おそらく、競プロerが企業から評価されるようになったことで、損をした人たちがいるからだろうと思っています。
採用人数が限られている以上、誰かが評価されるということは、相対的に誰かの評価が落ちる。すると、例えば、総合的な業務遂行能力がある人が選考を受けた際、たまたまその企業が競プロを重視していたせいで、業務能力は低くてもAtCoderの成績が良い競プロerと比較されて落とされた――。こうしたケースも発生していることでしょう。
こうして落とされた人の中には、一生競プロを恨み続ける人もいると思います。競プロ批判はピーク時に比べると落ち着きましたが、この人たちの恨みは完全には鎮火していないから、今もたびたびSNSや匿名ブログで燃え上がっているのかなと。
採用という「誰かが得し、誰かが損する世界」に影響を及ぼしている以上、我々がある程度恨まれるのは、仕方がないと考えています。
ただ、もっと多くの企業が、競プロの成績をひとつの指標として適切に扱い、他のスキルとのバランスを考慮した総合的な選考判断をすることができていたのなら、こうした思いをする人をもう少し減らすことができるのでは、とは思います。
ちょくだい:そのようにみています。
もしかすると、「競技プログラミング」という名称もよくないのかもしれません。プログラマは、業務上の課題を的確に解決し、より良いものを生み出すことのできる自身の技術に誇りを持つ人が少なくありません。その誇りを胸に、日々の仕事と真剣に向き合い、自分のスキルをさらに磨き続けています。
そこに「競技プログラミング」という「プログラミング」の名称を掲げるコンテストがあり、自分の普段の業務課題には何の有用性もないことが競われていて、成績上位者は他のエンジニアや企業から「すごいプログラミング力だ!」と拍手喝采を浴びる。「そんなの、業務に役立たないのに」と気分を悪くする人がいてもおかしくないとは思います。
でも、むしろ世の中って、「役立たない」と言われないことの方が珍しくないですか? 例えば、「基本情報技術者」の資格でさえ「役立たない」と言っている人はたくさんいますよね。
ちょくだい:もちろん「基本情報」は、コンピュータサイエンスの基礎からセキュリティまで体系的な知識をつける観点ではとても有用です。
僕は、情報系学部以外の出身者である競プロerには、「基本情報」や「応用情報」の取得を勧めています。競プロにはまりすぎるあまり、プログラミングやアルゴリズムにばかり特化し、それ以外のことを全然知らない人もいますから。
当然、資格試験で学べるすべての要素が100%業務に役立つわけじゃないけれど、それは競プロも同じ。一部でも役立つ要素があるなら、習得する意味があるはずです。
資格にしても、最近なら生成AIにしても、「役立たない」と切り捨てる人はいつも出てくる。しかし、一面的な捉え方で物事の本質を捉えることは困難です。役立つ、役立たないじゃない。正しくは、「あらゆるツールには、状況によって役立つ要素も、役立たない要素もある」ということですよね。
ちょくだい:はい。
最近だと、米国の機械学習コンテスト「Kaggle」の参加ユーザーが日本でも増えてきたみたいですが、ここでも、「Kaggleで身につくことは実務では役立たない」なんて批判も目立ってきているようです。挙句、「まーた『月刊Kaggleは役立たない』か…」と肩を落とすKaggleユーザーも見かけます。まるで、競プロがたどってきた道です。
僕としては「役立たない」と批判する人が出ようが、こういうコンテストがどんどん増えてくるといいなと感じています。競プロ、Kaggle、あるいはCTF(Capture The Flag)。様々なコンテストが大きく盛り上がったら、あらゆる領域において「楽しみながらスキルを伸ばせる場」ができることになるので、世界の情報技術者のスキルの底上げを目指すうえで理想の環境になると思うんです。
それに、本当に「役立つスキル」を伸ばすという観点なら、競プロerも、AtCoderだけじゃなくて他のコンテストもどんどんやった方がいいんでしょうね。特定の領域にばかり能力が偏らずに済みますから。
ちょくだい:本来は。
まあ競プロ、楽しすぎるから仕方ないんですけどね(笑)。
ちょくだい:そりゃそうですよ。競プロが楽しくなかったら、こんな会社つくりませんから。
でも、楽しいはずだからこそ、競プロを誤解している企業による、競プロ偏重の選考が横行し、不幸な目に遭う人が出てしまうのは悲しいことだと感じます。
最終的には、競プロが「楽しい趣味」であり、かつ「適切に評価されるスキル」として広く認知されることを目指しています。
企業には競プロの成績だけではなく、チーム開発スキルやヒューマンスキルなど、競プロでは計測できないスキルも含めてバランスよく選考をしてほしい。また、ユーザーには、「業務や採用に役立つ・立たない」という単純な二項対立を超えた、趣味としての競プロの本質的な楽しさにも目を向けてほしい。日本を代表する競プロ団体の責任として、今後もこうしたメッセージを発信し続けていきます。
取材・執筆:田村 今人
編集:光松 瞳
撮影:曽川 拓哉
関連記事
人気記事