Coderetreat in Fukui (2013-02-23) に参加してきた!

久しぶりのペアプロイベントだ!と思い、行ってきました。

今回のファシリテータは QuickJUnit / チェンジビジョンの近藤さんでした。

Hiroki Kondo (kompiro) on Twitter

会場スポンサー永和システムマネジメント、ランチスポンサーはチェンジビジョンさんでした。

改めて、ありがとうございました!

準備

日程的にはあとからどんどんきつくなっていったけど、決めたことだし仕方がないっすね。2週間くらい前から仮実装をTDDしてみたりしてました。完成はしなかったけど。

で、準備はですね、やった方がいいですね。なんでかっていうと45分のペアプロはやることがてんこ盛りで結構ハードだからです。この話は後述。

※ 先週の kanazawa.rb meetup #6 で序盤イベントに集中していなかったのは、このイベントの準備と仕事の両方のメドが立っていなかったからでした(笑) すげーつらい時期だった。

簡単にcoderetreatを紹介

Coderetreat is a day-long, intensive practice event, focusing on the fundamentals of software development and design.

  • practice が目的。いろいろやってみよう。
  • 45分1セッションでライフゲームを題材にペアプロする
  • 複数セッションを継続させることはできない。次のセッションでは前のセッションの内容は参照せずに行う。(コードは破棄する)
  • ペアも言語も自由に選択
  • セッションの45分は厳守だが休憩時間は割と自由

Structure of a Coderetreat

この辺読むといろいろ書いてあるので facilitate する場合は熟読すべし :-)

会場の感想

会場は福井の永和システムマネジメントとチェンジビジョンが入っているビルでした。当日は朝7:00の電車に乗った辺りからあれよあれよと雪が舞い始めてうわーなんだこれって感じになりましたが、会場の雰囲気はとてもよかったです。

途中のブレイクで社内見学させてもらいましたが、社員の書いた本が飾ってある棚があって、「小さな書店の技術本のコーナー」くらいの量があるんですよ、これが。しかも「そういやあれもこれも見たことあるぞ、おい」という本ばかり。知ってて買った本もあるけど知らずに買った本も何冊もあって、なんだこの会社はと改めて思ったのでした。

しかもアレ、業務じゃないんですって。信じられない。

イベントの感想

疲れた!(笑)

実は1/3は休んでたんだけど、それにしても疲れました。まぁ、割と疲労のピークには来てましたが、それにしても久しぶりのペアプロイベントはとても疲れました。

でも楽しかった。正しい coderetreat を facilitate するのはちょっと大変そうだけど、この感じを取り入れた何かをするのはとても面白そうだなと思いました。

永和の岡島さんが仰ってましたが、このイベントはコミュニケーションなんですよね。プログラミング言語で、自然言語でコミュニケーションする、それもほぼ45分頭をフル回転させる。そしてより良い何かを目指す。より良い設計かもしれないし、セッション開始時に絞った特別なポイントかもしれないし、一歩でも完成に近づけるための戦術だったりする。

これがむちゃくちゃ面白くて疲れる。

1セッション目はお互いに面識もないし、ちょっとぎこちない感じなんだけど、2セッション目からはやることも見えてるし、各自それぞれの目的でもってこのコミュニケーションが始まります。自分の知らない言語に触れてみたいという思いだったり、さっき思いついたけど達成できなかった実装とか。お互いの人となりは知らないんだけど、少なくともあの空間においてはネタに事欠かない状態なのです。不思議な共有と加速があります。

TDDBCでペアプロしてみた経験はあったけど、業務の中ではやってないし、やるとしても先に目標と時間が読めるものを使って「教える」感じでしか使っていなかったので、この戦闘モードのペアプロというか、こんなのマジで毎日続けてるやつらいるのか?っていうくらい疲れました。45分の縛りが回復を助ける意味にも疲労を倍加させる意味にも働いてるんでしょうね、これ。

あとペアプロやるとソッコーで仲良くなれますね。飲み会よりコストパフォーマンスいいな。車で行けるし、こういうのもアリだな(笑)

個人的な反省

教えてもらう気まんまんで行ったんだけど、そろそろ自分は教えることもできるんだなぁということに気づくことが多かったです。そして周りは型型な人たちばかりだったのに対して自分だけゆるふわだったので「Rubyを教える」感じの時間が長くなってしまって、あれーこういうイベントだったかなぁ?みたいな気持ちになったのはちょっとあります。

