Coderetreat ファシリテーターガイド

Coderetreat へようこそ

 Coderetreat は、一日中集中して練習するイベントです。ソフトウェア開発と設計の基礎に重点を置いています。開発者を仕事を片付けなければならないというプレッシャーから開放して、集中して練習する機会を提供することで、非常にスキルの向上に有効なことが示されています。モジュール設計、オブジェクト指向設計の基本原則を練習することで、将来にわたって変更コストを小さくするコードを書くスキルを改善できます。

 

ファシリテーション

 Coderetreatにはファシリテーターが必ず必要です。ファシリテーターの責務は、一日の概要を説明すること(私の解説ビデオを参考にしてください)、セッション中にペアをガイドすること、セッション間の振り返りと、終わりの会をリードすること。このページでは、一日の概要スケジュールと、効果的なファシリテーションのコツを説明します。ブログにも coderetreat のファシリテーションについて書いたのでご参考に。

 

構造

Coderetreat は、長時間テストされた確立されたフォーマットで、練習に集中するために最適化されていいます。

 

問題: コンウェイのライフゲーム

セッションの長さ: 45分

開催時間: 午前8時30分から午後5時か6時まで

ペアプログラミングは必須。ペアプログラミングにおける知識の伝搬が練習には必要であるから。

テスト駆動開発(TDD)を推奨

セッションが終わる毎に、ペアは組み替える

セッションが終わる毎に、作成したソースコードを削除する。ブランチに入れたり、バックアップしたりせずに、後を濁さずきれいに削除する

 

一日のすごし方

 coderetreat は、5ないし6セッションで構成されます。おのおののセッションでは、以前のセッションで得た知見を生かしてコードの作成を行います。午前のセッションは、問題ドメインの理解すること、既存の慣習の打破すること、自身による発見をめざすことに、集中します。午後のセッションでは、ちょっと背伸びをして、抽象化、モジュール化設計、テスト駆動開発のスキルと知識の獲得を目指しましょう。

 ほとんどのグループは、ソフトウエア開発に置ける基本、モジュールか設計、シンプルなデザインの4つのルールに集中すべきです。一日を、それらのコンセプトの練習に費やしましょう。

 

一日のラフなスケジュール

 

8 - 8.45am : 到着、コーヒや朝食など

8.45 - 9am : 趣旨説明、概要説明、問題ドメインの説明

9 - 9.45am : セッション #1

9.45 - 10am : ふりかえり、休憩

10 - 10.45am : セッション #2

10.45 - 11am : ふりかえり、休憩

11 - 11.45am : セッション #3

11.45 - 12pm : ふりかえり、休憩

12 - 1.30pm : 昼食、ディスカッション

1.30 - 2.15pm : セッション #4

2.15 - 2.30pm : ふりかえり、休憩

2.30 - 3.15pm : セッション #5

3.15 - 3.30pm : ふりかえり、休憩

3.30 - 4.15pm : セッション #6

4.15 - 4.30pm : ふりかえり、休憩

4.30 - 5pm : 最後のふりかえり

 

セッション毎のトピックの例

 経験を積んで、ペアの観察に慣れてきたらファシリテーターは、この例に限らずいろいろなこと試せるようになるでしょう。最初の数回は、以下の例をガイドとしてください。 

 

Sessions 1

 ペアは、問題ドメインの感覚をつかむ。コンウェイのライフゲームを全員が知っている訳ではないので、このセッションはまずは問題を理解するために使わせてよい。最初のセッションの後に、コードを削除するというアイデアについてディスカッションしてもよい。抵抗する人もいるだろうが、ルールであることをやさしく説明すること。

 

Session 2

 問題を表す適切なデータ構造についてディスカッションしよう。セルを保持するのに、配列を使うのが正しいだろうか?primitive obsession のアイデアについて説明する。 

 

Session 3

 チームに、ちょっと背伸びをするよう促してもよい。ブーリアンのフラグより、ポリモルフィリズムを使った方がいいかどうかについて議論しよう。primitive obsession を避けるようさらに促すこと。抽象化についても重点を置いて探求する。

 

Lunch / 昼食

 昼食時間は十分にとること。参加者は、自己紹介して、午前中に経験についてディスカッションできる機会とする。

 

Session 4, 5, 6

 午後のセッションでは、チームに自ら制約を課してコードを書くことを伝える。

以下に制約の例を示す。どの制約を課すかは、個々のチームの経験による 

  • if 文を使わない
  • ループを使わない
  • メソッドを小さくする(5行以下、1行?)
  • 言語のプリミティブを使わない
  • 本来の意味での TDD

 

さいごに

 最後に全員集合してふりかえりを行うのが重要です。普通の方法は、全員集合して全員に3つの質問を尋ねる方法です。グループの人数にもよりますが、時間を区切る必要があるかもしれません。20-30人もいると、結構時間がかかりますよ。

 

3つの質問

  • 今日、何か学んだことは?
  • 今日、何かびっくりしたことは?
  • 明日以降、何か今までとやり方を変えることは?

 

どんな言語でも

coderetreatで提示し、練習するアイデアは、どんなオブジェクト指向言語でも適用可能です。つきつめると、coderetreatは、複数言語でやるべきという意見もあります。coderetreatは新しい言語を学ぶための日ではありませんが、参加者が慣れていない言語で coderetreat をやってみるのは全く問題ありません。ただ、ペアの片方が開発環境が準備しておく必要があることは、ファシリテーターは強調しておかなければなりません。45分はとても短いので、開発環境をセットアップしているとあっという間に時間がなくなってしまいます。