freeeの開発情報ポータルサイト

競技プログラミング部ができました

こんにちは、2021年4月にfreeeに新卒で入社したberryです。 業務ではQAチームの一員としてプロダクトの品質向上のために働いております。

本記事では、2022年1月にfreeeでオフカツ*1として立ち上がった、競技プログラミング部について紹介したいと思います。 以下、競技プログラミングを競プロと表記します。

目次


競プロとは

まずはじめに、競プロとは

プログラミングを使って、パズル的な問題を、制限時間内に出来るだけ多く解くスポーツ

と言われています。*2

競プロer(競プロをやる人)は特定の日時に開催されるコンテストに参加してさまざまな難易度、配点の問題を解き、最終的なスコアを競い合います。

この順位に応じてレートと呼ばれる自分の実力を示す数値が変化します。私はこのレートを上げていくことが目標であり、競プロの楽しい点だと感じています。

また、freeeではICPC経験者が社内で活躍していることもあり、「ICPC 国際大学対抗プログラミングコンテスト」の国内予選の協賛企業となって、参加する学生への応援メッセージ掲載などを行っています。

競プロ部ができるまで

私は学生時代から競プロを続けており、周りにもちらほら競プロをやっている人を見かけるような環境にいました。freeeに入社した際にも「会社には人も多いし、探さずとも競プロをやっている人と知り合えるだろう」と考えていたのです。

しかし、入社後に周りを探してみても現役の競プロerには会うことができませんでした。それでも競プロ自体は好きだったので、一人でもくもくと競プロのコンテスト参加を続けていました。

そこでマネージャーに競プロ仲間が探しても見つからないことを嘆いたところ、なんとすでに競プロ部のslackチャンネルが存在することがわかりました!

が、

ほとんどがAtCoder公式通知の転送で、活動はほとんど行われていないようでした。

そこでひとまず土日のコンテストの問題の感想を言い合う会を募集したところ、2名ほど参加してくれる人が現れました! そこから感想を言い合う会が定着し、最終的にオフカツとしての形を得るに至りました。

感想戦の活動

毎週月曜日19:30から1時間弱、直前の土日に開催されたAtCoder*3のコンテストのA~F問題について話しあう会を3ヶ月ほど続けています。参加人数は3~6名ぐらいです。 会の主な内容は、

  • 各自の解法へのアプローチ方法
  • 処理を実現するコードの書き方
  • そのコンテストで上位に入賞している人の書いたコードを読む

などが中心です。複数人で話し合うことで難しい問題が理解しやすくなるのはもちろんですが、序盤の比較的簡単な問題においても、「制約から正しく計算量を見積もると、書きやすい愚直なコードでも正解できる」ような発見があり、競プロerとしての力がついている感覚があります。

ショートコンペの活動

毎週木曜日19:30から、AtCoder ProblemsのVirtual Contestsの機能を利用して、AtCoderの過去のコンテストで出題された問題の中から300~400点相当の問題を1問だけ解く会を行っています。参加人数は2~4名ぐらいです。

前半30分を制限時間としてもくもくと解き、後半30分ほどでその問題の感想戦を行う、「感想戦ライト版」のような位置づけになっています。

AtCoderのコンテストが土日の夜開催かつ連続100分拘束のため、なかなかコンテストに参加できない方から好評です。

朝会で宣伝した話

上のセクションで感想戦、ショートコンペの定例活動について触れましたが、それ以外でもエンジニアが全員参加する朝会で部活の宣伝をする機会をもらいました。

朝会では上記の定例活動に加えてAtCoderのレートに関する話をし、部の存在をアピールしました。

すると朝会終了後に嬉しいコメントを貰いました。

slackにて「新卒採用面接のときに、競プロ部あるよっていう紹介をするとテンション上がる学生多くて最高です。」とコメントを貰った画像

まだ活動を始めて3ヶ月ですが、少しでも会社のためになる活動ができているかと思うと嬉しい限りです。

また宣伝のおかげで競プロ部のslackチャンネル参加人数は15%ほど増え、定例活動への参加者が増える結果となりました。常に門戸を広げているとは言っても、やはり何らかのキッカケがあると新規参入を考えてくれている方への最後の一押しになるのかもしれません。

これからの競プロ部

懸念点

現在楽しく活動を続けている競プロ部ですが、懸念点もあります。

1つ目はメインで活動に参加してくれている層の実力がAtCoder緑~水色で固まっていることです。もしそれ以外の層が参加したいと思ってくれても会としてのレベルが高すぎる/低すぎることにより充実した時間を過ごせないであろうことです。

もう一つは人数がもう少し増えた場合、感想戦などで参加者全員による自由な議論が行えなくなってしまう懸念です。

上記2つの懸念はブレイクアウトセッションなどの機能で部屋を分割することによって対応することを考えています。クラス分けのようなことを行うとモチベーションの低下につながってしまう懸念もありますが、部内では「重み付き乱数で毎回部屋を振り分ける」等の案が出ており、人数増加のための準備が進んでいます。

これからの展望

これからは定例の活動に加えて、社内で少し大きめのバーチャルコンテストを開いたり、競プロ自体の勉強会も行っていければと思います。また、この記事のように社外に競プロ部の発信して、freeeを知ってもらう機会になればいいなと密かに思っています。

最後に

競技プログラミングに興味があるけど自分の会社に競プロ部がなくて悲しんでいるそこのアナタ!他にもキッカケがないだけで競プロのモチベーションがある人がいるかもしれません。感想戦やショートコンペ形式の活動に誘ってみるのはいかがでしょうか!?