はじめに
皆さんは「競技プログラミング」という言葉を聞いたことがありますか?
競技プログラミングとは、限られた時間内にプログラムを使って問題を解く、いわば頭脳を使ったスポーツのようなものです。与えられた課題に対して、効率的なアルゴリズムを考え、プログラムで解答を導き出す力が求められます。
「なんだか難しそう」と感じるかもしれませんが、実は基礎的な問題から始めれば初心者でも楽しみながらスキルを身につけることができます。プログラミング初心者からベテランまで、自分のペースで挑戦できるのが魅力です。
私たちsustenエンジニアチームでは、数カ月ごとにテーマを変えて新しい知識やスキルを学べるよう継続的に勉強会を開催しています。テーマは各メンバーから興味のあるアイデアを募り、最終的にみんなの投票によって決まります。
これまでには技術書を輪読してみんなで知識を深めたり、ボードゲームでチームの絆を深めたりと、さまざまなテーマに挑戦してきました。
そして今回、多数のメンバーの関心を集めて選ばれたのが「競技プログラミング」。
業務とは少し異なる新しいチャレンジとして、みんなで楽しみながら学べるテーマを取り上げることになりました。
この記事では、私たちが取り組んだ競技プログラミング勉強会の内容や成果についてご紹介します。
勉強会開催の背景と目的
エンジニアとして日々の業務に取り組む中で、私たちが常に直面する課題の一つは「問題解決力の向上」です。
特に複雑な課題を効率的に解決するためには、アルゴリズムやデータ構造の知識が欠かせません。そこで、「競技プログラミング」を通じてスキルアップを目指そうという勉強会を企画しました。
この勉強会のきっかけとなったのは、CTOのこんな一言でした。
「普段面接でアルゴリズムの問題を出しているのに、自分たちがマスターしてなかったらカッコ悪いじゃないですか」
この言葉にメンバー一同はハッとさせられ、もっとスキルを磨こうと勉強会開催を決意しました。
実は、これまでも私たちのチームでは技術書の輪読会をしたり、ボードゲームでチームビルディングをしたり、いろいろなテーマで社内勉強会を開催してきました。
でも、競技プログラミングのようにちょっと「頭をガンガン使う系」のテーマは初めてだったので、正直ドキドキしつつもワクワクしながら準備を進めていきました。
勉強会の概要
勉強会を開催するにあたり、まずはCTOと私の二人で模擬練習を行い、どのように進めるのが効果的か試行錯誤しました。
模擬練習では、問題の選び方や解説のタイミング、どのくらいの時間を設けるべきかなどを検討し、メンバー全員が楽しく参加できる方法を模索しました。
実際の勉強会では、オンライン会議ツールのGoogle Meetを使用し、ブレイクアウトルーム機能を活用しました。
参加者を3人程度の少人数グループに分け、各グループでAtCoder(*)の問題に取り組んでもらいました。問題は比較的簡単なものから難しいものまで3問を用意し、解けたら次の難易度の高い問題に挑戦するスタイルを採用しました。
ブレイクアウトルームでのセッション時間は40~50分程度でしたが、「もう少し時間が欲しい!」と悔しがる声が多数上がるほど、みんな夢中になって取り組んでいました。その後は全員で集合し、各グループがどのように問題を解いたかを共有する「感想戦」を行いました。感想戦では、他のグループの解法を学んだり、新たな発見がある場面も多く見られました。
(* AtCoder は有名な競技プログラミングプラットフォームです。AtCoderでは、実力に応じた様々なレベルの問題が揃っているプラットフォームで、初心者からプロまで幅広い層が利用しています)
勉強会の進行と内容
勉強会を何回か開催する中で、「もうちょっと効率よく学べないかな?」という課題が見えてきたので、進行をちょっと変えてみました。これまでは完全にランダムな問題を解いていましたが、毎回テーマを設定して、みんなでそのテーマに沿った問題を解く形式にしてみました。
具体的には、毎回1人が「講師役」を担当し、競技プログラミングでよく出てくるアルゴリズムを簡単に解説。
その後、そのアルゴリズムを活用する問題に挑戦する流れです。
たとえば、こんなアルゴリズムをテーマにしました:
- 二分探索(データを効率よく探す方法)
- 動的計画法(DP)(複雑な問題を小さく分けて解く手法)
- 幅優先探索(BFS)(グラフ構造を探索するアルゴリズム)
テーマを設定したことで、「ただ問題を解く」から「解法を深く理解する」にシフトでき、参加者みんながよりスムーズに学べるようになりました。
勉強会を通じて得られた成果
今回の勉強会で得られた成果をざっとまとめるとこんな感じです:
-
アルゴリズムの基礎がしっかり身についた
テーマを絞って解説することで、初めて触れる人でも理解しやすくなりました。 -
メンバー同士のスキル共有が進んだ
講師役やグループでの議論を通じて、初心者から上級者までお互いに刺激を受ける場面がたくさんありました。 -
挑戦する楽しさを実感できた
問題が解けなかった悔しさが次へのモチベーションになり、参加者全員が「もっとやりたい!」という雰囲気に。
まとめ
競技プログラミング勉強会をやってみて、みんなの成長やチームの一体感を感じる素晴らしい時間になりました。もしこの記事を読んで「やってみたい!」と思ったら、ぜひあなたのチームでも挑戦してみてください。楽しく学べること間違いなしです!