プログラミング初級者から上級者まで一緒に楽しめるコードゴルフ大会開催のコツ
こんにちは。基盤戦略グループでエンジニアの育成をしている藤田です。
コードを書くのって、エンジニアにとっては最高に楽しい時間ですよね!
これからプログラミングを楽しみながら学びたい方、在宅勤務のストレスを吹き飛ばしたい方にオススメのイベント「コードゴルフ大会」について紹介します!
ビッグローブでは社内でIT技術の勉強会やLT大会などのイベントが頻繁に開催されています。そういったイベントをフォローして盛り上げるのも私の仕事です。
今日は、先日行われた社内コードゴルフ大会について紹介します。
コードゴルフ大会とはプログラミングをして、そのコードの短さを競う大会です。
大会といってもチャット上での「息抜きにコードゴルフすっぞ」という書き込みから始まったゆるい大会です。
この大会がプログラミング初級者から上級者まで参加できる楽しいイベントだったので、その内容と開催のコツを公開します。
コードゴルフとは
コードゴルフはコンピュータプログラミング・コンテストの一種。参加者は与えられたアルゴリズムを、可能な限りもっとも短いソースコードで記述することを競う。バイナリサイズではなく、ソースコードの文字数がスコアとなる。
https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC%E3%83%89%E3%82%B4%E3%83%AB%E3%83%95
とにかくソースコードを短くした方が勝ちです。
大会のコンセプト
とにかく誰もが「やってみよう」と思える敷居の低さにしたかったので、コンセプトは以下の2点にしました。
- 誰でも参加できること
- それぞれのレベルにあった楽しみ方ができること
このコンセプトに則して大会のルール、お題、進め方を決めました。
大会のルール
まず大会のルールを説明します。私たちはこんなルールで競いました。
- お題を2問解き、その合計スコアで競う
- 言語は自由
- 標準ライブラリ以外の利用は禁止
- スコアはソースコードに対してwcコマンドを実行して算出する
$ wc -c ./a_*
272 ./a_1.py
280 ./a_2.rb
552 total
- 大会期間は1週間
- 参加者はお題を解いたらチャットにスコアを貼る
- スコアは何度貼ってもok。スコアが伸びるたびに貼ると良い
お題のコツ:とにかく簡単に
誰でも参加できるように、できるだけ簡単なお題にします。たとえば私たちが使ったお題はこんな感じです。
引数の 'A' の数と 'B' の数を比べて、'A' のほうが多ければ 'A' を、 'B' のほうが多ければ 'B' を、同じ数なら '=' を返す。
f("Aa") => "A"
f("aabbB") => "B"
f("Abbac") => "="
簡単ですね。ifやforなどの基礎を学んだ人なら解けると思います。
お題を簡単にすると初級者は良いが、上級者はつまらないのでは?と思われるかもしれませんが、そこがコードゴルフの良いところ。コードゴルフはスコア(コードの短さ)が勝負なので、簡単なお題でも楽しめるんです。上級者はお題を一瞬で解いた後、「もっと短くするにはどうするか?」という自分との戦いが始まります。そして言語仕様の細かいところまで調べて最短のコードを目指します。また使用する言語を自由にしているので、スコアを上げるために新しい言語に挑戦する人もいます。つまり、お題を簡単にすることで、上級者は最短のコードへの探究心をより刺激されるんです。これぞエンジニア魂。
進め方のコツ1:あえて作ったコードを公開せず、スコアと向き合ってもらう
競技プログラミングは参加者が多いほど、初心者はコードを公開するのが億劫になります。ただコードゴルフはスコアさえ分かれば成立するので、無理にコードを公開する必要はありません。コーディングをみんなで楽しみたいなら、むしろコードを公開して他人と比べるよりも自身のコードと向き合ってもらった方がいい。なので公開するのはスコアのみにします。
進め方のコツ2:途中経過のスコアを公開して盛り上げる
大会の目的が優勝者を決めることなら、大会の最後にみんなのスコアを公開して優勝者を決めれば良いですが、我々の目的はみんなで楽しむことなので、大会途中でもスコアを公開します。
途中のスコアを知ることでお互いに探究心を刺激しあい、盛り上がっていきます。実際やってみると「え?このお題、スコアを100以下にできるの?もう少し考えてみよう」とか思います。
朝からゴルフを始める人々
進め方のコツ3:初心者フォローチャットを作る
上級者のスコアがチャットに投稿され始めると初心者のモチベーションが低下してきます。
「上級者はスコアが100切ってるのに私は500か。。やる意味ないなぁ。。」
大会の目的はみんなで楽しむことなので、そうなったらマズいですね。そのためにチャット上で初心者用の部屋を作ってフォローします。この部屋にスコアの経過を投稿してもらい、スコアが上がるごとにみんなで"いいねボタン"を押して喜びます。ある程度できるようになったら、「次は3項演算子を使ってみよう!」とか普段苦手意識のある書き方に挑戦してもらうのも良いと思います。
最後は、優勝者と笑う
上記のコツをふまえた結果、大会には多くの方がいろんな言語で参加してもらえました。
ちなみに今回優勝した方のコードはこちらです。
sub f{$_=@_[0];qw(= A B)[y/aA//<=>y/bB//]}
何これ。。プログラムというか...呪文ですねw
作者曰く「読みにくいのはオレのせいじゃない。Perlのせい」だそうですw
大会の最後が「勝って嬉しい、負けて悔しい」ではなく、みんなそれぞれに工夫して、その過程を楽しみ、共感して終われるのがコードゴルフの最大の魅力です。
みなさんもぜひ、周りのメンバーを巻き込んで開催してみてください。
「プログラミング」をもっと詳しく
「プログラミング」のニュース
-
企業が求人募集している言語から読み解く!2024年人気のプログラミング言語ランキングTOP10/SalesNow DBレポート5月16日13時16分
-
プログラミングスクール『RUNTEQ』が一部カリキュラムをアップデート!「導入STEP」の新設・「RUNTEQ Books」の提供開始5月15日16時16分
-
デジタイザ及び信号発生器用の高レベルなオブジェクト指向Pythonパッケージを提供開始5月15日15時16分
-
【子どものプログラミング教育】4割以上の保護者が授業についていけるか不安を感じているものの、授業以外で対策を行わせている方はわずか2割!5月15日12時46分
-
ABB ロボティクス、ロボティクスとAIのイノベーションを加速するグローバルスタートアップチャレンジを開始5月14日19時46分
-
プログラミング教育イベント「コエテコEXPO」6/25-275月14日13時15分
-
テックアカデミーのキラメックスとSkillDBのテックピットが連携を開始5月14日13時12分
-
未来のプログラミング教育を共創する『コエテコEXPO 2024』オンライン&リアルで開催決定!【GMOメディア】5月13日16時46分
-
夏を先取り!プログラミングでオリジナルビーチを作ろう!『Playgram(TM)』のクリエイトモードに新フィールド“砂浜”が8月18日(日)までの期間限定で登場5月13日11時16分
-
Excelをノーコードで自動化しよう! パワークエリの教科書 第1回 Power Query(パワークエリ)の概要と具体的な活用例5月13日11時0分
トレンドニュースランキング
-
1なぜか600万円安くなっていた家を購入してみた結果 入居後、隣人からのクレームで駐車場が......【前編】 キャリコネニュース
-
2600万円安くなっていた家を購入 駐車場問題の次は、隣人から「エアコン室外機」についてクレームを受けて......【後編】 キャリコネニュース
-
3岩手にも「富士ローソン」撮影できる場所があった 地元YouTuberが「遊びに来て」と呼びかけた理由 Jタウンネット
-
4ドクダミを除草剤を使わず防ぐ方法3選 生態と対策がよく分かる解説に「待ってましたよ!」 「これは嬉しい!」と大反響 ねとらぼ
-
5エアコン冷房の設定「弱」と「自動」ではどちらが節電? ダイキンが誤解されやすい4つのケースを検証 マイナビニュース