Coderetreatを題材にした設計本

井上です。

Coderetreat (*1)というイベントをご存知でしょうか?
Coderetreat とは、ソフトウェア開発と設計の基本を学ぶためのイベントで、以下のような特徴があります。

  • 一日掛かりで行われる(5〜6セッション)
  • 参加者はペアでコードを書く(ペアプログラミング)
  • 1セッションは45分間
  • ライフゲーム (*2)」を題材とする
  • 各セッション終了後にコードを削除する
  • 各セッションで新しいペアを組む
  • セッションが進むにつれて制約を課す

また、CodeRetreatを世界中で同日に開催する 「Global Day of Coderetreat」 というものもあり、世界中で活発に開催されているイベントで、日本でも度々開催されています。(*3)
私もCodeRetreatに参加したことがあるのですが、一日掛かりのイベントなので大変な集中力を要しますが、とても勉強になりました。

そんな Coderetreat を題材にした設計本(洋書)を見つけたので紹介します。

Understanding the Four Rules of Simple Design

この本では、シンプルな設計を実現するための4つのルールを挙げています。

  1. Tests Pass (テストが通ること)
  2. Expresses Intent (意図を表現すること)
  3. No Duplication (DRY) (重複が無いこと : Don’t repeat yourself)
  4. Small (小さいこと)

興味深いのは、設計の題材として「ライフゲーム」を使っているところです。

def test_a_new_world_is_empty
  world = World.new
  assert_equal 0, world.living_cells.count
end

def test_a_cell_can_be_added_to_the_world
  world = World.new world.set_living_at(1, 1)
  assert_equal 1, world.living_cells.count
end

上記のコードをスタートとして、以下のようなテーマに沿ってコードを洗練させていきます。
(なお、コード例ではRubyが使われていますが、言語に依存した内容は殆ど含まれていません)

  • Test Names Should Influence Object’s API
  • Duplication of Knowledge about Topology
  • Behavior Attractors
  • Testing State vs Testing Behavior
  • Don’t Have Tests Depend on Previous Tests
  • Breaking Abstraction Level
  • Naive Duplication
  • Procedural Polymorphism
  • Making Assumptions About Usage
  • Unwrapping an Object
  • Inverted Composition as a Replacement for Inheritance

その他にも、Coderetreat で課される制約の例がいくつか紹介されていました。
その中で「Program like it’s 1969」というものがあり、セッション中30分経過時と44分経過時の2回だけコードを実行出来るという制約だそうです。何とも辛い制約ですね。

本自体は88ページと非常にコンパクトです。興味のある方は手に取ってみてはいかがでしょうか?

*1 coderetreat.org

*2 Conway’s Game of Life. 1970年にイギリスの数学者ジョン・ホートン・コンウェイ (John Horton Conway) が考案した生命の誕生、進化、淘汰などのプロセスを簡易的なモデルで再現したシミュレーションゲームである。(Wikipediaより)

*3 私が住んでいる仙台でも2014/12/13(土)に初めての Coderetreat が開催されます。興味のある方は是非ご参加下さい。
Code Retreat @ Rakuten, Sendai

Coderetreatを題材にした設計本」への1件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中