第一回 社内プログラミングコンテスト開催

3/25(金)に社内でプログラミングコンテストを開催しました。

どのように実施したかや、当日の様子などをご紹介したいと思います。

当日のスライドはSlideShareにアップしてあります。
http://www.slideshare.net/Flame1980/ss-60024817

開催の動機

昨年の秋の事。社外のプログラミングコンテストに弊社のメンバーが数名参加し、私はその結果発表会にオブザーバとして参加しました。
その時に、他社の技術者の方々がとても楽しそうに自分の書いたコードについて発表しているのを見て、「ウチもこうありたい」と強く思ったのがきっかけです。

準備開始

やると決めたので、準備開始です。

問題はFizzBuzzを選択

まずは問題を考える事から始めました。

問題の難易度を上げたほうが中堅以上の人たちには喜ばれるでしょうが、そうすると初心者が参加できない。
また、難しい問題は解くにも評価をするにも時間がかかり、スピード感が失われてしまう。
そんな事を考えて、今回は簡単かつ有名な問題であるFizzBuzzを選びました。

仕様

『FizzBuzz作って』だけだと少々乱暴なので、以下の様な仕様を明示しました。

  • 終了値を入力できるようにする
  • 終了値が入力されると、1から終了値まで順番に数を表示していく
  • その数が3で割り切れるなら”Fizz”
  • 5で割り切れるなら”Buzz”
  • 両方で割り切れるなら”FizzBuzz”と表示する

言語はPHP一本

言語は初めからPHP一本でいくと決めていました。
メンバーが普段使っている言語がPHPであり、みんなの参加を促しやすいためです。

対象者

普段開発している人は全員参加、それ以外の人でも出場したい人は自由に参加としました。

事前準備

開発メンバーは普段デスクトップPCを使っているので、自席でやるか迷ったのですが、会議室で集まって実施することにしました。
普段の業務とは違う雰囲気にしたかったのと、説明や結果発表も流れでやってしまいたかったためです。

そのため、コンテスト開催の2週間前に当日のおおよその流れや事前準備についての情報などを通達しました。
公平を期すため、どのような問題が出題されるかは当日まで伏せておきました。

準備に関する要件は以下の様な感じで伝えました。

  • 各自のノートPCで実施してください
  • 動作環境は各自で用意してください
  • 言語はPHPのみとします
  • PHPのバージョンは5.3以上とします
  • PEARなどでの追加ライブラリの使用は禁止します
    • 但し、自作のものについては使用を認めます
  • インターネット検索は、PHPの標準関数や構文を調べる事のみ許可します

当日の流れ

以下のタイムテーブルで進めました

  • 説明・準備(15分)
  • プログラミング(30分)
  • 休憩・発表準備(10分)
  • 各自発表(1人5分)
  • 投票(10分)
  • 集計(10分)
  • 結果発表(15分)

評価方法

参加者およびオブザーバー全員による無記名での投票形式としました。
各自1〜3位までを投票用紙に記入して提出してもらい、それぞれ以下の点数配分としました。
また、投票の際にそのプログラマが良いと思った理由も記載してもらいました。

1位は3ポイント、2位は2ポイント、3位は1ポイント

また、早く終わった上位3人には、特別ボーナスとして以下の点数を付与するようにしました。

1位は3ポイント、2位は2ポイント、3位は1ポイント

評価基準

今回は初めての開催ということもあり、基準をあまり縛らずに各自好きなように評価してもらいました。
参考例として、以下の様なものをあげています。

  • 要件を満たしていること
  • バグがないこと
  • リーダブルなコードであること
  • エラー処理をきちんとしていること
  • 汎用性が高いこと

当日の様子

当日は、普段開発をしている5名と開発経験のない1名の計6名が出場しました。

問題を発表した時に「その問題が出題されることを予想して既に作ってあるぜHEHEHE」とかいうヤツがいたりと、若干のトラブルもありましたが、概ねスムーズに進んだと思います。

コンテストの様子
procon-20160325.png

今後について

今回のコンテストは、皆さんにとても楽しんでもらえたようです。

終わった後も、「こういう作りにすれば良かった」とか「次回はこうするのはどうだろう」と建設的な意見が飛び交っていました。

反響があった事は、主催者としてとてもうれしく思います。
手応えを感じたので、出てきた意見を踏まえて、次のコンテスト開催へつなげていきます。

ゆくゆくは、各メンバーが持ち回りで主催者を努めて、積極的に開催されるような文化が根付くと良いなと思います。

謝辞

今回、忙しい時間を割いてコンテストに参加された方々、オブザーバとして参加された方々に深く感謝しています。

また、プログラミングコンテストを企画するにあたって、以下のブログを参考にさせてもらいました。この場を借りて御礼申し上げます。
http://blog.jnito.com/entry/20111007/1317976730