2021の1日目の記事になります。Supership株式会社のVPoEです。下記のようなイベントで話したりもしています。助太刀AtCoderの色は緑です。後述しますが、上位30%以内となります。優秀なわけでも詳しいわけでもありません。ローカル環境はPythonですが、提出するときはPyPy3にしています。趣味としてはツイステッドワンダーランドに毎日ログインしています。10月開催のNRC第5回統一試験の結果はSSでした。昨年マネージャーになってから自分自身のためにやったことまとめという記事で以下の通り書きました。採用活動をしていて思うのは、最近、競技プログラミングの実績を出される応募者の方が多いなと。「AtCoderで何色です」みたいな。検索すれば何色は上位何%なのかはわかりますし、過去問もあるわけなのですが、そのスキルレベルがなかなか具体的に思い描けずにいました。これは自分でやってみるしかないなと思い、つい先日、AtCoderに登録して始めてみました。言語はPython(3.8.2)です。業務経験がない言語を選んでみました。あれからちょうど一年経ちましたので、感想などをまとめてみました。そもそもAtCoderってなに?公式サイトのトップページに下記の通り書かれています。AtCoderは、オンラインで参加できるプログラミングコンテスト(競技プログラミング)のサイトです。リアルタイムのコンテストで競い合ったり、約3000問のコンテストの過去問にいつでも挑戦することが出来ます。それぞれ開始日時も制限時間も決められています。コンテストでは複数の問題が出され、問題毎に点数が決められています。解けた問題の点数の合計値並びにその回答時間、ミス数を元に順位が決まり、パフォーマンスという値が算出されます。パフォーマンスはそのコンテスト単体での結果を数値化したものです。レーティングという値もあり、こちらは安定して出せる結果を示す数値となります。一回参加しただけでは実力通りのレーティングにはなりません。パフォーマンス1000をとり続けるといずれレーティングが1000になるといった感じです。コンテストに参加しないとレーティングを上げていけません。ユーザーはレーティングに基づいて色分けがされます。色毎のスキルレベルなどはAtCoderの社長である高橋様のブログ記事でも言及されています。1回でも参加この%値は実際の参加者のレーティング分布とイコールではないのでご注意ください。System(英語)として公開されていますので興味がある方はどうぞ。対応している言語やバージョンなどはルールをご覧ください。全世界での登録者数が30万人を突破!かなりの勢いで増えていますね。Channelで交流もしていて、利用者数の増加を感じます。楽しいし気持ちいいはい、ここからが本題です。AtCoderをやってみての感想です。AtCoderでは問題に対してコードを提出します。問題というのは、たとえばABC220のA問題ですとA以上B以下であるようなCの倍数を、1つ出力してください。条件を満たす数が存在しない場合は-1を出力してください。いうものです(実際には制約条件や入力例などがあります)。この問題に対してコードを書いて提出します。print(-1)そして、あらかじめ用意されたテストケースが複数あり、そのテストケース毎に判定が自動で行われ結果が出ます。全テストケースについてACの場合のみ、その問題に対してACとなるのですが、このACになった瞬間が本当に最高に快感なんですよね。コンテスト中、悩みながら書いたコードが一発でACになったときは、声上げそうになります(多分、上げてる)。解けないとしても、その解説を見て「なるほど、こうやれば解けるのかー」と感動するのも楽しいです。人間は情報を栄養として食い繋ぐ生き物だと実感する日々。私がAtCoderを続けた一番の理由は、正直、この楽しさでした。業務でコードを書く機会がかなり減ったため、こういったサービスの存在は本当にありがたく思っています。コードを書くのって楽しい。プログラミングに対して継続力のある人たちの集まりAtCoderのコンテストの多くは土曜か日曜の夜9時から開催されていて、時間は100分です。結果を出すためには、何回も何十回も土曜や日曜の夜を約2時間、AtCoderに費やす必要があるわけです。本人はただ楽しいから取り組んでいるだけかもしれないですし、苦労しているかどうかはともかくとして、AtCoderで結果を出している人というのはプログラミングに対しての継続力がある人と言えるとは思います。AtCoderで結果を出していない人がプログラミングに対して継続力がないと言うつもりはないです。土曜や日曜の夜を頻繁に空けることが難しい人というのは、たくさんいるでしょうから。空けられる方が珍しいかもしれないですね。仮に空けられたとしても、集中できる状況でないと厳しいですし。数学から離れて久しいとちょい辛い少なくとも私は緑になるために(パフォーマンス800以上をコンスタントに出せるために)高度な数学の知識が必須とは思いませんでした。問題や解説にΣやlogが普通に登場するので高校までの数学は前提なのでしょうが、深い理解までは求められなかった印象です。難しい数学知識が求められてはいないものの、解くのになかなか苦戦します。私は大学を卒業してからすでに20年以上経っています。社会人になってから数学をまったく使わずにきたわけではないものの、日常的に触れるわけでもない日々でした。順列などなど、学生時代と比べると記憶から引っ張り出すのに時間がかかるのです。AtCoderはスピード勝負の世界です。回答時間が順位決定に大きな影響を及ぼします。このブランクを取り戻すのはなかなか厳しいなと思うことが多かったです。「それはブランクのせいじゃなくて年齢のせいじゃないの?」と自問したくなるときもありますが、しない。環境が大事コードの提出はAtCoderのサイトで行うので、極論としては手元にコードを動かす環境がなくてもやれはするのでしょうが、サイトの入力フォームに文法チェック機能がついているわけではないですし、間違えるとペナルティが課されますし、手元での環境構築は必須と言っていいかと思います。コンテストに参加する場合は時間との戦いなので、環境依存はかなり大きいと感じます。要はできる限りスピーディーにコードを書ける環境をいかに用意できるかですね。これもルールに書かれているのですが自作ライブラリの使用インターネットでの検索は許可されています。具体的な環境については言語諸々に依存しますし、いくらでもインターネット上に情報があるので、ここでは言及しません。想像していたレベル感とずれていたAtCoderを始めたとき、緑まではやろうと思っていました。理由としては前述した高橋社長のブログ記事で「緑あれば大抵の企業でアルゴリズム力は十分。AtCoder的には決して上位ではないが、他社評価サイトなら最高評価。」と書かれていたので、一つの目安かなと(ざっくりイメージなので、できれば高橋社長のブログをお読みください)。緑色は上位30%です。全体の1/3よりちょい上。実際コンテストに参加してみると、自分自身を買い被っていただけかしれないですが、想像していたより到達のための努力が必要でした。冷静に考えてみるとAtCoderのコンテストに参加しようという程度にはプログラミングの経験がある。前述のとおり、継続も誰でもできるわけではない。土日の夜をプログラミングに費やしている。いう母集団であるわけなのですよね。それを考えると、そもそもの私の想像が間違っていたのだなと。プライベートな時間をわざわざプログラミングコンテストに捧げている人たちの中での順位付けですから。経験値が結果に直結する努力が結果に直結すると思いました。面白いですし、だからこそ結果が簡単には出ない。高Ratingな人たちはかなりの努力をした人たちだと本当に思います。競プロのための身だしなみ昔よりもこまめに爪を切るようになりました。スピードを競っている状況だと、キーボードを打つときに爪が気になるため。いう人に薦めたいサービス?たとえば「どういう人にリングフィットアドベンチャーを薦めたいですか?」と聞かれたなら「運動不足な人」とか「筋肉をつけたい人」とか「新垣結衣さんを好きな人」とか、まあ、答えはいくつか思い浮かぶわけなんですが、リングフィットアドベンチャーは万人における運動不足解消の最善策でも筋肉をつけるための最善策でも新垣結衣さんを応援するための最善策でもないですよね。「どういう人にAtCoderを薦めたいですか?」と聞かれたなら、リングフィットアドベンチャーと同じで、明確な答えが思い浮かばないんですよね。「薦められてやるもの」というよりは「やりたいからやるもの」というイメージです。唐突にリングフィットアドベンチャーの話を持ち出したかと言うと、AtCoderと同じく、ここしばらくやり続けてきたゲームだからです。