これは Monoxer Advent Calendar 2023 17日目の記事です。
モノグサでソフトウェアエンジニアとして働いているkitanoです。会社ではMonoxerのバックエンドとインフラに主に関わっています。アドベントカレンダーの記事として私と競技プログラミングの付き合いを振り返り、引退後も競技プログラミングに助けられていることについて書きます。
この記事の主張は個人の見解であり、所属組織を代表するものではありません。
競技プログラミング歴
競技プログラミングを始めたのはAOJ (Aizu Online Judge)への初サブミットを基準にすると2012年、大学1年の秋です。
当時私は大学の理系学部に所属していました。C言語とアルゴリズムの講義はありましたが本格的な情報系の学部ではありませんでした。
パソコンの大先生だった私は、卒業したらパソコンに関係の仕事をしたいな~という漠然とした動機でソフトウェア技術に関する勉強(?)を自主的に始めました。その一環として始めたのが競技プログラミングです。その後順調にハマり、大学院生の頃に飽きるまで5000時間以上精進したと思います*1。間欠期はありましたが、やっているときは寝食を忘れてやっていました。
頭がいい方ではありませんでしたが、それだけ熱中したのでTopCoderとAtCoderで当時の黄色(上位一桁%)にはなれました*2。
暖色が長年の目標だったのでそれで満足したこと、またそれ以上伸ばす自信が無かったことから競技プログラミングに本気で取り組むのはその時で終わりました。
就活
自分にコンピュータサイエンスの適性が高い、というより興味が強いことが分かっていたので、修士はCS系に進学しました。
CS系修士は一年生の冬から徐々に就職活動が始まります。当時の就活環境は、競技プログラミングというコミュニティに数学とプログラミングが得意な学生がたくさん溜まっていることに、多くの企業が気づき始めた頃でした。昔からGoogleやKLabのようなアーリーアダプタ企業が競技プログラミングのコンテスト (Google Code Jam、天下一プログラマーコンテスト)を開いていましたが、もっといろんな会社が注目してコンテストを開きだしました。
私はそんな時代の流れに乗ってAtCoderでコンテストを開いている企業とICPCのスポンサー企業を順番に受けました。競技プログラミング始めたときはここまで市民権を得て就活に役立つほどになるとは夢にも思っていませんでしたが、アピールに使えるなら使わない手はありません。
結果としてはそのうちの一つに無事就職することができました。ほとんど開発経験が無かったのによく採用してくれたものです。でも今少し採用に関わる立場になって思うのは、オンラインジャッジに向き合って累積何千時間もコードを書き続ける能力は、一種の才能(特殊性癖)です。なのでポテンシャル採用、つまり入社後に育てる前提の採用が中心の新卒採用市場では、その才能があれば開発もすぐできるようになるでしょうと、期待値高めに評価するのかもしれません*3。
入社後
入社後は競技プログラミングの仕事が与えられる訳がなく普通のソフトウェアエンジニアとしての経験を積みました。
新卒枠で滑り込んだのは良かったものの、配属直後は苦労しました。界隈で「競技プログラマは問題解決能力が高い」という言説をたまに見かけますが、目の前の大量の問題がググって分かることか分からないことか選別すらできなくてお手上げな状態でした。
例えば「××リソースのバルク取得API」って何だ?とか*4。
- 「××」はネットで調べても分からない社内用語
- 「リソース」は多義的だがここではREST APIの概念
- 「バルク」は「複数」程度の意味だが業界用語に近い
結局「××の情報をたくさん取ってくるAPI」程度でしかないのですが、なじみが薄い用語が混ざるとかなり意味が分からない。それらを普通にこなす非競技プログラマの同期も一緒に入ってくるので無力感がすごかったです。
もしソフトウェアエンジニアを狙って就活中の学生がこの記事を読んでくれていたら、そこは覚悟がいるということをお伝えしておきます。周りに追いつくために頑張る必要があります。
でも何年か経った頃には基本的なWeb開発の知識が身につき system-design-primer がすらすら読めるくらいにはなっていました。
たぶん、その間に何があったのかというのが重要だと思うのですが、無限に沸いてくる仕事を順番にこなしていく中で身につけていっただけな気がします。都度都度優しく教えてくれた周りの人のおかげです。本でいうとベーシック(not 簡単)な内容を手を動かしながら学ぶものが個人的には刺さりました。Real World HTTPとマスタリングTCP/IPが良かったです。
転職
社会人五年目の頃。東京のIT業界、特にWebサービス業界は転職で給料が上げるのが普通なので、何年かおきに転職する人が多いです*5。私も子供が生まれる*6という個人的な事情でお金が必要になったため、転職したいと考えていました。
そこで頼りにしたのが元競技プログラマの友人たちとAtCoderJobsです。私は上に書いたように学生時代に競技プログラミングにそこそこ真面目に取り組んでいたので、今も交友のある知人が何人かいます。彼らとは夜な夜なDiscordに集まってAmongUsをしていましたが、いつしか「人脈」として機能し、転職活動をする上で大きな助けになるものになっていました。どの会社がいい感じだとか、いい感じに見えるけど実は内情がやばいなどという情報はありがたいものです。
「人脈」という言葉は意識高すぎ、また人間関係を損得で捉えすぎな感じがして好きじゃないのですが、コミュニティで真面目に過ごしていれば勝手にできるものでもあるみたいです。
そのようにして情報を得つつ、最終的にはAtCoderJobsでスカウトをもらっていたモノグサに転職しました。
隠居後も競技プログラミングは役に立っている
「競技プログラミングは役に立つ」か否かというテーマで昔はTwitterのタイムラインが賑やかになることが度々ありました(今も?)。
技術的な部分は散々bikesheddingされているのでここでは触れないことにします。ちなみにモノグサは比較的役立つ会社だと思います。
しかし、それ抜きにしても競技プログラミングのコミュニティに参加してレートを上げることで享受できるメリットは間違いなくありました。その詳細は上に書いたとおりです。私以外にも似たような話は身近で目にするので、そう再現性は低くないと思います。
突然ですが私の出身地は中学受験という文化が無い田舎です。情オリも大学に入ってから知りました。そんな人間が、石を投げれば実家都会かつ有名大学卒な人に当たるようなソフトウェアエンジニアの世界に身を置けています。これは間違いなく競技プログラミング、そしてそのコミュニティのおかげだと思います。
AtCoderは競技プログラミングのコンテスト兼問題集サイトだと昔は思っていましたが、今になって思うとコミュニティ作りや社会への売り込みの面でも大きく貢献しています。AtCoderの役員が「日本から機会格差を無くしたい。能力のあるやつが平等に評価される社会にしたい。AtCoderはそのようなモチベーションで作った。」という趣旨の主張をTwitter(現X)でしていた記憶があります*7。競技プログラマとして新卒採用されAtCoderJobsで転職した私は、それが体現された事例に入ると思います。
おわりに
競技プログラミングにフルベットしたような学生時代でしたがなんとかなっています。失ったものも多いですが得たものも多いです。
最後にCMです。モノグサでは全人類にとって記憶を日常にすべく、記憶アプリMonoxerを作っています。
学生の方へ: インターンを募集してます。業務プログラミングに触れるチャンスです。ご応募お待ちしています。競技プログラマが得意そうなタスクも少しだけあります。
社会人の方へ: 中途も一緒に働いてくれる仲間を募集しています。現場はやりたいことが山積みです。手伝ってください。
最後まで読んでくれてありがとうございました。
*1:いちばん遊んだビデオゲームであるスプラトゥーン2のプレイ時間が約5000時間で、それより長い時間は費やしているという感覚が根拠です。
*2:一般にオンラインゲームのレートに対応する実際の能力は、時間の経過とプレイヤー人口の増加でインフレするものなので、今のAtCoder黄色の方がずっと基準が上だと思います。
*3:モノグサはベンチャーなのでまだポテンシャル採用できる企業体力は無いですが……。でもインターンは開発経験不要でご応募いただけます。
*4:適当に作った例です。
*5:ちゃんと給料が上がる会社に長くいる人ももちろんいます。
*6:生まれました。
*7:該当するツイートを探し当てられなかったので嘘の可能性があります。間違っていたら消します。