なか日記

一度きりの人生、楽しく生きよう。

Global Day of Coderetreat in Matsuyama に参加してきた

なんちゃってプログラマだけど楽しそうなので参加してきました。

日時 : 2012年12月08日(土) 08:30 - 17:00

定員 : 20 人

会場 : コワーキングスペース'ダイヤモンドクロス'
松山市大手町1丁目14−2)

勉強会 : http://agile459.doorkeeper.jp/events/2038

参加費 : 無料
      昼食、ドリンクバー、おやつ付き
      ※ドリンクの持ち込みはできませんのでご協力をお願いします。

お題はコンウェイのライフゲーム。これを45分間でペアプロし、終わったら振り返り、そして別のペアと次のペアプロという風に繰り返します。

余談ですが、前日の21時ごろにお題が「ライフゲーム」というのを知って、ライフゲームってなんぞ?とウィキペディアを見て予習したりしてました。

以下、私が体験した各セッションでの感想です。

ペアプロ セッション#1

しょっぱなということで、まずはライフゲームってどんなの?というところから始まりました。 とりあえず、えいやっと作ってみますか!といきなりコードを書き始めたのですが…

10x10のマスがあって、それを1つずつ対象に周りのセルをチェックして…としてるうちにどんどん深みに…

いきなり全部の問題を扱おうとしたために混乱。ペアに思いが伝わらないw そしてあっという間に時間終了~

感想

  • 設計の意思疎通が難しい
    ⇒小さな問題から始めるべきだった

ペアプロ セッション#2

ここでファシリテーターから、「言い忘れてたけど、TDDでやってね」という指示がありました。

今度は前回の反省を踏まえて、設計について事前に話をしました。盤面のクラスとセルのクラス。セルのクラスがいるかいないかで生死を判断しようとか。

まずはセルクラスから実装することにしました。「次のセルの状態を決めるメソッド」から着手したのですが、「周りのセルの生きてる個数を取ってこないと」という話になり、どういうデータ構造がいいか悩んでいました。位置情報をセルに持たせようとしたり、隣のセル情報を持たせようとしたりして混乱。あーでもない、こーでもないとやっているうちに時間終了。

感想

  • 全然TDDができない
    ⇒扱う問題が大きすぎた

ファシリテーターからのアドバイスとデモ

全体的に大きな問題を扱おうとしすぎている。もっと小さなところから少しづつ進めないとダメよ。というアドバイスがありました。

そして、さわりの部分だけデモを見せてもらいましたが、ここでだいぶヒントをもらった感じ。数行テストコードを書いて、テスト→失敗。数行プロダクトコードを書いて実行→成功、リファクタリングというサイクルを目の当たりにして、なんとなくわかった気分に。

ペアプロ セッション#3

そろそろ本気出す。ということで、@さんとペアになりました。

さっき見たデモを思い出しながら、ちょっとずつ進めていきますが、さすがTDDBCに参加したり、この前発売されたJUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)を読んでたりされているのでなんかよくわかってらっしゃる感じ。

セルの実装まで完成し、次は盤面となるWorldクラスを作成。多次元配列でセルを生成したところ辺りで時間終了。

初MacでEclipseでのJavaプログラミングでした。コントロールキーの配置が違っててそれだけでだいぶひどいことになってましたw

感想

  • 全体通して一番ペアプロらしかった
    ⇒ドライバーとナビゲーターの役割をできるだけきっちりしようとしてた
  • 二人の間である程度しようが共有できているとだいぶ楽
  • ショートカットキーやクラスのひな形を勝手に作ってくれるのは便利なので知っておくべき

お昼休み

まったりと食事を頂き、雑談。

ファシリテータから、ボーリングのスコア計算に関するTDDのデモを見せてもらいました。ここで、「おっ!」と思ったのはテストを書いた後、プロダクトコードを書こうとするけど、実装が気に入らないので、さっき書いたテストコードをコメントアウトして、プロダクトコードを整理するというところ。基本的に前進あるのみだと思い込んでたので、一旦テストコードをコメントアウトするっていうのは目から鱗でした。

ペアプロ セッション#4

人数の関係で3人でペアプロ(とは言わないか)。セッション#3の内容を元に、小さく小さく進めていきます。そしてやはりWorldクラスのテストで紛糾。最小限の実装をしたものの、次のテストが思い浮かばない。で、何とか考えたテストで行こうとすると、プロダクトコードをバリバリ書かないといけない雰囲気。むむむ、これは…というところで時間終了。

感想

  • 小さく進めようとするけど、テストを通すためにどうしても大きく書かないとダメっぽい時にどうするか?
    ⇒テストをコメントアウトして戻る。そして違うテストとか、プロダクトコードを変更する。

ペアプロ セッション#5

VB.Netを初めて使ったけど、VB6チックな部分はいいけど、.Netたらしめているところの構文がさっぱりわかりませんでした。同じ.Net Frameworkベースなんだから、クラスとか同じじゃん。何とかなるさ♪と思ってると痛い目を見るということがよくわかりました。

そんなのもあって、セルクラスを実装したところで終了。

感想

  • VB.Net手ごわい
    ⇒できればお付き合いしたくない

ペアプロ セッション#6

最後のセッション。Javaでサクサクセルクラスを作成。さすがにここはみんな何回もやっているので早く終わりました。そして問題のWorldクラス。いきなりプロダクトコードを書いてしまった(;´∀`)

そしてあとから確認するためにテストを追加しようとしますが、難しい!テストのことなんて考えていないのでどうにも手が出ない感じ。「これがレガシーコードというやつか…」というのを体験しました。

感想

全体を通しての感想

参加する前は「業務でコード書いてるわけじゃないし、はたしてついていけるんだろうか?」とかなりドキドキしてました。始まってみればそれは不要な心配だったわけで、存分に楽しめてよかったです。

小さく進めるとか、テスト→実装→リファクタリングのサイクルをクルクル回すとか、本で読んだり話を聞いたりはしていましたが、今一つピンと来ていませんでしたが、実際に例を見てやってみれたのがよかったですね。あと、これは実装が大きすぎますかね?とかペアに意見を聞いたりできたのも、ペアプロだったからで勉強になりました。

あと、今まで参加した勉強会と違って、自分が書いたコードを人に見てもらうとか、他の人が書くコードを見たり考え方を知ることができたのも有意義でした。仕事ではプログラムに触れる機会が少ない上に、コードレビューという習慣もありませんでしたから。

とても新鮮で、刺激的で楽しい1日を過ごすことができました。 企画・準備して頂いた方々、スポンサー企業、ファシリテータの方には本当に感謝です。ありがとうございました。

最後に、

*1:今の自分では?