TDD+モブプログラミングでワイワイする会に参加しました #tddyyχ

このブログをご覧のみなさん、こんにちは。
昨日開催された以下のイベントに参加しました。

主催者から「blogを書くまでが勉強会への参加なんですからね!」という締めの言葉をいただきましたので、別のイベント記事がストックされている最中ですが、LIFO(Last In, First Out, 後入れ先出し)で。

TL;DR

  • ファシリテーターがいない >> 越えられない壁 >> 似非ファシリテーターがいる
  • 13:00開始なので、12:30に会場に行ったら真暗闇でワロタ(ワロエナイ)
  • モブプログラミングは太るのではないか疑惑
    • モブプログラミング中はカロリーの消費が激しいため、いつも以上に甘いお菓子を食べてしまうから

13:00 – 13:30 開場&インストラクション&チーム分け

参加者が集まらないゆるい状況で、雑談

13:30 – 16:30 ゆるゆるとモブプログラミング

13:45からチーム分けして、ゆるゆるとモブプログラミング開始

1セッション目

  • 言語: Python
  • テーマ: FizzBuzz
    • ほぼ全員Python初心者だったので
  • 交代: ToDo1個+リファクタリング+次の人へのテストを書いたら交代
  • 時間: 13:45 – 14:45
  • Learning Session is IMPORTANT!!
    • と以前知ったので、FizzBuzzという誰でも知っているテーマにも関わらず、TODO出しを最初に
    • これが予想以上にうまくいき、TDDもばっちり
  • 出力のテストに関しては、出力そのものをテストするのではなく、出力時にprintCountという変数をインクリメントし、その値を確認することで代用

2セッション目

休憩を挟んでからの2セッションは、隣のチームが100 doorsというのテーマをJavaでやっており、Doorオブジェクトを使う設計だったので、こちらは配列でやってみようという話に。

  • 言語: Python
  • テーマ: 100 doors
  • 交代: ToDo1個+リファクタリング+次の人へのテストを書いたら交代
  • Learning Session is IMPORTANT!!
  • 休憩時に隣のチームからPython経験者が移動してこちらに参加してくれたおかげで色々知識を共有してもらえた
    • Pythonはキャメルケースではなくスネークケースで変数やメソッドを定義する
    • Pythonで使えるListの特徴
    • Pythonで使える配列の定義の仕方
    • 仮実装で使えるPass
    • etc…
  • 休憩時に隣のチームから移動した人から色々比較した学びを得られた
    • Learning Sessionがないチームだと実装中に設計方針で喧々諤々してしまう
    • Learning Sessionで大枠のToDo(マイルストーン)を決めるとモブプログラミング中にそういうことが起こらないので良いのかも

総括

TDDを必須、一足飛びで実装しないという縛り(養成ギプス)を設けてモブプログラミングを実施した結果、Learning Sessionの大事さやTDDの大事さがよりいっそう際立ったように感じた。
特にLearning Sessionはとても良いものだと実感。