でもこれはこれでペアの方にとって新しくて面白い体験だったのかもしれないし、そうであったならよかったなと思います。ペアプロって言っておきながらだいぶ一方的にドライバやり続けててダメじゃんと思ったりもしたけど、今思うとあれはアリっちゃアリなんだろうなぁと。

ただ、それならそれで最速で環境を準備できるようにしておくべきだった。いつもGemfile書いてbundle叩いて…を儀式のようにやっていたんだけど、45分という縛りがつくとこの儀式の時間がない。本当にないんです。ちょっと誤算でした。Eclipseで1クリックで新規プロジェクトを作るのと同等の時間で準備できなきゃいけなかった。反省。

そして使えると言った言語の分、これを用意しておくべし、ということでした。

もう一つは出だしですね。変に聞こうとしすぎてお互いに「うーんどっちでもいいですね」みたいな時間ができてしまうとすぐに残り時間がなくなっちゃう。設計や実装の選択肢をあらかじめ自分の中にもっと用意しておけば、もっと濃くできたんじゃないかなぁという思いがあります。もちろんペア次第ではあるんですけど。

ただ、今振りかえると、そして coderetreat.org の記述を読むと、これを実現するためには言語は揃ってた方がいいっすね。みんな Java はできそうな感じだったし、本当は Java で揃えた方が

Structure of a Coderetreat

をなぞりやすかったんだろうなと思いました。

あとは道具。

Eclipseが使えないと仲良くなれないw 普段のイベントと違ってMac使いも少ないし、みんなIDE使ってるし、これはやっぱ真面目に普段は使わないけど共通言語にする環境は用意しといた方がいいなぁと思いました。Eclipseよりは軽いし、もうちょっとNetBeansと仲良くなっておこう。

※ おまけ。RSpecでshouldをバンバン使ってしまって、ちょっと今後に対して一部悪い印象を与えた可能性あるなぁと思いました。expectの練習が不足してました。

今考えるライフゲームの構成要素

あくまで自分の考える要素です。以下の要素についてそれぞれ考えて設計、実装できるような気がします。

  • 見た目表現
  • 初期状態のセット方法
  • セルのロジック
  • セルの集合の扱い
    • セルの状態(世代管理)
  • 見た目の有限フィールドとゲームの無限フィールド

これを事前に考えておくことができると、どこをどう攻めるか、濃いペアプロができると思います。

取り組み方のポイントのメモ

  • ペアプロと言語と環境
  • TDDでやるか否か
    • TDDはどこでも題材にできるが、そうじゃないやり方は「好きな場所だけ作る」のはやりにくい
  • ペアプロと教えることと参加者の得ること

TDD が coderetreat では推奨されています。自分もできるならやった方がいいと思いますし、今回は参加者にチェンジビジョンの方が混ざってらしたので、そこかしこで TDDBC が自然と展開されて、「うおーTDDすげぇ」みたいな感想が多かったです。なにこの超お得イベント。

その他の会話

  • 今回参加者分かんなかったですね
    • 分かんない方が学生さんが参加しやすいかと思いまして
    • はーなるほど。学生の参加って課題ですよねー。
  • request specってそんないいすかね?
    • stub, mockばかり使ってると実際のデータでうまく動かないごく単純なパターンを見落としたりすることがあったのと、stubが邪魔で変更しにくくなったことがあったので、自分は最近ModelとRequestを中心にやってます。
  • BackboneとかでフロントでJSの比率増えてくるとReuqestよりControllerの方がやりやすいような。
    • それはあるかもしれないっすね。そこまで自分はやったことないんで分かんないですけど。
  • RubyのblockってSmalltalkみたいですね。
    • うぉ。自分はSmalltalk書けないけど、SmalltalkとLispはパクってるらしいですね。
  • RubyはRailsが強くて迷わなくて済むからいいですね。
    • そうですね、そのうえで何をどう実現する、何のためにどういう活動をする、という話に集中できていいと思います。いつまでもツールの話をやらなくていいのは楽っす。
  • 中学校の数学みたいで面白いですね
    • (セッション一つ、0から8の数字を0と1に変換することだけに費やしましたw)
  • JavaScriptてvar付けないとどうなんの?
    • globalにぶちまけちゃうから意図せず壊れる可能性あるよ

More