見出し画像

実装力底上げを目指して、社内で「バーチャルコンテスト」を開催している話

みなさんこんにちは!
ワンキャリアでソフトウェアエンジニアをしている大橋(@m_asa_o)です。

今回は当社で取り組んでいるアルゴリズム力強化施策について紹介します。



はじめに

以前のブログでもご紹介した通り、当社では多くのメンバーがLeetCodeに取り組んでいます。また、当社のエンジニア採用では選考ステップの一つとしてコーディングテストを実施しており、各メンバーはアルゴリズムとデータ構造に関する素養を備えていることが求められます。

その一方で、AtCoderなどの競技プログラミング(以下「競プロ」)のコンテストに積極的に参加しているメンバーは多くありません。実際、競プロに興味を持つメンバーはいるにもかかわらず、コンテストを活用しないのは勿体無いと常々感じていました。そこで、入社前からAtCoderに取り組んできた自身の経験を活かして、ワンキャリア全体の技術力を底上げするための取り組みとして、バーチャルコンテストを企画しました。


コンテスト開催に利用しているWebサイト

本家AtCoderのコンテストは、主に毎週土曜の夜に開催されています。ゆくゆくはコンテストへの参加者を増やしたいとは思うものの、いきなりメンバー全員に参加してもらうことは難しいです。
そこで、まずはAtCoderで問題を解いて競い合う楽しさを体験してもらおうと考え、毎週決まった時間にバーチャルコンテストを開催することにしました。

バーチャルコンテストは、「AtCoder Problems」というWebサイトの機能を利用して実施しています。
難易度帯と問題数と制限時間を指定すれば、AtCoderの過去問からランダムで問題セットが作成され、参加者同士で競い合うことができます。Privateに設定することで、参加対象を社内メンバーに限定することも可能です。

制限時間終了後、正答した問題の難易度と解答時間に応じて推定パフォーマンスが計算され、参加者間で順位がつきます。この仕組みを通じて、参加者は自らの実力を試せるだけでなく、他のメンバーと切磋琢磨することで成長する機会を得られる点が大きな魅力です。


コンテスト参加にあたって

AtCoderの問題を解くのが初めてというメンバーが多かったので、環境構築からサポートしました。AtCoderでは、ブラウザ上でWebサイト内のエディタから提出することも可能ですが、私はまずローカルのPCで環境構築を行うことを推奨しています。

主な理由は以下の3点です。

  • 使い慣れたエディタでコーディングできる

  • 入力補完ツール、Linter、Formatter等の拡張機能が使える

  • ローカルのCLIでコードテスト、解答提出まで行える

特に2番目の効果は強力です。競プロには、正しい出力を返すコードさえ書ければ、可読性やコードの体裁は問われないという特徴があります。だからこそ、保存時に自動修正を行うツールなどを活用し、コードの綺麗さを意識しなくても良い環境を作ることが、結果的に快適で迅速なコーディングにつながると考えています。

詳しい手順は省きますが、「atcoder-cli」「online-judge-tools」の2つをインストールすることで、最低限の環境は整えられるはずです。

また当社では、競プロ自体が初めてというメンバーも多かったので、下にあげる5つの教材での学習を推奨しました。


  • APG4b

公式に提供されている、C++を使って問題を解くためのガイドです。C++で競プロを始めようと考えている方には最適です。

  • アルゴ式

アルゴリズムとデータ構造の教科書のようなWebサイトです。AtCoderと同じく、解答のジャッジ機能と、他のユーザーの回答を見られる機能がついています。標準入力を受け取る練習から、より高いレートを目指すための勉強まで、幅広い用途で使えます。

  • AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~

AtCoderの過去問の中から、最初に取り組むべき問題が厳選されています。コンテスト自体の説明に始まり、初級者から徐々に強くなっていくための方法が丁寧に解説されているため、AtCoderに入門したすべての人が読むべきです。私も大変お世話になりました。

  • 競技プログラミングの鉄則

競プロの参考書は数多くありますが、本書は比較的新しい本なので、ここ数年のAtCoderの問題傾向に合致した内容となっています。また、AtCoderのWebサイト上に例題のオンラインジャッジシステムも備えられています。図解も充実しており、一冊目の参考書として選ぶには最適です。

  • 競プロ典型90問

「競技プログラミングの鉄則」の著者によりAtCoder上で公開された典型問題集です。難易度の高い問題も散りばめられているため、他の教材で力をつけてから取り組むのがおすすめです。


おわりに

今回紹介した取り組みのほかにも、競プロに真剣に取り組むメンバーたちが本番コンテストに参加し、競プロ部のSlackチャンネルで互いにモチベーションを高め合ったり、解法のアイディアを交換したりしています。

競プロは、論理的思考力や問題解決力を鍛える上で非常に有効な手段です。本記事を通して、競プロやワンキャリアの開発組織に興味を持っていただけたら幸いです。

もし弊社開発組織に興味を持たれた方は、ぜひカジュアルにお話しさせてください!


▼ワンキャリアのエンジニア組織のことを知りたい方はまずこちら

▼カジュアル面談を希望の方はこちら

▼エンジニア求人票


この記事が参加している募集

オープン社内報

この記事が気に入ったらサポートをしてみませんか?