【競技プログラミング】フロントエンドエンジニアだけど競プロやっていてよかったなという話

※この記事の内容はあくまで個人の見解であり、所属する組織の公式の見解ではございません。

こちらは[POLアドベントカレンダー](https://qiita.com/advent-calendar/2021/pol)15日目の記事になります。
前日の記事は[こちら](https://note.com/sakamoto_k/n/n12a8ba0f8b4b)

## はじめに

こんにちは、株式会社POLの上久保です。

私は競技プログラミングを2020年の2月頃から1年間くらい取り組んでいたのですが、自分にはその経験がエンジニアとしての成長につながったなと感じることが多くありました。この記事ではそんな話を自分の体験談を交えつつ書いていこうと思います。技術的な内容を期待していた方々には申し訳ないです。

特に以下のような人たちに読んでもらえると参考になるのではないかと思います。
- 就職活動で競技プログラミングをアピールしたいと考えている学生・若手エンジニアの方
- 競技プログラミング楽しいけど、自身のキャリアとってに役に立つか不安に思っている方

## 自己紹介
主にReact/TypeScriptでWebアプリケーションを開発しているエンジニアです。社会人3年目です。
競技プログラミングは[AtCoder](https://atcoder.jp/)をやっています。元々は2020年の正月に何か一つ継続して頑張ることを見つけたいと思い、ご時世的に在宅で何か熱中出来るものがないかと思って始めたのがきっかけです。

レートはhighest1568（水色）です。水色になった時に色変記事（競プロ界隈にはレートが1色上がるごとに記事を書く慣習があったりします）を書こうかと思ったのですが、ネットや書籍にまとめられた優れた教材を取り組んだだけで特別な勉強をしたわけではないので、記事を上げても自己満足にとどまってしまうと思い書きませんでした。

以下がAtCoderのマイページから見れる成績表です。
<img width=600 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2229438/b420c143-5704-b65a-bba3-df3f4ce95ef8.png">

また、コンテストの過去問の復習も取り組んでいて、合計で1300問ほど解きました。
<img width=600 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2229438/1443402e-45df-45cd-3396-c350c2481801.png">

2021年の3月を最後にコンテストからは遠ざかってしまいましたが、何かに集中して取り組んで（仕事終わりに1日2~3時間はやっていました）1年間も続いたことは人生であまりなかったため自分にとっては幸せな体験だったと感じています。

## 競プロをやっていてよかったこと
実は現職には最近転職したばかりなのですが、その準備段階として自分のエンジニアとしてのキャリアパスや興味を自己分析していると、競技プログラミングがかなり影響を与えていることに気がつきました。そこで具体的に競プロをやっていてよかったなと感じたことをいくつか取り上げてみました。

### 業務外の経歴としてアピールできた
転職活動でのアピールのために競技プログラミングをする人はここ1年くらいで増えたなという印象です。Twitterでバズった漫画「[100日後に転職する47歳](https://twitter.com/i/events/1418432177168031749)」の中でもクイックソートやAtCoderが取り上げられるなど、企業側の認知度も高まりつつあると思います。

ただ、自分も転職活動をしてみて気づいたのですが、競技プログラミングの話を転職活動でする場合に、就活生がアピールすべきと考えている点と企業側が気にしている点にはズレがあるなと感じました。例えばレートやコンテストの成績は勿論すごい実績ですが、それがどれくらいすごいものなのかを全ての企業の方が理解しているわけではないということです。一方で勉強のために解いた問題数やStreak数（何日連続で問題を解いたか）といった指標の方が、誰でも理解できる適切なアピールポイントになると思います。アルゴリズムにおいて高い専門性が問われる仕事を除き、競プロにおける到達難易度とアピールの度合いはそこまで相関しないなと感じました。

実際エンジニアの面接ではその人の問題解決能力を図りたい場合が多く、そういった際に以下のように競プロを題材に語れると強いのかなと思いました。
> 例：コンテストで成績が振るわなかったことが悔しくて分析した結果、〇〇という課題があるとわかったので対策方法として××を実践し、結果レートがありました。

面接対策の文脈ではよく言われることですが、「課題に対して対応を考え乗り越えた経験」は業務にも応用が効くので受けが良いと思います。

### 純粋にエンジニアのスキルアップになった
上記の文脈だと、「競プロでレートを上げることは転職には意味がない」と捉えられてしまうかもしれませんが、私はそうは思いません。
確かに競プロで出てくるUnion FindやSegment Treeといったレートを上げるために必要な高度なアルゴリズムは業務では登場しませんが、そういった知らない概念に出会った際になんとか理解して自分のものにしようとする一連の行動は業務でも必ず必要になってきます。知らないアルゴリズムを理解しようと情報をググったり、他人の書いたコードが何をしているものなのか読み解いたり、逆にブラックボックス化しても良いコードをスニペットを書いてモジュール化したりなど、こういった工夫は開発業務においても必ず役に立つと思います。

### 興味のきっかけとなり、エンジニアとしてのキャリアパスを考えるきっかけになった
競プロをやっていてアルゴリズムに興味が出た結果、アルゴリズムを考える仕事をすることになりました！というのが一般的に競プロを活用した就職活動の成功例のイメージではないでしょうか。勿論素晴らしいと思います。しかしアルゴリズムではない別のことに興味が出てたとしてもそれは全然悪いことではないと思います。

私の場合ですと、競プロでコードのスニペットを用意するのが好きで、知らないアルゴリズムに出会った時には自分が使いやすいスニペットを考えるのが楽しかったです。そうしていくうちに、「なるべくコードを使い回して楽にプログラムを実装するにはどうしたらいいだろうとか」「機能を追加したりするときはどう用意するのが楽なんだろう」ということに興味を持ち、最終的に「世の中のシステムのアーキテクチャはどうなっているんだろう」「なぜその構成になっているのか」といったような保守性に長けた構造とは何だろうみたいな部分に興味が発展していきました。
このように学生の方や私のような若手のエンジニアにとっては、競プロはアルゴリズムだけではなくその他のことに対する興味の入り口にもなり得るんだなと感じました。

### エンジニア交流のきっかけになった
業務に関わりがなくとも競技プログラミングに興味を持っているエンジニアの方はいらっしゃって、そういった方々と話すきっかけにもなりました。
現職では有志数名でアルゴリズム勉強会を毎週開催しているのですが、基本在宅勤務の中でこういった業務外の内容の自由なコミュニケーションが取れる機会は貴重なため積極的に取り組むべきだなと日頃感じております。

弊社エンジニアによるアルゴリズム勉強会の取り組みに関して、詳しく知りたいという方は[こちらの記事](https://note.com/show_kanamaru/n/na2083cc346e0?magazine_key=ma74382b91025)を参照してみてください。

## 終わりに
エンジニア未経験者、初心者にとっては競技プログラミングのアルゴリズム以外の要素からも学ぶことはたくさんあり、自身のエンジニアのキャリアに良い影響を与える可能性は大いにあると思います。最初から転職のためにやる文脈だけではなく、少しでも自分の興味に繋がることを見つけられたらいいな位のスタンスで取り組んでみるのも良いですよ、ということを伝えたかったです！
あと個人的には競プロを始めた結果こんなことが変わりましたというみなさんのお話をぜひ聞いてみたいです！
ここまで見ていただきありがとうございました。文字ばかりで恐縮ですが一人でも誰かの参考になればとても嬉しいです。

次回のアドベントカレンダーは社内のアルゴリズム勉強会にも参加いただいている[@w40141](https://qiita.com/w40141)さんです！よろしくお願いします。