Global Day of Coderetreat in Tokyo に参加してきました。 #gdcr11

こくちーず

Togetter

12/3(土)は飯田橋のクラスメソッド株式会社を会場にて行われた『Global Day of Coderetreat in Tokyo』に参加してきました。

『Global Day of Coderetreat』とは?

Coderetreat は、プログラマのための練習、学習のためのイベントです。同じ課題をペアプロで実装しながら、プログラミング、設計、テストなどの技術を学びます。

詳細は、InfoQ の記事を参照ください。

12/3 には、世界80カ所以上、2000 人を超えるプログラマが同じ課題に取り組む予定です。
http://coderetreat.com/global_day.html

要約

英語サイトとかあったみたいなのですが、読めないので当日事前準備なしで参加しましたが、つまり『ライフゲーム(Conway's Game of Life)』を45分×6回セッションの間、ペアプログラミングで実装をしましょうというものです。
で、ペアプログラミングはセッション毎に相手を変え、かつそのセッションで書いたコードを全て破棄しましょうというものでした。

詳細は別blogに任せます。

開始〜趣旨説明〜準備

  • 前日とある事情により、深夜に帰宅し、このまま寝てしまうと間に合わない(8:30までに会場入り)と思ったので、身体を休めるために横になっただけで寝ないで参加。
  • 『Global Day of Coderetreat』についてよく調べずに参加したので、『ライフゲーム(Conway's Game of Life)』についての知識ゼロ。

という状態。

後、皆さん、herokuの発音は「はーおーくー」とのことですので、明日からは「はーおーく」と呼んであげてください。「へろく」とか「へーろく」とか呼んじゃダメですよ?

セッション1 Ruby

ペアプログラミングパートナー:@sandayuuさん
内容は牛尾さんの圧倒的パワーを隣で体験できたという感じ。まず事前にどんな課題をするかを調べてこられていたので、どういう実装にするのか紙にすぐに書いてくれて、とても助かった反面、俺邪魔者やなぁ〜というダメな子状態。
ペアプログラミングなので途中でドライバー*1とナビゲーター*2が交代する時にこれまたダメな子状態が爆発して、何回かコードを消してしまう事態に…。
Mac Book Airぇ〜
MBA使ったことないので、キーの違いに気づかず、Ctrを押しているつもりでOption?を押しているらしく、コピペしようとすると、何故*3かコードが消える事態に。
設計に対する意識のズレもあって、生死を判定する部分までで終了。
あっと言う間の45分であった。

一応、セッション1は『Conway's Game of Life を全員が知っている訳ではないので、このセッションはまずは問題を理解すること』と@haradakiroさんもセッション後のふりかえりのタイミングで言っていたので、そういった意味ではルールを理解するという障害は(牛尾さんのおかげで)クリア出来たので良いのだ。

セッション2 Ruby

ペアプログラミングパートナー:@hogehigaさん
セッション1に続き、今回もRubyでコーディングすることにした。
設計思想はセッション1で牛尾さんから教えてもらった設計をすることで、@hogehiga さんと合意したものの、実は牛尾さんの設計だと状態を保持する変数が1個もれているってことで、そこは @hogehiga さんのアイデアをもらって、実装に着手。
ここまで一切TDDをする気は Nothing で突き進んだ。
Wifi持ってないので、自分のPCはネットワークに繋がらないので、調べものをする際は @hogehiga さんのPC、実装は自分のPCということで実装を進めたものの、クラス構成を作っていくとコーディング量が多くなるのか、セッション1よりは前に進んだもののやはり、45分では最後までいけなかった。
まぁ、隣の卓から「changeworld、changeworld!*4」、「changeworld動かない!!*5」とか言われて気が散ったというのも少しは影響したいに違いない。

一応、セッション2はファシリテーターの @haradakiro さんから

  • テストが通ること
  • 意図が分かること
  • 重複がないこと
  • 最低限のメソッド行であること(5行だったかな?)

という課題が出ていたが、そんな課題は出来る奴だけがやるものだ!という方針でガン無視していた。

セッション3 PHP

ペアプログラミングパートナー:@shirokappaさん
こんな機会だし、別の言語も経験したいなぁと思ったのでセッション3はPHPに挑戦することにした。
一応HPやカートシステムといったしょぼいものを作った経験しかないので、『最後まで行けないと思いますが、それでも良いならペアになってください』とお願いしたところ、二つ返事でOKをもらったので、喜び勇んでペアプログラミングをさせてもらった。
セッション3では設計思想の共有は一切行わず、@shirokappa さんがPHPでテストコードを書いて、その後、プロダクトコードを書くという正しい、これぞまさしくTDDよ!という感じの実装をしてくれた。そのおかげで設計思想を共有する必要はなく、テストコードを書いてもらっている時点で設計が共有出来たのが素晴らしいと実感出来た。さらに、PHPでテストコードを書くといったことはしたことなかったのだが、隣でナビゲーターとして見ている間にどうすれば良いのかある程度分かったのか、途中でドライバーを交代した際はすらすらとまではいかないまでも普通にコーディング出来たので良い体験となったと思う。
ペアプロいいねペアプロ
結局最後まではいかなかったものの、3つのセッションの中では一番進んだので、TDDした方が実はコーディグ速度は増すのかも?と少し思った。

ランチタイム

時間が 12:00 - 13:30 と90分もあり、ペアプログラミング2回出来るじゃん!!と思えるランチタイム。ランチタイム中も設計部分に対する議論をしたりしていた。こういう仕事場だったらいいのにね。

セッション4 Java

ペアプログラミングパートナー:大佐と呼ばれている方
ランチタイム中にウィザード級の青いアイコンの方から「Cellの考え方をしなくても実装出来る」と言われ、うんうん唸っていた。
ペアプログラミングパートナーの方も同じ部分で詰まっていて、設計部分で45分のうちかなりを使ってしまい、最終的に殆ど実装出来ず…。

セッション5 Ruby

ペアプログラミングパートナー:@shinyaa31さん
セッション4があまりにも不完全燃焼だったので、心を入れ替えて、あまり良さそうな設計でなくても実装に入ってしまおうという心つもりに。
パートナーである @shinyaa31 さんとはまずは設計の意識合わせをし、“セル毎に位置情報(position)を持たずに、配列の位置で何とかしよう”という方向で作業を進めることに。
しかし、実装を進めて行くと最初はさくさく書けたものの、位置情報が無い為に配列の位置の判定ロジック部分がベタ書きになってしまい、二人して「あぁ〜!」と叫ぶ始末…。
ここで立ち止まってはセッション4の二の舞だ!と思い、“位置情報を使わない”設計でどれだけ行けるか?という思考にして、実装を進めていった。
判定部分の実装がかなりベタ書きになったものの、お互いの認識を共有しつつ進めることが出来たのは良かったと思っている。

セッション6 Ruby

ペアプログラミングパートナー:@katzchangさん
最後のセッションになっても最後まで行けなかったとかなったら嫌だったので、青い怖いアイコンの @katzchangさん にお願いして、最後のセッションのペアプログラミングパートナーになってもらった。
さて、まずは設計の意識合わせと思って、意識合わせをすると、設計がよく分からない…。
まぁ設計分からなくてもなんとかなるだろうと思ったら、 @katzchangさん は Ruby のコーディングしたことないという事実が…。
それなら実装部分は自分ががんばれば良いよねというお互いに @changeworlds が設計を理解していないことを知りつつも、実装を進めることに。
結論を言うと最後まで行かなかった…。
実装しているコードの量はかなり少ないし、設計部分は既に @katzchangさん が組み立てていたものだから、そこにも時間はかからない。つまり、何に時間がかかったかというと、設計を理解出来ていない自分がパンチャーしか出来ないことに起因していた。
設計を理解していないので、“○○を実装したい”と言われても“????”となって、具体的に書くコードを口で言ってもらうことが多々あり、口で言ってもらおうとすると、 @katzchangさん は Ruby にあまり詳しくないので、“それだと動かないですよ”とか自分が答えることになったりとこのロスが痛かった…。最終的には再度設計の細かい部分の説明をしてもらって、自分もやっと理解したけど、既に40分を過ぎており、残り時間じゃムリだよねぇ〜となった。アホの子ですまんす、 @katzchangさん。

ふりかえり

その後、ふりかえりを行い、何人かで懇親会へと流れ込むことになったけど、家に帰ってきて、このblogを書き始めた以降の記憶がない…。それ位、実は脳みそがフル回転していたんだなぁ。

最後に

最後にファシリテーターをしてくれた @haradakiro さん、運営スタッフの @takaesu0 さん、他運営スタッフの皆さん、そして参加者の皆さんありがとうございました。
また、素晴らしい会場を提供してくれたクラスメソッド株式会社様、ランチやケーキ、お菓子を提供してくれた株式会社アルティネット様、株式会社Odd-e Japan様にも感謝致します。

*1:コード書く人

*2:コードを指示する人

*3:何故かじゃないんだけどね

*4:メソッド名です

*5:しつこいですが、メソッド名です