Code Retreat
ソフトウエア職人だけで
なくプロの開発者なら誰
であれ生涯学習とスキル
の継続的な改善を気にす
   るべきだろう
成功するソフトウエア開発に
    必要なのは
幅広い技術力でありチームで
  開発に取り組むことだ
そして、
その技術の実践が
何よりも重要だ
残念ながら
日々のワークフローと
技術力の効率的な習得を
 両立するのは難しい
一時的にであれ、
    技術力の習得に
専念できる環境を作るのが
 CodeRetreats の目的だ
Code Retreat
このアイディアは
繰り返し実施できる
ソフトウエア開発の
基礎演習に丸 1 日を
費やすというものだ
Code Retreat
この演習では
単純な課題 ( ライフゲーム ) に、
 複数のセッションを通じて
   繰り返し取り組む
各セッションでは特定の
ソフトウエア開発と設計
 の領域の学習を行う
例えば、
ペアプログラミングや
    TDD だ
ライフゲームは単純な
たった 3 つのルールで
自動的に動く細胞の集
まりで、理解しやすい
一方、異なる開発手法
やソフトウエア設計上
のアイディアを探索す
るには好都合な題材だ
Code Retreat
Code Retreats のアイディア
     は 2009 年 1 月の
Codemash カンファレンスで
 生まれ継続的な改善を経て
 世界中で実施されている。
Global Day of
  Coderetreat
というイベントが
  2011,12,3
 に世界同時開催
プログラミング技術の
  習得という観点で
ひとつのスタンダード
    と言っても
 過言ではありません
Code Retreat
演習に含まれるのは
●
    シンプルな設計のための 4 つのルール
●
    OO の原則 (SOLID)
●
    心からの TDD
●
    関数型プログラミング
●
    継続的リファクタリング
●
    悪い習慣を利用する : 手動テストかテスト無し
●
    オブジェクト健康体操
●
    ペアプログラミングとコミュニケーション
●
    ピンポンペア
参考まで
●
    シンプルな設計のための 4 つのルール
    http://c2.com/cgi/wiki?XpSimplicityRules
●
    OO の原則 (SOLID)
    http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)
●
    心からの TDD
    http://gojko.net/2009/08/02/tdd-as-if-you-meant-it-revisited/
●
    継続的リファクタリング
    http://c2.com/cgi/wiki?RefactorMercilessly
●
    オブジェクト健康体操
    http://www.cs.helsinki.fi/u/luontola/tdd-2009/ext/ObjectCalisthenics.pdf
●
    ピンポンペア
    http://c2.com/cgi/wiki?PairProgrammingPingPongPattern
シンプルな設計のための 4 つのルール

●
    PASS ALL TESTS
●
    CLEAR, EXPRESSIVE, & CONSISTENT
●
    DUPLICATES NO BEHAVIOR OR
    CONFIGURATION
●
    MINIMAL METHODS, CLASSES, &
    MODULES
OO の原則 (SOLID)
●
    Single responsibility principle
●
    Open/closed principle
●
    Likov substitution principle
●
    Interface segregation principle
●
    Dependency inversion principle
Single responsibility principle


an object should have
     only a single
    responsibility.
Open/closed principle

software entities …
 should be open for
extension, but closed
  for modification
Likov substitution principle

objects in a program should
    be replaceable with
instances of their subtypes
    without altering the
correctness of that program
Interface segregation principle

 many client specific
interfaces are better
  than one general
  purpose interface
Dependency inversion principle

   one should “Depend upon
 Abstractions. Do not depend
upon concretions.” Dependency
  injection is one method of
   following this principle.
オブジェクト健康体操
●
    One level of indentation per method
●
    Don't use the ELSE keyword
●
    Wrap all primitives and Strings
●
    First class collections
●
    One dot per line
●
    Don't abbreviate
●
    Keep all entities small
●
    No classes with more than two instance variables
●
    No getters/setters/properties
Pair Programming Ping Pong Pattern

●
    A writes a new test and sees that it fails.
●
    B implements the code needed to pass the
    test.
●
    B writes the next test and sees that it fails.
●
    A implements the code needed to pass the
    test.
提供

Global Day of Code Retreat
   http://goo.gl/Cru1t

Coderetreat