エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

第2回 ESM オフラインリアルタイムどう書くを開催しました

前回開催から2ヶ月あまり。12月24日に第2回を開催しました。

今回はわたしが問題を作成し、@mtsmfm に相談、調整をお願いしての出題になりました。


※公開後に寄せていただいたコードを追記しました。


問題を作る

開催が12月24日の午後からということから、今回の問題は星型ネタで行こうとまず決めました。
図形ネタということで最初に考えたのがグラフの経路もの。こうして考えたのが問題「星めぐり」でした。気がかりはいまひとつ面白みに欠ける気がするところ。


もうひとつ。前回の開催ではテストケースを書いて時間切れというパタンがいくつかありました。どのぐらいのペースでどのぐらいの量のコードを書けばよいか、参加者にその感覚を伝えられていなかったのがその原因。
その反省を踏まえて。先に雰囲気を感じてもらおうと例題も作成。考えたのが問題「瞬き星」。


そしていざ例題を公開しようと問題文を書いているうちに、実は例題として考えた問題の方が面白いんじゃね? と思い至り、急遽例題と当日の問題を入れ替えての公開となりました。


開催2週間前に例題を公開したところ、面白みに欠けるかもというわたしの不安をよそに、Common Lisp で書く、Neography (Ruby+Neo4j)で書く、C言語でループも分岐も使わずに書く、等々ひねったコードがよせられ、例題も一つの問題として楽しんでもらえたようでした。


開催当日

当日参加されたのは8人+オンラインで1人。
当日の他の予定との兼ね合いでコードを書く時間を40分と設定していたのですが、やはり40分という時間はコードを書くには半端な時間のようで休憩時間(兼バッファ)として用意していた時間も当てて計1時間で書いてもらいました。

自分が作成した問題を解いてもらうというのは、想像以上に緊張を覚えるもので、コードを書いている時間はずっとそわそわ。自分も先に書いたものとは別の言語で書いてみようと考えていたのですが、そんな余裕ありませんでした。
自覚はしてるんですが、ほんとメンタル弱いな、自分。

結果、そして痛恨の出題不備

1時間が経過。休憩を挟んで各々書いたコードの解説をお願いしました。
結局テストパタンがすべて通ったのはひとり。ほぼ解けていた人があと数人。結果としての1時間だったのですが、ほどほどの問題が用意できたようで、その点は少しほっとしました。

しかしここで出題不備が発覚。
出題の意図とは違う解釈で書かれた方いて、しかもその解釈であれば確かに期待する結果が得られるコード。なのに用意したテストの中に通らないものがある。
問題を読み返すと、確かにその解釈ととらえることもできます。
問題文において、曖昧さを排除することの難しさを改めて思い知らされました。


第2回を終えて

最後に参加者に一言ずつもらいました。
まず楽しかったという感想をもらえたのが何より嬉しく思いました。
そして今後のことはまだ何も話していないのに「次回は〜」という言葉が幾人もの口から出たこと。ハッカソンでやろうか、とか、時間をかけて解きたいから事前に書いて持ち寄って発表とかどうか、とか、アイディアも次々と出てきます。

今後はもっと「どう書く」にフォーカスして、オフラインリアルタイムだけでなく他の形式もいろいろ試みていけたらよいなと思いました。


最後にわたしの感想。「ほんと、みんなプログラミング好きだなw」


みんなの実装

所属する事業部の公用語Rubyのため、Ruby多めになっております。

もし、この記事や問題を見て解いてみた! という方がいらっしゃいましたら、こちらに追記させていただこうと思います。

当日

@fossamagna

@hidenba

@kajisha

@ikkun

@samurai3

@kunitoo

後日

@kunitoo

@tkm-kj

追記

問題公開後にコードを寄せていただきました。ありがとうございます!
こちらに追記させていただきました。

星めぐり

[@Nabetani / 鍋谷 さん

@cielavenir / しえる さん

瞬き星

@Nabetani / 鍋谷 さん

@cielavenir / しえる さん

@angel_p_57 / angel-p57 さん

いつか読むはずっと読まない:救済の技法

「どう書く」とは方向性は違いますが、プログラミングスキルを駆使するという共通点で紹介。

あなたの知らない超絶技巧プログラミングの世界

あなたの知らない超絶技巧プログラミングの世界



あと。過去にもこのブログで取り上げていますが、こちらの本も再掲しておきます。現在は入手困難な様子なのが悲しい。

ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか

ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか

  • 作者: ジュニア,ヘンリー・S.ウォーレン,Jr.,Henry S. Warren,滝沢徹,玉井浩,鈴木貢,赤池英夫,葛毅,藤波順久
  • 出版社/メーカー: エスアイビーアクセス
  • 発売日: 2004/09
  • メディア: 単行本
  • 購入: 35人 クリック: 732回
  • この商品を含むブログ (128件) を見る



バランスをとるためにもう一冊。コードが Fortran だったり、 PL/I だったり、現在のモダンなプログラミングにはそぐわない部分があったりしますが、その考え方は今でも通用すると思います(今ならもっと適切な書籍がありそうですが…)。

特に規則の第一、「わかりやすく書こう。うますぎるプログラムはいけない。」は肝に銘じるべき規則と今でも信じています。

プログラム書法 第2版

プログラム書法 第2版


星めぐりの歌

宮澤賢治 星めぐりの歌


あかいめだまの さそり
ひろげた鷲の  つばさ
あをいめだまの 小いぬ、
ひかりのへびの とぐろ。


オリオンは高く うたひ
つゆとしもとを おとす、
アンドロメダの くもは
さかなのくちの かたち。


大ぐまのあしを きたに
五つのばした  ところ。
小熊のひたいの うへは
そらのめぐりの めあて。